Как я могу сделать Дженкинса CI с Git триггером на толчках, чтобы освоить?
Я пытаюсь настроить Jenkins-ci для проекта с помощью GitHub. Я уже настроил Jenkins с соответствующими плагинами. Я хочу, чтобы Дженкинс запускал скрипты сборки только тогда, когда кто-то в проекте нажимает на master. До сих пор я был в состоянии настроить его так, что сборка будет запускаться в любое время, когда кто-то толкает в любом месте, но это слишком широко. Я сделал это с помощью крючков обслуживания post-receive на Git.
Я прочитал Вики Дженкинса и пару учебников, но это особенно детали отсутствуют... может, это как-то связано с опросом? Или следует работать на стороне Git, так что Git запускает только Дженкинса, когда master
меняется?
11 ответов
Как уже отмечалось gezzed в своем комментарии, между тем, есть хорошее решение (описано в опрос должен умереть: запуск Дженкинса строит из Git hook):
установите триггер сборки задания Дженкинса в опрос SCM, а не не указать расписание.
-
создайте триггер GitHub post-receive для уведомления URL
http://yourserver/jenkins/git/notifyCommit?url=<URL of the Git repository>?token=<get token from git to build remotely>
этот вызовет все сборки, которые опрашивают указанный репозиторий Git.
тем не менее, опрос фактически проверяет, было ли что-либо перемещено в используемую ветвь.
Он отлично работает.
начиная с версии 0.5, плагин GitHub для Jenkins can инициировать сборку, когда изменение перемещается в GitHub.
вместо запуска строит удаленно измените конфигурацию проекта Jenkins, чтобы вызвать сборки путем опроса.
Дженкинс может опрашивать на основе фиксированного внутреннего или по URL. Последнее-это то, что вы хотите пропустить сборки, если для этой ветви нет изменений. Точные детали в документация. По сути, вам просто нужно проверить опцию "Poll SCM", оставить раздел расписания пустым и установить удаленный URL-адрес для попадания JENKINS_URL / работа / имя / опрос.
один gotcha, если у вас есть защищенная среда Дженкинса, в отличие от /build
, the /polling
URL требует аутентификации. Инструкция здесь есть подробности. Например, у меня есть GitHub Post-Receive hook собирается username:apiToken@JENKIS_URL/job/name/polling
.
на GitLab, выполните следующие действия:
- перейдите в настройки вашего проекта → веб-крючки
-
введите URL" Build Now " из вашего проекта Jenkins в качестве URL события Push:
- клик
Add Web Hook
а тоtest hook
затем каждый раз, когда вы совершаете фиксацию в репозитории, запускается веб-крюк и создается сборка. Обязательно установите рабочее пространство Jenkins в delete workspace before each build
Так вы получите новую копию нового кода.
не связано с Git, но ниже Я помогу с конфигурацией задания Дженкинса в деталях с Mercurial. Это может помочь другим с аналогичной проблемой.
- установите плагин триггера URL
- перейдите на страницу конфигурация задания и выберите . Установите значение
* * * * *
- проверяем вариант:
[URLTrigger] - Poll with a URL
. Теперь вы можете выбрать некоторые параметры, такие как дата изменения изменение, содержание URL-адреса и т. д. - в параметрах выберите URL-адрес изменить, выбрать первый вариант -
Monitor change of content
- Сохранить изменения.
теперь вызовите некоторые изменения в репозитории Mercurial с помощью некоторых тестовых проверок.
см., что задание Дженкинса теперь выполняется путем обнаружения изменений SCM. Когда сборка запускается из-за изменений Mercurial, вы увидите текст Started by an SCM change
. Else, пользователь, который запустил его вручную.
Я надеюсь, это поможет: как запустить сборку Дженкинса на git commit
это просто вопрос использования curl для запуска задания Дженкинса с помощью крючков Git, предоставляемых Git.
команда curl http://localhost:8080/job/someJob/build?delay=0sec
можно запустить работу Дженкинса, где someJob
- имя задания Jenkins.
Поиск папки " крючки "в вашем скрытом.папка git. Переименуйте " post-commit.пример "файл для" post-commit". Откройте его с помощью блокнота, удалите ": Ничего " и вставьте в него вышеуказанную команду.
вот именно. Всякий раз, когда вы делаете фиксацию, Git запускает команды после фиксации, определенные в файле.
необходимо указать ветку. По умолчанию он слушает все. См. сообщение в блоге Hudson: Git и Maven Плагины.
непрерывная интеграция с Дженкинсом, после того, как код будет отправлен в репозиторий из команды Git / GUI:
- создайте задание в Jenkins только с именем задания и выберите тип проекта freestyle. Нажмите OK. Следующая страница ничего не добавляет - Просто нажмите сохранить.
- перейдите в локальный репозиторий Git, где у вас есть исходный код, и перейдите к .
-
на содержит несколько файлов. Проверьте наличие "post-commit". Если нет, создайте файл "post-commit" без расширения файла:
C:\work\test\.git\hooks\post-commit
-
отредактируйте файл "post-commit" с помощью команды ниже. Убедитесь, что он присутствует в локальной папке hooks исходного кода.
curl -u userName:apiToken -X POST http://localhost:8080/jenkins/job/jobName/build?token=apiToken
пример:
curl -u admin:f1c55b3a07bb2b69b9dd549e96898384 -X POST http://localhost:8080/jenkins/job/Gitcommittest/build?token=f1c55b3a07bb2b69b9dd549e96898384
5.
userName
: имя пользователя JenkinsjobName
: имя задания сборкиapiToken
: чтобы получить маркер API, перейдите к ваша страница пользователя Jenkins (вверху справа в интерфейсе). Он доступен в меню " Настройка "слева от страницы:"показать маркер API" внесите изменения в исходный код и зафиксируйте код в репозитории.
ваша работа,
http://localhost:8080/jenkins/job/Gitcommittest/
, должен быть дом.
Универсальный Триггер Webhook Плагин можно настроить фильтры, чтобы добиться этого.
при использовании
- переменной с именем
ref
и слова$.ref
. - фильтр с текстом
$ref
и выражение фильтра, как^refs/heads/master$
.
тогда эта работа будет срабатывать для каждого нажатия на master
. Никаких опросов.
вероятно, вам нужно больше значений из webhook для фактического выполнения сборки. Просто добавьте больше переменных с помощью JSONPath, чтобы выбрать то, что вам нужно.
здесь есть несколько вариантов использования: https://github.com/jenkinsci/generic-webhook-trigger-plugin/tree/master/src/test/resources/org/jenkinsci/plugins/gwt/bdd
в моей текущей организации мы не делаем этого в master, но делаем это как в develop, так и в release/ branches (мы используем git Flow), чтобы генерировать сборки моментальных снимков.
поскольку мы используем многоотводный конвейер, мы делаем это в файле Jenkinsfile с помощью когда{} синтаксис...
stage {
when {
expression {
branch 'develop'
}
}
}
все это подробно описано в этом блоге: https://jenkins.io/blog/2017/01/19/converting-conditional-to-pipeline/#longer-pipeline
используйте плагин pull request builder: https://wiki.jenkins-ci.org/display/JENKINS/GitHub+pull+request+builder+plugin
Это очень просто. Затем вы можете настроить GitHub webhooks для запуска сборок.