Как я могу заставить Jenkins CI с Git триггером на толчках освоить?

Я пытаюсь настроить Jenkins-ci для проекта, использующего GitHub. Я уже настроил Jenkins с соответствующими плагинами. Я хочу, чтобы Дженкинс запускал сценарии сборки только тогда, когда кто-то в проекте подталкивает к освоению. До сих пор я был в состоянии настроить его так, чтобы сборка была запущена в любое время, когда кто-либо толкает куда-либо, но это слишком широко. Я сделал это с помощью хитов для пост-получения на Git.

Я читал вики Дженкинса и пару уроков, но эта конкретная деталь отсутствует... может быть, это как-то связано с опросом? Или работа должна быть сделана на стороне Git, так что Git запускает Дженкинса только тогда, когда master изменилось?

15 ответов

Решение

Как уже отмечал gezzed в своем комментарии, между тем есть хорошее решение (описанное в опросе должно умереть: запуск сборок Jenkins из хука Git):

  • Установите для триггера сборки задания Jenkins значение Опрос SCM, но не указывайте расписание.

  • Создайте триггер GitHub после получения, чтобы уведомить 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 может запускать сборку, когда изменения передаются в GitHub.

Вместо того чтобы запускать сборки удаленно, измените конфигурацию проекта Jenkins, чтобы запускать сборки путем опроса.

Jenkins может опрашивать на основе фиксированного внутреннего или по URL. Последнее - это то, что вы хотите пропустить, если в этой ветке нет изменений. Точные детали в документации. По сути, вам просто нужно проверить опцию "Опрос SCM", оставить поле расписания пустым и установить удаленный URL-адрес для нажатия JENKINS_URL/job/name/polling.

Один вопрос, если у вас защищенная среда Дженкинса /build, /polling URL требует аутентификации. Инструкции здесь содержат детали. Например, у меня есть перехват GitHub Post-Receive, собирающийся username:apiToken@JENKIS_URL/job/name/polling,

Для GitLab используйте эти шаги:

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

    http://server.com/jenkins/job/project_name/build?delay=0sec например

  3. Нажмите Add Web Hook а потом test hook

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

Непрерывная интеграция с Jenkins после отправки кода в репозиторий из команды / GUI Git:

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

    C:\work\test\\.git\hooks\post-commit
    
  4. Отредактируйте файл post-commit с помощью приведенной ниже команды. Убедитесь, что он присутствует в вашей локальной папке перехвата исходного кода.

    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/, должно быть здание.

Надеюсь, это поможет: как запустить сборку Jenkins на коммите Git

Это просто вопрос использования curl для запуска задания Jenkins с использованием хитов Git, предоставляемых Git.

Команда curl http://localhost:8080/job/someJob/build?delay=0sec можно запустить работу Дженкинса, где someJob это название работы Дженкинс.

Найдите папку "hooks" в скрытой папке.git. Переименуйте файл "post-commit.sample" в "post-commit". Откройте его с помощью Блокнота, удалите строку ": Ничего" и вставьте в него указанную выше команду.

Вот и все. Всякий раз, когда вы делаете коммит, Git запускает команды post-commit, определенные в файле.

Не относится к Git, но ниже я подробно расскажу о конфигурации работы Jenkins с Mercurial. Это может помочь другим с подобной проблемой.

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

Теперь запустите некоторые изменения в репозитории Mercurial с помощью некоторых проверочных проверок.

Убедитесь, что задание Jenkins теперь выполняется путем обнаружения изменений в SCM. Когда сборка будет запущена из-за изменений в Mercurial, вы увидите текст Started by an SCM change, Еще пользователь, который запустил его вручную.

Вам необходимо указать ветку. По умолчанию он слушает что угодно. Смотрите сообщение в блоге Hudson: плагины Git и Maven.

Общий плагин Webhook Trigger может быть настроен с фильтрами для достижения этой цели.

Когда настроено с

  • Переменная с именем 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, но делаем это как при разработке, так и при выпуске / ветвлении (мы используем Git Flow), чтобы генерировать сборки моментальных снимков.

Поскольку мы используем конвейер с несколькими ветвями, мы делаем это в Jenkinsfile с синтаксисом when{}...

stage {
    when { 
        expression { 
            branch 'develop'
        }
    }
}

Это подробно описано в этом посте: https://jenkins.io/blog/2017/01/19/converting-conditional-to-pipeline/.

Приведенные выше ответы верны, но я обращаюсь к тем, кто новичок здесь для их простоты

особенно для настройки триггера сборки для конвейера:

Предположим, у вас есть две ветви github: 1.master 2.dev и Jenkinsfile(где написан конвейерный скрипт), и другие файлы доступны в каждой ветви

Настроить новый проект Pipeline (для ветки dev)

## 1. Интеграция кода с помощью git-plugin и подхода на основе cron. Необходимо установить обязательный плагин git и настроить его на свое имя и адрес электронной почты.

1. Общий раздел. Проверьте флажок - "Этот проект параметризован" и добавьте Name-SBRANCH Значение по умолчанию -refs/remotes/origin/dev. 2. Установите флажок triggers.section.Check - "Опрос SCM" и планируйте по мере необходимости. для проверки коммитов, например '*/1 * * * *' Для проверки каждую минуту 3. Раздел определения трубопровода. Выберите - Скриптовый скрипт из SCM -> выберите git—> URL -адрес addRepository—> добавьте учетные данные git—> выберите опцию -> добавить имя - origin, RefSpec- '+refs/ возглавляет /dev:refs/remotes/origin/dev' (dev - ветвь github) -> Brnches для построения - ${SBRANCH} (имя параметра из ref 1.st point) -> Script Путь -> Jenkinsfile -> Снимите флажок Lightweightcheckout 4. Применить -> Сохранить

##2. Интеграция кода: подход github-plugin и webhook Необходимо установить обязательный плагин github и сконфигурировать github-сервер, проверить соединение, если не учитывать следующую конфигурацию

Настройте плагин Github с учетной записью на Дженкинс

Раздел GitHub Добавьте сервер Github, если его нет. URL -адрес API: https://api.github.com/ Учетные данные: Добавить секретный текст (нажмите кнопку Добавить: выберите тип секретного текста) со значением Личный токен доступа (сгенерируйте его из своих учетных записей github -> настройки -> Настройки разработчика—> Персональный токен—> Добавить токен—> Проверить области—> Скопировать токен) Тестировать подключение -> Проверить, подключено ли оно к вашей учетной записи GitHub или нет. Установите флажок в разделе "Управление перехватчиками". предыдущие учетные данные для "общего секрета"

Добавьте Webhook, если не добавлены в ваш репозиторий

1. Перейдите в настройки репозитория Github -> добавьте webhook -> добавьте URL http://Public_IP:Jenkins_PORT/github-webhook/2. Или, если у вас нет Public_IP, используйте ngrok. Установите, выполните аутентификацию, получите публичный ip из команды./ngrok http 80(используйте свой jenkins_port), затем добавьте webhook -> добавьте URL http://ngrok_ip/github-webhook/3. Проверьте его, доставив полезную нагрузку со страницы webhook и проверьте, получить 200 статус или нет.

Если у вас есть плагин Github Pull запросы, настройте его также с опубликованным URL -адресом jenkins

1. Общий раздел. Проверьте флажок - "Github project", добавьте URL проекта - (ссылка на github заканчивается на ".git /") 2. Общий раздел. Установите флажок "Этот проект параметризован" и добавьте Name-SBRANCH Значение по умолчанию-'refs/remotes/origin/dev 'Флажок 3.Build triggers.section.Check -' Триггер перехвата GitHub для опроса GITScm '4. Секция конвейера defn.Select - Скрипт конвейера из SCM -> выберите git-> addRepository URL -> add git учетные данные—> выбрать предварительный вариант -> добавить имя-происхождение, RefSpec- '+refs/head /dev:refs/remotes/origin/dev' (dev - ветвь github) -> сборка Brnches - ${SBRANCH} (имя параметра из ref 1.st point) -> Путь к сценарию -> Jenkinsfile -> Снимите флажок Lightweightcheckout 5.Применить -> сохранить

Используйте плагин для создания запросов по запросу: https://wiki.jenkins-ci.org/display/JENKINS/GitHub+pull+request+builder+plugin

Это действительно просто. После этого вы можете настроить веб-хиты GitHub для запуска сборок.

  1. Управление Jenkins/ настройка системы / серверы GitHub

  2. В учетных данных jenkins job / git и спецификаторе ветки (укажите ветку, которую вы хотите искать)

https://stackru.com/image s/ed72b65cf5d03036838812336c479f3f4b58ec99.png

  1. Webhook на github

У меня тоже была такая же проблема. И это спасло меня

Для фильтрации в соответствии с тегом ref полезной нагрузки в задании конвейера jenkins устанавливается необязательный фильтр.

Затем применил необязательный фильтр к переменной «ref», чтобы разрешить только основную ветвь.

или выражение может быть просто

рефери/головы/мастер

Теперь моя работа jenkins запускается только тогда, когда есть фиксация для мастера

Мое решение для локального сервера git: перейдите в каталог хуков локального сервера git, проигнорируйте существующий update.sample и создайте новый файл, буквально названный "update", например:

gituser@me:~/project.git/hooks$ pwd
/home/gituser/project.git/hooks
gituser@me:~/project.git/hooks$ cat update
#!/bin/sh
echo "XXX from  update file"
curl -u admin:11f778f9f2c4d1e237d60f479974e3dae9 -X POST http://localhost:8080/job/job4_pullsrc_buildcontainer/build?token=11f778f9f2c4d1e237d60f479974e3dae9

exit 0
gituser@me:~/project.git/hooks$ 

Оператор echo будет отображаться под результатом git push, токен можно взять из конфигурации вашей работы jenkins, просмотрите, чтобы найти его. Если файл "обновление" не вызывается, попробуйте другие файлы с таким же именем без расширения "образец".

Это все что тебе нужно

Другие вопросы по тегам