Как запустить сборку удаленно из Jenkins?
Как настроить Git post commit hook?
Мое требование: всякий раз, когда в репозиторий Git вносятся изменения для конкретного проекта, он автоматически запускает сборку Jenkins для этого проекта.
В разделе сборки триггеров Jenkins я выбрал сборку триггеров удаленно.
В .git
каталоге есть каталог хуков, в котором мы должны настроить файл фиксации сообщения.
Я не понимаю, как запускать сборку оттуда (я знаю, что в какой-то части мы должны использовать команду curl).
curl cmbuild.aln.com/jenkins/view/project name/job/myproject/buildwithparameters?Branch=feat-con
Я поместил эту команду в каталог перехватчиков сервера git (перехватчик post commit).
Когда в репозитории происходят изменения, запускается автоматическая сборка.
Я хочу проверить в наборе изменений, нужно ли запускать сборку хотя бы в одном java-файле.
Предположим, что разработчики изменили только файлы xml или файлы свойств, сборка не должна запускаться.
Вместе с тем xml
, предположим, что там есть .java
файлы, и сборка должна начаться.
Ответы:
Как упоминалось в разделе « Опрос должен умереть: запуск сборок Jenkins с помощью git-хука », вы можете уведомить Jenkins о новой фиксации:
Как упоминалось здесь , убедитесь, что вы используете правильный адрес для своего сервера Jenkins:
Чтобы усилить этот последний пункт, ptha добавляет в комментариях :
Вы также можете использовать простой обработчик post-receive, как в « Сборках на основе push с использованием Jenkins и GIT »
Однако это сценарий для конкретного проекта, и автор упоминает способ его обобщения.
Первое решение проще, поскольку оно не зависит от аутентификации или конкретного проекта.
По сути, ваш сценарий сборки может:
git notes
при первом звонке )HEAD
кандидатом в ветку для сборки и фиксацией, на которую ссылаетсяgit notes
'build' (git show refs/notes/build
):git diff --name-only SHA_build HEAD
.git notes
"build
" вHEAD
.Май 2016: cwhsu указывает в комментариях на следующий возможный URL:
Июнь 2016, Поларетто отмечает в комментариях :
источник
yourRepo.git/hooks/post-receive
curl http://yourserver/jenkins/git/notifyCommit?url=<URL of the Git repository>
. Параметр url должен точно соответствовать тому, что у вас есть в URL-адресе репозитория вашего задания Jenkins. При копировании примеров я пропустил протокол, в нашем случае ssh: //, и он не работал.Надеюсь, это поможет: http://nrecursions.blogspot.in/2014/02/how-to-trigger-jenkins-build-on-git.html
Это просто вопрос использования
curl
для запуска задания Jenkins с помощью крючков git, предоставляемых git.Команда
может запускать задание Jenkins, где
someJob
- имя задания Jenkins.Найдите
hooks
папку в скрытой папке .git. Переименуйтеpost-commit.sample
файл вpost-commit
. Откройте его с помощью Блокнота, удалите: Nothing
строку и вставьте в нее указанную выше команду.Вот и все. Каждый раз, когда вы выполняете фиксацию, Git запускает команды после фиксации, определенные в файле.
источник
Поскольку в предыдущем ответе был показан пример того, как может выглядеть полный хук, вот код моего рабочего хука после получения:
В этом случае я запускаю задания jenkins только при нажатии на master, а не на другие ветки.
источник
Я хочу добавить к приведенным выше ответам, что становится немного сложнее, если авторизация Jenkins включена.
После включения я получил сообщение об ошибке, что анонимному пользователю требуется разрешение на чтение.
Я увидел два возможных решения:
1: Изменение моего крючка на:
2: настройка авторизации на основе проекта.
У прежних решений есть недостаток, заключающийся в том, что мне приходилось выставлять свой пароль в файле ловушки. Неприемлемо в моем случае.
Второй у меня работает. В глобальных настройках аутентификации мне пришлось включить Все> Читать для анонимного пользователя. В проекте, который я хотел запустить, мне пришлось включить Job> Build and Job> Read for Anonymous.
Это все еще не идеальное решение, потому что теперь вы можете видеть проект в Jenkins без входа в систему. Возможно, есть еще лучшее решение, использующее предыдущий подход с http-входом, но я этого не понял.
источник