Как я могу сделать Jenkins CI с Git триггером на толчках, чтобы освоить?
Я пытаюсь настроить Jenkins-ci для проекта, использующего GitHub. Я уже настроил Jenkins с соответствующими плагинами. Я хочу, чтобы Дженкинс запускал сценарии сборки только тогда, когда кто-то в проекте пытается освоить. До сих пор я был в состоянии настроить его так, чтобы сборка была запущена в любое время, когда кто-либо толкает куда-либо, но это слишком широко. Я сделал это с помощью служебных хуков на Git.
Я читал вики Дженкинса и пару уроков, но эта конкретная деталь отсутствует... может быть, это как-то связано с опросом? Или нужно работать на стороне Git, чтобы Git запускал Дженкинса только при смене master
?
Ответы
Ответ 1
Как уже отмечал 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-репозиторий.
-
Однако опрос фактически проверяет, было ли что-либо передано в использованную ветку.
Работает отлично.
Ответ 2
Начиная с версии 0.5, плагин GitHub для Jenkins может запускать сборку, когда изменения передаются в GitHub.
Ответ 3
Вместо того чтобы запускать сборки удаленно, измените конфигурацию проекта Jenkins, чтобы запускать сборки путем опроса.
Jenkins может опрашивать на основе фиксированного внутреннего или по URL. Последнее - это то, что вы хотите пропустить, если нет изменений для этой ветки. Точные детали в документации. По сути, вам просто нужно проверить опцию "Опрос SCM", оставить раздел расписания пустым и установить удаленный URL-адрес, чтобы нажать JENKINS_URL/job/name/polling.
Если у вас есть защищенная среда Jenkins, в отличие от /build
, URL-адрес /polling
требует аутентификации. Инструкции здесь содержат детали. Например, у меня есть перехват GitHub Post-Receive, идущий к username:[email protected]_URL/job/name/polling
.
Ответ 4
Для 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
чтобы вы получили свежую копию нового кода.
Ответ 5
Не относится к 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
. Иначе, пользователь, который запустил его вручную.
Ответ 6
Вам необходимо указать ветку. По умолчанию он слушает что угодно. Смотрите сообщение в блоге Hudson: плагины Git и Maven.
Ответ 7
Надеюсь, это поможет: как запустить сборку Jenkins на коммите Git
Это просто вопрос использования curl для запуска задания Jenkins с использованием хитов Git, предоставляемых Git.
Команда curl http://localhost:8080/job/someJob/build?delay=0sec
может запустить задание Jenkins, где someJob
- это имя задания Jenkins.
Найдите папку "hooks" в скрытой папке .git. Переименуйте файл "post-commit.sample" в "post-commit". Откройте его с помощью Блокнота, удалите строку ": Ничего" и вставьте в него указанную выше команду.
Это. Всякий раз, когда вы делаете коммит, Git запускает команды post-commit, определенные в файле.
Ответ 8
Непрерывная интеграция с Jenkins после отправки кода в репозиторий из команды /GUI Git:
- Создайте работу в Jenkins только с именем работы и выберите тип проекта фристайл. Нажмите OK. Следующая страница ничего не добавляет - просто нажмите Save.
- Перейдите в локальный репозиторий 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
: имя пользователя Jenkins
jobName
: имя проекта сборки
apiToken
: чтобы получить свой токен API, перейдите на страницу пользователя Jenkins (вверху справа в интерфейсе). Он доступен в меню "Настройка" в левой части страницы: "Показать токен API"
-
Внесите изменения в исходный код и передайте код в хранилище.
-
Ваша работа, http://localhost:8080/jenkins/job/Gitcommittest/
, должна быть построена.
Ответ 9
Общий плагин 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
Ответ 10
Другим возможным решением проблемы является использование рецепта, аналогичного ответу на вопрос "Как вызвать сборку, только если изменения происходят в определенном наборе файлов" .
Ответ 11
В моей текущей организации мы не делаем это в master, но делаем это как при разработке, так и при выпуске/ветвлении (мы используем Git Flow), чтобы генерировать сборки моментальных снимков.
Поскольку мы используем конвейер с несколькими ветвями, мы делаем это в Jenkinsfile с синтаксисом when {}...
stage {
when {
expression {
branch 'develop'
}
}
}
Это подробно описано в этой записи блога: https://jenkins.io/blog/2017/01/19/converting-conditional-to-pipeline/#longer-pipeline.
Ответ 12
Приведенные выше ответы верны, но я обращаюсь к тем, кто новичок здесь для их простоты
особенно для настройки триггера сборки для конвейера:
Предположим, у вас есть две ветки Github: 1.master, 2.dev и Jenkinsfile (где написан конвейерный скрипт), и другие файлы доступны в каждой ветке
Настроить новый проект Pipeline (для ветки dev)
## 1. Интеграция кода с помощью git-plugin и подхода на основе cron. Необходимо установить обязательный плагин git и настроить его на свое имя и адрес электронной почты.
- Общий раздел. Проверьте флажок - 'Этот проект параметризован и добавьте Name- SBRANCH По умолчанию Value-' refs/remotes/origin/dev '
- Раздел "Построение триггеров" "Check checkbox -" Опрос SCM "и расписание в соответствии с необходимостью проверки коммитов, например," */1 * * * * ", чтобы проверять каждую минуту
- Раздел определения конвейера. Выбрать - конвейерный скрипт из SCM → выбрать git → URL-адрес addRepository → добавить учетные данные git → выбрать расширенный → добавить источник Name-, RefSpec- '+refs/heads/dev: refs/remotes/origin/dev '(dev - это ветка github) → ветки для сборки - $ {SBRANCH} (имя параметра из ссылки 1-й точки) → путь к сценарию—> Jenkinsfile → снять флажок Lightweightcheckout
- Применить—> сохранить
## 2. Интеграция кодов: подход github-plugin и webhook Предварительно необходимо установить плагин Github и настроить сервер Github, проверить соединение, если не учитывать следующую конфигурацию
Настройте плагин Github с учетной записью на Jenkins
Раздел GitHub Добавьте сервер Github, если его нет. URL-адрес API: https://api.github.com Учетные данные: Добавить секретный текст (нажмите кнопку Добавить: выберите тип секретного текста) со значением токена личного доступа (сгенерируйте его из своих учетных записей Github → настройки → Настройки разработчика—> Персональный токен—> Добавить токен—> Проверить области—> Скопировать токен) Тестовое соединение—> Проверить, подключено ли оно к вашей учетной записи Github или нет. Установите флажок "Управлять перехватчиками". предыдущие учетные данные для "общего секрета"
Добавьте webhook, если не добавлен в ваш репозиторий
- Перейдите в настройки Github Repository → добавить webhook—> добавить URL
Http://Public_IP: Jenkins_PORT/GitHub-webhook/ - Или, если у вас нет Public_IP, используйте ngrok. Установите, выполните аутентификацию, получите публичный IP-адрес с помощью команды. /ngrok http 80 (используйте свой jenkins_port), затем добавьте webhook → добавьте URL http://Ngrok_IP/github-webhook/
- Проверьте это, доставив полезную нагрузку со страницы webhook и проверьте, получите ли вы 200 статусов или нет.
Если у вас есть плагин Github Pull запросы, настройте его также с опубликованным URL-адресом Jenkins.
- Общий раздел. Установите флажок "Github project", добавьте URL проекта - (ссылка на github заканчивается на ".git/")
- Общий раздел. Установите флажок "Этот проект параметризован" и добавьте Name- SBRANCH По умолчанию Value- "refs/remotes/origin/dev"
- Установите флажок triggers.section.Check - "Триггер GitHub для опроса GITScm"
- Раздел конвейера: выберите - конвейерный скрипт из SCM → выберите git → URL-адрес addRepository → добавьте учетные данные git → выберите расширенный → добавить источник Name-, RefSpec- '+refs/heads/dev: refs/remotes/origin/dev '(dev - это ветка github) → ветки для сборки - $ {SBRANCH} (имя параметра из ссылки 1.st) → путь к сценарию—> Jenkinsfile—> снять флажок Lightweightcheckout
- Применить—> сохранить
Ответ 13
Использовать плагин построителя запроса pull:
https://wiki.jenkins-ci.org/display/JENKINS/GitHub+pull+request+builder+plugin
Это действительно просто. Затем вы можете настроить веб-узлы GitHub для запуска сборок.