Как я могу сделать Дженкинса 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, выполните следующие действия:

  1. перейдите в настройки вашего проекта → веб-крючки
  2. введите URL" Build Now " из вашего проекта Jenkins в качестве URL события Push:

  3. клик Add Web Hook а то test hook

затем каждый раз, когда вы совершаете фиксацию в репозитории, запускается веб-крюк и создается сборка. Обязательно установите рабочее пространство Jenkins в delete workspace before each build Так вы получите новую копию нового кода.


не связано с Git, но ниже Я помогу с конфигурацией задания Дженкинса в деталях с Mercurial. Это может помочь другим с аналогичной проблемой.

  1. установите плагин триггера URL
  2. перейдите на страницу конфигурация задания и выберите . Установите значение * * * * *
  3. проверяем вариант: [URLTrigger] - Poll with a URL. Теперь вы можете выбрать некоторые параметры, такие как дата изменения изменение, содержание URL-адреса и т. д.
  4. в параметрах выберите URL-адрес изменить, выбрать первый вариант -Monitor change of content
  5. Сохранить изменения.

теперь вызовите некоторые изменения в репозитории 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:

  1. создайте задание в Jenkins только с именем задания и выберите тип проекта freestyle. Нажмите OK. Следующая страница ничего не добавляет - Просто нажмите сохранить.
  2. перейдите в локальный репозиторий Git, где у вас есть исходный код, и перейдите к .
  3. на содержит несколько файлов. Проверьте наличие "post-commit". Если нет, создайте файл "post-commit" без расширения файла:

    C:\work\test\.git\hooks\post-commit
    
  4. отредактируйте файл "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: имя пользователя Jenkins

    jobName: имя задания сборки

    apiToken: чтобы получить маркер API, перейдите к ваша страница пользователя Jenkins (вверху справа в интерфейсе). Он доступен в меню " Настройка "слева от страницы:"показать маркер API"

  5. внесите изменения в исходный код и зафиксируйте код в репозитории.

  6. ваша работа, 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 для запуска сборок.