当前位置: 首页 > 知识库问答 >
问题:

Gitlab webhook不会触发jenkins上的构建

西门建安
2023-03-14

我用下面的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"
    }
  }
}

一切正常。种子项目从第一个脚本生成所有文件夹,并且正确构建了给定repo的所有分支。

不幸的是,在向gitlab提交推送后,我无法为任何分支触发构建。

我已经正确配置了jenkins——我是说gitlab插件,有一个连接,一切都很好。

我还在gitlab端添加了一个网络钩子,它也可以正常运行。发送测试推送后,我从jenkins收到200 OK,我确实在日志中看到扫描分支已经开始并正确检测到更改。不幸的是,更改后的分支的构建没有开始。这是分支扫描日志的摘录:

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

我百分之百确信这不是我的jenkins实例和gitlab帐户之间通信的问题。我看到推送到gitlab后webhook被触发,我看到请求被发送,分支扫描被运行。也检测到了变化,但究竟为什么作业没有启动?我还彻底阅读了文档,并正确配置了所有文档。

Jenkins version: 2.150.3
Gitlab version: 11.8.1-ee

编辑

似乎在将jenkins升级到v.2.164.1之后,一切都开始正常工作。

共有3个答案

呼延原
2023-03-14

可能您已将基本分支构建策略配置为仅包含特定分支,例如使用Exact Name:master,这将跳过示例中的分支ci

确保您的Jenkins分支构建配置涵盖您正在测试的分支。还要确保未设置抑制SCM自动触发选项。

请注意,组织或文件夹级别的设置将影响特定的项目和作业设置,除非它们在较低级别上被特别覆盖。

童冠玉
2023-03-14

我认为您需要使用includes()来指定标识将包括哪些分支的模式:

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

您可以指定许多模式,其中可以包括通配符。例如:

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

对于更细粒度的控制,也有相应的excludes()

卜飞鸣
2023-03-14

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

我们需要将名称指定为“源”,其他部分将使用该名称。对于Refspec,我们需要输入:refs/head/*: refs/远程数据库/源/*refs/mericed-请求/*/head: refs/远程数据库/源/mericed-请求/*

并且还:

分支规范我们需要源/${gitlabSource分支},它将根据我们接下来要设置的Web挂钩填写。

编辑1

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

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

编辑2

我找不到合适的git项目来运行并尝试复制这种行为。因此,如果有人知道一个类似的项目,可以分享,请评论,我可以做一些更多的测试。

对于Gitlab(请求试用密钥,否则将是Gitlab社区版):

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

希望这能帮到你!

 类似资料:
  • 我是詹金斯/格里特的新手。我在试着把gerrit和Jenkins融合在一起。我有一个jenkins项目设置,当在我的git存储库中创建(push)变更集时会触发,该变更集由gerrit项目托管。主分支不接受直接推送。我使用以下命令推送到存储库。 git推原点头:参考/for/master 现在,当我做一个推动时,詹金斯项目不会自动启动。我可以用“查询和触发gerrit补丁”手动触发gerrit事件

  • 问题内容: 我安装了Github插件并将Poll SCM设置为1分钟。下面是我的配置的图片。 因此,当我提交仓库时,一分钟后构建便开始了。 在我的github存储库上,我创建了一个webhook(但超时)和一个也不起作用的服务(我认为问题出在我的jenkins服务器上)。 但是缺少“将更改推送到GitHub时生成”复选框。 问题答案: 在GitHub插件v1.25.1版本上,触发器已重命名为 Gi

  • 问题内容: 我在Jenkins中配置了项目,该项目轮询SCM并在发布更改时开始构建。有一个后构建动作来构建另一个项目。我的问题是,之后要构建的项目具有其自己的参数。如何知道生成后操作触发时指定了哪个参数?现在,如果我使用“选择”,是否只是选择第一个?我如何挑选其他人? 问题答案: 好吧,让我们一个接一个:) 如果要查看使用了哪个参数,可以安装此插件:显示构建参数插件 如果要使用特定参数触发构建,请

  • 我有一个为自动化构建配置的docker hub存储库。请参见下图。当我按下“save and trigger build”时,我看到一个错误页面,上面只写着“Oops,there was a error!” 我试着发邮件给码头工人支持,但没有成功 知道为什么会发生这种情况以及如何解决吗?

  • 问题内容: 到目前为止,触发Jenkins构建工作可以创建新的请求请求,推动更改并留下评论,例如,当我在GitHub中点击绿色的“合并请求请求”按钮时,我看不到Jenkins中正在运行任何作业。 我的工作设置 参考规格: 分支说明符:或 参考了[GitHub pull request builder插件文档] [1]。 詹金斯原木 GITHUB Web日志 日志1) 请求 有效负载 日志2) 请求

  • 问题内容: 詹金斯似乎并没有自动提出需要从Gerrit进行审查的更改。 我们正在使用Gerrit触发器。 另外,如果我尝试手动触发一些操作,似乎什么也没发生。 Gerrit触发器管理区域中的“控件”似乎并不多…闪烁“正在启动”,“正在停止”或“正在重新启动” 有什么想法我做错了吗? 问题答案: 我只是遇到了同样的问题,这与我的工作中用于匹配分支的默认Gerritt设置有关。在工作中,在Gerrit