繁体   English   中英

如何使用 Gitlab Webhook 触发 Jenkins 多分支流水线

[英]How to trigger Jenkins Multi-Branch Pipeline with Gitlab Webhook

我目前设置了一个基于 Gitlab 服务器上托管的 Git 存储库的 Jenkins 多分支流水线作业。 Jenkins 可以读取存储库中的分支并为存储库中的每个分支创建一个作业。 但我不知道如何在 Gitlab 中使用 webhooks 触发作业。

我的问题是:

  1. 如何从我们的 Gitlab 服务器触发在 Jenkins 中创建新的分支作业 我看不到正在推送的新分支的 webhook。

  2. 如何触发单个分支的实际构建作业 我只能为推送事件添加一个 webhook,但随后我将不得不添加我不知道该怎么做的分支名称。

  3. 在推送到分支触发构建作业本身之前,如何确保 Gitlab 始终触发“创建分支作业”。

到目前为止,我尝试过的是触发多分支作业,但这没有任何效果,并且遵循这篇文章根本不起作用。

您需要在 Jenkins 上安装Gitlab 插件

这将在 Jenkins 上添加一个/project端点。 (参见 Jenkins => 管理 Jenkins => 配置系统 => Gitlab )

现在在您的 Gitlab 项目 => 设置 => 集成中添加一个 webhook。 (或在较旧的 Gitlab 版本中:Gitlab 项目 => 轮子图标 => 集成,在这种情况下,您似乎需要成为项目的所有者)

在 Url 中:设置http://*yourjenkins.com*/**project**(/*foldername*)?/*yourprojectname*这样,然后单击“添加 Webhook”。

当您单击 webhook 上的 test 时,它应该会触发您的 jenkins 管道构建。 (你应该有一个 200 http 响应)

它在 Gitlab 插件中无需身份验证即可工作,欢迎配置身份验证。

这是对上述关于合并请求的问题评论的较长回复,由于篇幅原因,我将其发布为答案而不是评论。

多分支管道不支持 Gitlab 合并请求挂钩。 更准确地说,gitlab 插件不支持这一点。 如果您添加合并请求 webhook 并对其进行测试,您将得到响应...“此项目不支持合并请求钩子”。 转到您找到的文档...

"管道多分支作业

注意:无法将外部数据从 GitLab 传递到 Pipeline Multibranch 作业,因此不会为该作业类型填充 GitLab 环境变量。 GitLab 只会触发 Jenkins 项目的分支索引,并且 Jenkins 将相应地构建分支,而不需要例如 git branch env var。 因此,该插件只为多分支管道作业监听 GitLab Push Hooks; 合并请求挂钩被忽略。” https://github.com/jenkinsci/gitlab-plugin#pipeline-multibranch-jobs

很不幸。 您至少可以创建一个“管道”类型的经典作业,并使用“来自 SCM 的管道脚本”选项,该选项将依赖于 repo 中的 Jenkinsfile。 这将支持脚本式或声明式,或两者的混合。这意味着您可以将其指向您已经在 Blue Ocean 中创建的 Jenkinsfile(只会发现您无法为此执行合并请求,因为创建了一个管道在蓝海当然总是多分支)。 然后,您可以配置此经典管道作业以使用作业配置触发合并请求。 您将需要使用脚本中的插件步骤来根据需要更新GitlabCommitStatus 和 acceptGitLabMR。 这至少会导致在更现代的 Blue Ocean UI 中查看管道运行的能力。 Gitlab MR 中的管道链接也会将您定向到相同的 UI。

使用 GitLab 分支源插件

有一个(仍然有些新)Jenkins 插件称为GitLab Branch Source ,它提供了许多很棒的功能,如果没有该插件,我就无法轻松设置这些功能,并且应该可以轻松满足 OP 的要求。

例如,您可以创建一个“多分支管道”Jenkins 作业,将其配置为将所需的“GitLab 项目”作为其“分支源”,这将自动为您的项目分支创建新的 Jenkins 作业并为您的合并创建新的 Jenkins 作业请求。 该插件还可以负责在 GitLab 项目上自动安装一个 web 钩子,以便新的分支、提交或合并请求将触发 Jenkins 前进。

所有这些都可以很好地进行配置,例如,您可以选择加入或退出自动 Web 挂钩创建。 或者您可以指定合并请求作业应创建并检出本地合并提交/结果以进行测试。

重要的 MULTIBRANCH 作业 - 200 响应但没有触发

接受的答案是正确的。 然而,正如许多人指出的,当他们从 gitlab 测试 webhook 时,他们得到了 200,但没有在 Jenkins 上触发。

这其实是gitlab上test函数的问题。

如果您通过将代码推送到您的分支来进行实时测试,它将被触发。

这让我很痛苦! 希望我为您节省了一些。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM