Как вызвать 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

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 (зависит от вас и вашей конфигурации сети)

И ты должен быть готов!

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