Gitlab Webhook不会触发jenkins的构建

Opa*_*pal 17 git groovy jenkins gitlab jenkins-pipeline

我有一组使用以下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)
    }

  }
}
Run Code Online (Sandbox Code Playgroud)

在每个仓库中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"
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

一切正常。该播种机项目产生从第一个脚本的所有文件夹和给予回购所有分支都正确建立。

不幸的是,在对gitlab进行提交+推送之后,我无法触发任何分支的构建。

我已经正确配置了jenkins-我的意思是gitlab插件,存在连接,并且一切正常。

我还在gitlab端添加了一个webhook,它也可以正常运行。发送测试推送后,我200 OK从jenkins 收到消息,并且确实在日志中看到扫描分支已开始并正确检测到更改。不幸的是,更改后的分支的构建无法启动。这是分支扫描日志的摘录:

  Checking branch ci
      ‘Jenkinsfile’ found
    Met criteria
Changes detected: ci (a7b9ae2f930b0b10d52bb42f1ecf96a68bba4a30 ? 39a4c1a65051d5e90079feec14ad22455a77c58e)
Did not schedule build for branch: ci
Run Code Online (Sandbox Code Playgroud)

我100%确定这不是我的jenkins实例和gitlab帐户之间的通信问题。我看到推送到gitlab后触发了Webhook,看到请求正在发送并且分支扫描正在运行。还可以检测到变化,但是为什么地球上的工作没有开始?我还仔细阅读了文档,并正确配置了所有文档

Jenkins version: 2.150.3
Gitlab version: 11.8.1-ee
Run Code Online (Sandbox Code Playgroud)

编辑

似乎在将jenkins升级到v.2.164.1之后,它们全部开始正常工作。

Ant*_*ald 4

我发现这个非常有用的设置示例与 Jenkins 和 GitLab 的持续集成)。特别是源代码管理部分:

\n\n
\n

我们需要将名称指定为 \xe2\x80\x9corigin\xe2\x80\x9d,其他部分将使用该名称。对于 Refspec,我们需要输入: +refs/heads/*:refs/remotes/origin/* +refs/merge-requests/*/head:refs/remotes/origin/merge-requests/*

\n
\n\n

并且:

\n\n
\n

我们需要的分支说明符origin/${gitlabSourceBranch}将根据我们接下来要设置的网络挂钩来填写。

\n
\n\n
\n\n

编辑1

\n\n

您可以对一个多分支管道尝试以下操作:

\n\n
    \n
  1. 选择一个分支,例如ci
  2. \n
  3. 选择“查看配置”
  4. \n
  5. 在“构建触发器”下,选择复选框“将更改推送到 GitLab 时构建”
  6. \n
  7. 对代码进行一些更改并推送到ci
  8. \n
\n\n
\n\n

编辑2

\n\n

我找不到合适的 git 项目来运行并尝试重现此行为。因此,如果有人知道类似的项目并可以分享,请发表评论,我可以做更多测试。

\n\n

对于Gitlab(需要试用密钥,否则它将是 GitLab 社区版):

\n\n
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\n
Run Code Online (Sandbox Code Playgroud)\n\n

对于詹金斯

\n\n
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\n
Run Code Online (Sandbox Code Playgroud)\n\n

然后在 Gitlab 中选择“ Integration ”\xe2\x80\x94>“ Jenkins CI ”,如下图所示:在此输入图像描述

\n\n

希望这可以帮到你!

\n