Как я могу заставить 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 используйте эти шаги:
- Зайдите в настройки вашего проекта → Веб-хуки
Введите URL-адрес "Build Now" из проекта Jenkins в качестве URL-адреса Push-события:
http://server.com/jenkins/job/project_name/build?delay=0sec
например- Нажмите
Add Web Hook
а потомtest hook
Затем каждый раз, когда вы фиксируете репозиторий, запускается веб-ловушка и создается сборка. Обязательно установите рабочее пространство Jenkins на delete workspace before each build
так что вы получите свежую копию нового кода.
Непрерывная интеграция с Jenkins после отправки кода в репозиторий из команды / GUI Git:
- Создайте работу в Jenkins только с именем работы и выберите тип проекта фристайл. Нажмите ОК. Следующая страница ничего не добавляет - просто нажмите Сохранить.
- Перейдите в локальный репозиторий Git, где у вас есть исходный код, и перейдите к
.git/hooks
папка. hooks
Папка содержит несколько файлов. Проверьте на "пост-фиксацию". Если нет, создайте файл "post-commit" без расширения файла:C:\work\test\\.git\hooks\post-commit
Отредактируйте файл 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
: Имя пользователя JenkinsjobName
: Название работы сборкиapiToken
: Чтобы получить свой токен API, перейдите на страницу пользователя Jenkins (вверху справа в интерфейсе). Он доступен в меню "Настройка" в левой части страницы: "Показать токен API"Внесите изменения в исходный код и передайте код в хранилище.
Твоя работа,
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. Это может помочь другим с подобной проблемой.
- Установите плагин URL Trigger
- Перейдите на страницу конфигурации работы и выберите
Poll SCM
вариант. Установите значение в* * * * *
- Проверьте опцию:
[URLTrigger] - Poll with a URL
, Теперь вы можете выбрать некоторые параметры, такие как изменение даты изменения, содержание URL и т. Д. - В параметрах выберите Изменение содержимого URL, выберите первый вариант -
Monitor change of content
- Сохраните изменения.
Теперь запустите некоторые изменения в репозитории 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 для запуска сборок.
Управление Jenkins/ настройка системы / серверы GitHub
В учетных данных jenkins job / git и спецификаторе ветки (укажите ветку, которую вы хотите искать)
https://stackru.com/image s/ed72b65cf5d03036838812336c479f3f4b58ec99.png
- 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, просмотрите, чтобы найти его. Если файл "обновление" не вызывается, попробуйте другие файлы с таким же именем без расширения "образец".
Это все что тебе нужно