Gitlab webhook 不会触发 jenkins 上的构建

2023-12-29

我有一组使用以下 groovy 脚本生成的多分支管道作业:

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

  multibranchPipelineJob(service) {

    displayName(service)

    branchSources {
      git {
        remote("[email protected] /cdn-cgi/l/email-protection:whatever/${service}.git")
        credentialsId('gitlab-ssh-key')
      }
    }

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

    triggers {
      periodic(5)
    }

  }
}

并在每个回购协议中Jenkinsfile看起来如下:

#!/usr/bin/env groovy

properties([
      gitLabConnection('[email protected] /cdn-cgi/l/email-protection'),
      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项目从第一个脚本生成所有文件夹,并且给定存储库的所有分支都已正确构建。

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

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

我还在 gitlab 端添加了一个 webhook,它也运行正常。发送测试推送后我收到200 OK从詹金斯和我确实在日志中看到扫描分支已经开始并正确检测到更改。不幸的是,更改后的分支的构建没有启动。以下是分支扫描日志的摘录:

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

我 100% 确定这不是我的 jenkins 实例和 gitlab 帐户之间的通信问题。我看到推送到 gitlab 后触发了 webhook,我看到请求正在发送并且分支扫描正在运行。也检测到变化,但是到底为什么工作还没有开始?我也读过docs https://github.com/jenkinsci/gitlab-plugin#pipeline-multibranch-jobs-1彻底并正确配置所有内容。

Jenkins version: 2.150.3
Gitlab version: 11.8.1-ee

EDIT

看来将 jenkins 升级到 v.2.164.1 后,一切都开始正常工作。


我发现这非常有用设置示例 https://github.com/jenkinsci/gitlab-plugin/wiki/Setup-Example (与 Jenkins 和 GitLab 持续集成 https://medium.com/@teeks99/continuous-integration-with-jenkins-and-gitlab-fa770c62e88a)。尤其是那部分源代码管理:

我们需要将名称指定为“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 项目来运行并尝试重现此行为。因此,如果有人知道类似的项目并可以分享,请发表评论,我可以做更多测试。

For Gitlab(请求试用密钥,否则它将是 GitLab 社区版 https://about.gitlab.com/install/ce-or-ee/):

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

For 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

Then "Integration" —> "Jenkins CI" in Gitlab as in this image:enter image description here

希望这可以帮到你!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Gitlab webhook 不会触发 jenkins 上的构建 的相关文章

  • 将主分支的提交合并到另一个分支,但不合并两个分支

    我有 git 存储库和一个主分支 我决定开发新功能 并且创建了新分支 new branch 我已经在 new branch 中创建了一些提交 但我还没有完成新功能 我决定修复 master 分支中的一些错误 因此我切换到 master 分支
  • gitattributes 中的`* text=auto eol=lf` 会做什么?

    我们的 gitattributes 文件中有这样的内容 text auto eol lf 我想准确理解这是做什么的 第一部分是text auto 来自文档 http git scm com docs gitattributes 这确保了所有
  • 如何从父克隆中过去的提交中获取 git 子模块的关联提交 ID?

    有没有一种方法 除了实际检查父提交之外 还可以根据父克隆中的提交 ID 确定子模块的 SHA 1 提交 ID 我知道我能找到现在与 SHA 1 关联git submodule 这是一个例子 我有一个带有单个子模块的克隆foo上个月情况发生了
  • 如何摆脱 gerrit 中的错误依赖关系

    看起来 当使用 gerrit 时 默认情况下所有更改都依赖于前一个更改 我不会分支进行新的更改 我只是在主分支上工作 然后将提交的更改推送到远程源 主分支 即使两次提交彼此无关 每次都会创建依赖关系 我遇到了一些问题 这让我认为我没有正确地
  • 如何在声明性 Jenkins 管道的阶段之间传递变量?

    如何在声明性管道的阶段之间传递变量 在脚本化管道中 我收集的过程是写入临时文件 然后将该文件读入变量 如何在声明式管道中执行此操作 例如 我想根据 shell 操作创建的变量触发不同作业的构建 stage stage 1 steps sh
  • 避免使用 git 和 make 重新编译

    我在 git 中有两个开发分支 并且经常需要在两者之间进行更改 然而 真正令人沮丧的是 每次我在 git 中更改分支时 整个项目都会重新构建 因为某些文件的文件系统时间戳会发生变化 Ofc makefiles 配置为将项目构建到两个不同的构
  • 如何生成源文件并用gradle编译

    我有一个类似于以下内容的 gradle 构建脚本 apply plugin war task genSources lt lt here I generate some java files making sure that source
  • Jenkins + Gerrit 触发器未自动构建

    Jenkins 似乎不会自动引入需要 Gerrit 审核的更改 我们正在使用 Gerrit 触发器 另外 如果我尝试手动触发一些 似乎什么也没有发生 Gerrit Trigger管理区域中的 控制 似乎没有多大 闪烁 启动 停止 或 重新启
  • 如何解决git中文件重命名文件夹冲突?

    我有以下问题 我有两个分支 Branch1 和 Branch2 的一些共同提交 A Branch1 是一个公共分支 位于服务器上 Branch2 是本地分支 在 Branch1 中我更改了文件 BAD folder somefile txt
  • 如何在Git中手动合并所有文件?

    我想合并所有文件manually有了 meld 或任何其他 diff 工具 我如何使用 Git 来做到这一点 当我跑步时git mergetool它说no files need merging 所以我想只有当我有冲突时我才能做到这一点 有更
  • 如何从 jenkins 的现有项目生成 .hpi 插件

    我正在尝试使用 jenkins 的性能插件 但最新版本存在一些问题 如链接中所述 https issues jenkins ci org browse JENKINS 27100 https issues jenkins ci org br
  • 将代码从没有权限的存储库推送到私有存储库?

    我有一个来自外部存储库 我们称之为 ExRepo 的文件夹 我没有任何推送权限 我有一个名为 MyOwnRepo 的个人存储库 如何获取 ExRepo 并将其合并到 MyOwnRepo 中 我已经尝试过这个 C Users
  • 修改 Groovy 中现有的 xml 文件

    我有一个 pom xml 文件 例如
  • GitPython - 使用 ssh 密钥克隆 - 主机密钥验证失败

    我在应用程序中克隆 git 存储库时遇到问题 KEY FILE opt app ssh id rsa def read git branch config id branch config RepoConfig objects get id
  • 我应该如何将更改从一个提交转移到另一个提交?

    我在同一个分支上有两个提交 一个接一个 我在第一次提交中添加了对文件 A 的更改 然后对其他文件进行了一些更改 然后进行了另一次提交 现在我希望对文件 A 的更改是在第二次提交而不是第一次提交 最优雅的方式是什么 我知道这是一个老问题 但我
  • 从 Jenkins Pipeline 发布到 Artifactory

    我正在尝试使用 Jenkins v2 7 管道发布到 Artifactory v4 5 1 实例 下面是我的脚本的摘录 问题似乎是 Artifactory 对象无法识别并被视为字符串 有人可以建议问题可能是什么吗 node error Ar
  • Jenkins 管道构建如何确定工作区文件夹?

    在 Jenkins 管道中 当在特定节点上运行构建时 会在该代理上分配工作空间 我们没有设置工作空间路径 因此它是自动确定的 据我了解 当同一作业在同一代理上同时运行时 工作区必须包含执行程序编号以隔离构建 但是 工作空间路径到底是如何构建
  • 在声明性詹金斯管道中 - 我可以动态设置代理标签吗?

    有没有办法动态设置代理标签而不是普通字符串 该工作有 2 个阶段 第一阶段 始终在 主 代理上运行 在此阶段结束时 我将知道第二阶段应在哪个代理上运行 第二阶段 应该在第一阶段决定的代理上运行 我的 不起作用 尝试如下所示 pipeline
  • Spock模拟inputStream导致无限循环

    我有一个代码 gridFSFile inputStream bytes 当我尝试这样测试时 given def inputStream Mock InputStream def gridFSDBFile Mock GridFSDBFile
  • 在 emacs 的文件中不断出现的这些 ^M 是什么?

    我认为这可能与 TextMate 有关 但我们在一个小团队中工作 并且在 git 中几乎相同的文件的全文件冲突方面遇到了一些问题 在一个分支中 文件的每一行都附加了 M 这是什么神秘的事 M角色应该做什么 它从哪里来 我们的开发人员在 Wi

随机推荐

  • 在 Logback 中创建自定义布局

    我正在尝试在 logback 中创建自定义布局 如示例中所示手册第 6 章 http logback qos ch xref chapters layouts MySampleLayout html package com dces uti
  • 在 Rails 4 中创建到外部 URL 的 Rails 路由

    我有一堆路由 50 需要映射到外部 URL 我绝对可以按照建议做here https stackoverflow com questions 3622706 creating a rails route to an external url
  • Fortran 77 注释的语法突出显示在 vim 中不起作用

    我有一段用 Fortran 77 编写的代码 我用 vim 读取它 编写代码时 注释位于以c 这是 Fortran 77 中的标准 但是 vim 无法识别它们 因此使用着色语法 这使得代码非常难以阅读 我怎样才能克服这个问题 我看到有一个发
  • 在java中查找字符串中字符频率的有效方法:O(n)

    在最近的一次采访中 我被要求编写以下程序 找出给定字符串中频率最小的字符 因此 我尝试使用 charAt 迭代字符串 并将字符存储为 HashMap 中的键 并将出现次数作为其值 现在我必须再次迭代 Map 才能找到最低的元素 有没有一种更
  • 如何创建具有基本身份验证的 ASP.NET 网页

    我想创建 ASP NET 网页 该网页将提示我弹出基本身份验证窗口 我将在其中输入凭据 我尝试在 PreInit 和 PreLoad 事件处理程序中添加以下代码行 但它仍然没有显示基本身份验证弹出窗口 protected override
  • SQLNonTransientConnectionException 在 Eclipse 中连接 MySQL

    我正在尝试编写代码 使用 Eclipse MySQL Workbench 和 JDBC 8 0 11 将文本文件的数据导入数据库 它给了我一个 ClassNotFoundException 我已经查看了多个其他问题 并且通过将 java c
  • MassTransit Consumer 中的异常冒泡导致 Windows 服务崩溃

    我使用 AutoFac 设置了一个包含 2 个消费者的 Windows 服务 在一条快乐的道路上 这确实非常有效 我的印象是大众交通为我处理了例外情况 正如文档所述 http docs masstransit project com en
  • 使用报表查看器在运行时将未知数量的图像插入到报表中

    我正在使用reportviewer 我想在运行时向报告中添加未知数量的图像 用户应该选择一些图像 在另一个地方 这些图像应该一个接一个地显示在报告中 您知道如何使用报表查看器来做到这一点吗 谢谢 奥菲尔 有很多方法可以做到这一点 这是一种可
  • 头文件在代码块中工作吗?

    延迟函数为dos h头文件在代码块中不起作用 它表明延迟函数未声明 以下链接包含以下程序 link http www programmingsimplified com c dos h delay int main printf This
  • 寻找有界子图之间的最小割集

    如果游戏地图被划分为子图 如何最小化子图之间的边 我有一个问题 我试图通过基于网格的游戏 如 pacman 或 sokoban 进行 A 搜索 但我需要找到 外壳 外壳是什么意思 子图尽可能少切边 http en wikipedia org
  • 查找嵌入式 Linux 系统中的延迟问题(停顿)

    我有一个在 Atmel AT91SAM9260EK 板上运行的嵌入式 Linux 系统 其中有两个进程以实时优先级运行 管理器进程使用 POSIX 消息队列定期 ping 工作进程 以检查工作进程的运行状况 通常 往返 ping 需要大约
  • 可以使用 Java 程序的退出代码来检测磁盘空间不足的异常吗?

    我的 Java 程序是从 Windows 脚本调用的 是否可以使用 Java 退出代码来确定 Java 程序是否因磁盘空间不足而提前终止 同时它仍在从 JAR 文件加载类文件 我尝试了内存不足异常 它返回退出代码 1 但磁盘空间不足返回退出
  • 如何使 C++ 指针为空 [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 在声明所有 C 指针时 所有指针都应
  • Azure 流分析将行旋转为列

    我有一个类似的数据 deviceid d1 parameter p1 value 1 timestamp 2018 03 22T12 33 00 deviceid d1 parameter p2 value 2 timestamp 2018
  • 如何使用在其他地方创建的预聚类数据在 R 中创建树状图?

    我有用 Java 编写的集群代码 我可以从中创建嵌套树结构 例如下面显示了树的一小部分 其中两个 isRetired 对象在第一次迭代中聚集在一起 并且该组在第五次迭代中与 setIsRequired 聚集在一起 簇中对象之间的距离显示在括
  • 有没有办法确定 Linux 上的库使用的线程本地存储模型

    有没有办法在Linux上查询共享库的TLS模型 例如使用 ldd 或其他一些工具 我在使用 initial exec 模型加载太多库时遇到麻烦 并且想确定哪些第三方库使用此模型 这样我可以通过静态链接来释放一些插槽 这会导致错误 dlope
  • 标题中徽标和菜单项垂直居中的最佳实践[关闭]

    Closed 这个问题需要调试细节 help minimal reproducible example 目前不接受答案 我经常发现自己必须将徽标和主菜单垂直居中在全角标题中 有没有一种被广泛接受的方法来处理这个问题 header box s
  • Android:如何使用处理程序handleMessage并访问对MainActivity的引用

    我有一个服务 它接收来自互联网的命令并启动后台线程 该线程从服务传递一个处理程序 该服务是有界的并传递该处理程序 并向该处理程序发送一条消息以拍照 我被困在处理程序的实现上 static Handler handler new Handle
  • 如果不是 apache 目录,请删除尾部斜杠

    我有以下重写规则 remove the www RewriteCond HTTP HOST www website co uk NC RewriteRule http local website co uk 1 R 301 L this r
  • Gitlab webhook 不会触发 jenkins 上的构建

    我有一组使用以下 groovy 脚本生成的多分支管道作业 repo1 repo2 each service gt multibranchPipelineJob service displayName service branchSource