我目前设置了一个基于 GitLab 服务器上托管的 Git 存储库的 Jenkins 多分支管道作业。 Jenkins 可以读取存储库中的分支并为存储库中的每个分支创建一个作业。但我不知道如何在 GitLab 中使用 webhooks 触发作业。
我的问题是:
如何从我们的 GitLab 服务器在 Jenkins 中触发创建新的分支作业?我看不到正在推送的新分支的 Webhook。
我如何触发单个分支的实际构建作业?我只能为推送事件添加一个 webhook,但随后我必须添加我不知道该怎么做的分支名称。
如何确保 GitLab 始终在推送到分支触发构建作业本身之前触发“分支作业的创建”。
到目前为止,我尝试的是触发多分支作业,但这没有效果,并且遵循这篇文章根本不起作用。
您需要在 Jenkins 上安装 GitLab 插件。
这将在 Jenkins 上添加一个
/project
端点。 (参见 Jenkins => 管理 Jenkins => 配置系统 => GitLab)
现在将 Webhook 添加到您的 GitLab 项目 => 设置 => 集成。 (或者在较旧的 GitLab 版本中:GitLab 项目 => 滚轮图标 => 集成,在这种情况下您似乎需要成为该项目的所有者)
将 URL 设置为
http://*yourjenkins.com*/**project**(/*foldername*)?/*yourprojectname*
,然后单击“添加 webhook”。
当您在 Webhook 上单击“测试”时,它应该会触发您的 Jenkins 管道构建(您应该收到 200 HTTP 响应)。
它无需在 GitLab 插件中进行身份验证即可工作,欢迎配置身份验证。
有一个(仍然是有些新的)Jenkins 插件,名为 GitLab Branch Source,它提供了许多很棒的功能,如果没有该插件,我无法轻松设置这些功能,并且应该可以轻松满足 OP 的要求。
例如,您可以创建一个“多分支管道”Jenkins 作业,将其配置为将所需的“GitLab 项目”作为其“分支源”,这将自动为您的项目分支创建新的 Jenkins 作业,并为您的项目创建新的 Jenkins 作业。合并请求。该插件还可以在 GitLab 项目上自动安装 Web 挂钩,以便新的分支、提交或合并请求将触发 Jenkins 继续前进。
所有这些都可以很好地配置,例如,您可以选择加入或选择退出自动 Web 挂钩创建。或者您可以指定合并请求作业应创建并签出本地合并提交/结果以进行测试。
重要的多分支工作 - 200 响应但没有任何触发
接受的答案是正确的。然而,正如许多人指出的那样,当他们使用 GitLab Branch Source 插件 测试来自 gitlab 的 webhook 时,他们得到了 200,但 Jenkins 上没有任何触发。
这其实是gitlab上测试功能的问题。
如果您通过将代码推送到分支来进行实时测试,它将被触发。
这给我带来了很大的痛苦!希望我为您节省了一些。
这是对上面有关合并请求的问题评论的较长回复,由于篇幅原因,我将其作为答案而不是评论发布。
多分支管道不支持 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。