Gitlab Webhook не запускает сборку на Дженкинс - PullRequest
0 голосов
/ 02 марта 2019

У меня есть группа многоотраслевых конвейерных заданий, сгенерированных с помощью следующего скрипта groovy:

[
      'repo1',
      'repo2',
].each { service ->

  multibranchPipelineJob(service) {

    displayName(service)

    branchSources {
      git {
        remote("git@gitlab.com:whatever/${service}.git")
        credentialsId('gitlab-ssh-key')
      }
    }

    orphanedItemStrategy {
      discardOldItems {
        daysToKeep(0)
        numToKeep(30)
      }
    }

    triggers {
      periodic(5)
    }

  }
}

и в каждом репо Jenkinsfile, который выглядит следующим образом:

#!/usr/bin/env groovy

properties([
      gitLabConnection('ci@gitlab.com'),
      pipelineTriggers([
            [
                  $class               : 'GitLabPushTrigger',
                  triggerOnPush        : true,
                  triggerOnMergeRequest: true,
            ]
      ]),
      disableConcurrentBuilds(),
      overrideIndexTriggers(false)
])

node {

  def sbtHome = tool name: 'sbt-0.13.15', type: 'org.jvnet.hudson.plugins.SbtPluginBuilder\$SbtInstallation'

  stage('Checkout') {
    checkout scm
  }

  stage('Build') {
    sh "'${sbtHome}/bin/sbt' clean compile"
  }

  stage('Test') {
    sh "'${sbtHome}/bin/sbt' test"
  }

  if (env.BRANCH_NAME == 'develop' || env.BRANCH_NAME == 'master') {
    stage('Publish') {
      sh "'${sbtHome}/bin/sbt' publish"
    }
  }
}

Все работает правильно.Проект seeder генерирует все папки из первого скрипта, и все ветви для данного репо создаются правильно.

К сожалению, у меня проблемы с запуском сборки для любой ветви после commit + pushбыл сделан в Гитлаб.

Я правильно настроил jenkins - я имею в виду плагин gitlab, соединение есть, и все работает хорошо.

Я также добавил webhook на стороне gitlab, и он также работает правильно.После отправки тестового push-сообщения я получаю 200 OK от jenkins и вижу в журналах, что сканирование веток началось и правильно обнаружил изменения.К сожалению, сборка для измененной ветки не начинается.Вот выдержка из журнала сканирования филиалов:

  Checking branch ci
      ‘Jenkinsfile’ found
    Met criteria
Changes detected: ci (a7b9ae2f930b0b10d52bb42f1ecf96a68bba4a30 → 39a4c1a65051d5e90079feec14ad22455a77c58e)
Did not schedule build for branch: ci

Я на 100% уверен, что это не проблема со связью между моим экземпляром jenkins и учетной записью gitlab.Я вижу, что webhook срабатывает после нажатия на gitlab, я вижу отправку запроса и сканирование ветви.Изменения также обнаруживаются, но почему же работа не запускается? Я также внимательно прочитал docs и правильно все настроил.

Jenkins version: 2.150.3
Gitlab version: 11.8.1-ee

EDIT

Похоже, что после обновления jenkins до v.2.164.1 все стало работать правильно.

Ответы [ 4 ]

0 голосов
/ 12 марта 2019

Мы столкнулись с похожими (не одинаковыми) проблемами с gitlab и Jenkins, и проблема была связана с учетными данными.

В Jenkins мы создали новый глобальный токен доступа для GitLab (Jenkins Configuration -> Credentials)-> Система -> Новый глобальный доступ -> Определить токен gitlab).Это генерирует токен, который мы добавили в Webhook, теперь ловушка выглядит примерно так:

http://[Gitlab User]:[token ID]@Jenkins Address

Надеюсь, это поможет

0 голосов
/ 07 марта 2019

Полагаю, вам нужно использовать includes(), чтобы указать шаблоны, определяющие, какие ветви будут включены:

branchSources {
  git {
    remote("git@gitlab.com:whatever/${service}.git")
    credentialsId('gitlab-ssh-key')
    includes('ci')
  }
}

Вы можете указать количество шаблонов, которые могутвключать подстановочные знаки.Например:

includes("master release/* feature/* bugfix/*")

Существует также соответствующий excludes() для более тонкого контроля.

0 голосов
/ 08 марта 2019

Возможно, вы настроили Базовые стратегии построения веток , чтобы включить только определенные ветки, например, с использованием точного имени: master, которое пропустит ветку ci из вашего примера.

Убедитесь, чтоваша конфигурация ветки Jenkins охватывает ветки, которые вы тестируете.Также убедитесь, что Подавить автоматический запуск SCM не установлен.

Обратите внимание, что настройки на уровне организации или папки будут влиять на конкретные настройки проекта и задания, если они не будут специально переопределены на более низком уровне.

0 голосов
/ 06 марта 2019

Я нашел это очень полезным Пример установки ( Непрерывная интеграция с Jenkins и GitLab ).Особенно часть Управление исходным кодом :

Нам нужно указать имя как «origin», которое будет использоваться другими разделами.Для Refspec нам нужно ввести: +refs/heads/*:refs/remotes/origin/* +refs/merge-requests/*/head:refs/remotes/origin/merge-requests/*

А также:

Спецификатор ветвления нам нужен origin/${gitlabSourceBranch}, который будет заполнен на основе веб-хука, который мыДалее будет настройка.


Edit1

Для одного многоотраслевого конвейера можно попробовать следующее:

  1. Выберите ветку, например ci
  2. Выберите «Просмотр конфигурации»
  3. В разделе «Триггеры сборки» установите флажок «Сборка при изменении изменения в GitLab»
  4. Внесите некоторые изменения в код и нажмите ci

Edit2

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

Для Gitlab (запросил пробный ключ, в противном случае это будет GitLabCommunity Edition ):

sudo docker run --detach --hostname gitlab.example.com --publish 443:443 --publish 80:80 --publish 22:22 --name gitlab --restart always --volume /srv/gitlab/config:/etc/gitlab --volume /srv/gitlab/logs:/var/log/gitlab --volume /srv/gitlab/data:/var/opt/gitlab gitlab/gitlab-ee:11.8.1-ee.0

Для Jenkins :

sudo docker run  -u root  --rm  -d  -p 8080:8080  -p 50000:50000  -v jenkins-data:/var/jenkins_home  -v /var/run/docker.sock:/var/run/docker.sock  jenkins/jenkins:2.150.3

Тогда " Integration " -> "Дженкинс CI"в Gitlab, как на этом изображении: enter image description here

Надеюсь, это поможет вам!

...