如何使用 Gitlab Webhook 触发 Jenkins 多分支管道

问题描述 投票:0回答:4

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

我的问题是:

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

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

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

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

git jenkins gitlab jenkins-pipeline multibranch-pipeline
4个回答
17
投票

您需要在 Jenkins 上安装 GitLab 插件

这将在 Jenkins 上添加一个

/project
端点。 (参见 Jenkins => 管理 Jenkins => 配置系统 => GitLab)

现在将 Webhook 添加到您的 GitLab 项目 => 设置 => 集成。 (或者在较旧的 GitLab 版本中:GitLab 项目 => 滚轮图标 => 集成,在这种情况下您似乎需要成为该项目的所有者)

将 URL 设置为

http://*yourjenkins.com*/**project**(/*foldername*)?/*yourprojectname*
,然后单击“添加 webhook”。

当您在 Webhook 上单击“测试”时,它应该会触发您的 Jenkins 管道构建(您应该收到 200 HTTP 响应)。

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


5
投票

使用 GitLab 分支源插件

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

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

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


5
投票

重要的多分支工作 - 200 响应但没有任何触发

接受的答案是正确的。然而,正如许多人指出的那样,当他们使用 GitLab Branch Source 插件 测试来自 gitlab 的 webhook 时,他们得到了 200,但 Jenkins 上没有任何触发。

这其实是gitlab上测试功能的问题。

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

这给我带来了很大的痛苦!希望我为您节省了一些。


3
投票

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

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

管道多分支作业

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

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

© www.soinside.com 2019 - 2024. All rights reserved.