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

时间:2016-12-05 16:57:45

标签: git jenkins gitlab jenkins-pipeline multibranch-pipeline

我目前正在设置Jenkins多分支管道作业,该作业基于我们​​的Gitlab服务器上托管的Git存储库。 Jenkins可以读取存储库中的分支,并为存储库中的每个分支创建一个作业。但我无法弄清楚如何在Gitlab中使用webhook来触发作业。

我的问题是:

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

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

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

  4. 我到目前为止尝试的是触发多分支作业,但这没有任何效果,并且this post之后根本不起作用。

5 个答案:

答案 0 :(得分:10)

您需要在Jenkins上安装Gitlab Plugin

这将在Jenkins上添加/project端点。 (在Jenkins中查看=>管理Jenkins =>配置系统=> Gitlab)

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

在网址中:设置http://*yourjenkins.com*/**project**(/*foldername*)?/*yourprojectname*即可,然后点击“添加网页”。

当您点击webhook上的测试时,它应该触发您的jenkins管道构建。 (你应该有200个http响应)

无需在Gitlab插件中进行身份验证即可运行,欢迎使用身份验证配置。

答案 1 :(得分:3)

这是对以上关于合并请求的问题注释的较长答复,由于篇幅过长,我将其发布为答案而不是注释。

多分支管道不支持Gitlab合并请求挂钩。更准确地说,gitlab插件不支持此功能。如果添加并请求了合并请求Webhook,则会收到响应...“此项目不支持合并请求钩子”。转到找到的文档...

管道多分支作业

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

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

答案 2 :(得分:2)

使用GitLab分支源插件

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

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

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

答案 3 :(得分:1)

我有同样的问题。使用Antoine的答案描述的配置。当我点击gitlab webhook上的测试时,尽管我得到200响应,但它不会触发jenkins管道构建。

当我提交时,它会触发这项工作。

答案 4 :(得分:1)

重要的多部门工作-200次响应,但没有触发

接受的答案是正确的。但是,正如许多人指出的那样,当他们从gitlab测试Webhook时,得到200,但Jenkins却没有触发。

这实际上是gitlab上的测试功能存在的问题。

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

这使我非常痛苦!希望我能为您节省一些。

相关问题