Как вызвать Jenkins, чтобы начать сборку после принятия запроса на слияние GitLab
Я провел дни, пробуя разные подходы, чтобы Дженкинс сработал, когда мы принимаем запрос на слияние. К сожалению, я не могу заставить что-либо работать в нашей системе. Я пробовал разные плагины со стороны Jenkins для запуска GitLab, но, похоже, они тоже не работают. Добавляя параметризованные строки и добавляя токен в конец URL, я перепробовал их все - возможно, не в правильном порядке, я не уверен.
Я хотел бы, чтобы хорошая конфигурация точно указала мне, какие настройки я должен установить и какие плагины использовать. Я загрузил большинство плагинов для веб-хуков и плагинов с просьбой о слиянии, но ни один из них действительно не работает.
Затем следующий вопрос: как мне отладить то, что идет от GitLab к Дженкинсу? Вы смотрите на системные журналы? Кажется, там много всего, и то же самое с файлом /var/log/Jenkins/jenkins.log.
Любая помощь / предложения очень ценится.
Версия GitLab: 7.12.2 Версия Jenkins: 1.620
1 ответ
Я знаю, что это старый вопрос, но вот мои настройки для этого на GitLab CE 8.13.12 и Jenkins 2.46.2 с использованием декларативных конвейеров, а также плагина Gitlab 1.4.5 и плагина Gitlab Hook 1.4.2. Эти шаги, вероятно, будут работать и с последней версией.
- Два отдельных задания по трубопроводам
- Первая работа специально для сборки MR
- Второй - для мастер-ветви / репо, где MR объединяется в
- В обоих заданиях включен триггер сборки "Построить, когда изменения передаются в GitLab"
- Для задания MR включены следующие события
- Событие запроса на слияние (и перестройка при нажатии на источник и цель)
- Комментарии (и некоторые комментарии)
- В основном задании включен только триггер Push-событий, но также имеется расширенная опция для фильтрации веток (я использую только имя-мастера)
- Для задания MR включены следующие события
Тогда сценарии конвейера выглядят так: MR
checkout ([
$class: 'GitSCM',
branches: [[name: "${env.gitlabSourceNamespace}/${env.gitlabSourceBranch}"]],
extensions: [
[$class: 'PruneStaleBranch'],
[$class: 'CleanCheckout'],
[
$class: 'PreBuildMerge',
options: [
fastForwardMode: 'NO_FF',
mergeRemote: env.gitlabTargetNamespace,
mergeTarget: env.gitlabTargetBranch
]
]
],
userRemoteConfigs: [
[
name: env.gitlabTargetNamespace,
url: env.gitlabTargetRepoSshURL
],
[
name: env.gitlabSourceNamespace,
url: env.gitlabSourceRepoSshURL
]
]
])
мастер
checkout([
$class: 'GitSCM',
branches: [[name: '*/master']],
extensions: [
[$class: 'PruneStaleBranch'],
[$class: 'CleanCheckout']],
userRemoteConfigs: [[url: '<my-git-url>']]])
Это дает мне две работы. Работа MR зависит от плагина GitLab, чтобы определить, какие исходные и целевые репозитории и ветви следует извлекать, объединять и создавать. Основная работа будет только строить мастер репо.
Последний шаг - настроить веб-хук в GitLab для репо. Когда вы делаете веб-крючок в GitLab, он запрашивает следующую информацию:
- URL-адрес конечной точки (находится в задании Jenkins в разделе "Триггеры сборки")
- События (сопоставьте события от работы Дженкинса до здесь)
- Проверка SSL (зависит от вас и вашей конфигурации сети)
И ты должен быть готов!