我目前设置了一个Jenkins多分支管道作业,该作业基于托管在Gitlab服务器上的Git存储库。Jenkins可以读取存储库中的分支,并为存储库中的每个分支创建一个作业。但是我不知道如何在Gitlab中使用webhook触发作业。
我的问题是:
1.如何在Jenkins中从Gitlab服务器触发创建新的分支作业?我看不到新分支的webhook被推送。
1.如何触发单个分支的实际构建作业?我只能为推送事件添加一个webhook,但这样我就必须添加分支名称,我不知道该怎么做。
1.我如何确保Gitlab总是在推送到分支触发构建作业之前触发“创建分支作业”。
到目前为止,我尝试的是触发多分支作业,但这没有任何效果,并且遵循此帖子根本不起作用。
4条答案
按热度按时间hl0ma9xz1#
您需要在Jenkins上安装Gitlab Plugin。
这将在Jenkins上添加一个
/project
端点。(参见Jenkins => Administrate Jenkins => Configure System => Gitlab)现在在Gitlab项目中添加一个webhook => Settings => Integrations。(或在旧版Gitlab中:Gitlab project => Wheel icon => Integrations,在这种情况下,似乎您需要成为项目的所有者)
在Url:set
http://*yourjenkins.com*/**project**(/*foldername*)?/*yourprojectname*
中,然后单击“添加Webhook”。当你点击webhook上的test时,它应该会触发你的jenkins管道构建。(你应该有一个200的http响应)
它在Gitlab插件中无需身份验证即可工作,欢迎使用身份验证进行配置。
zz2j4svz2#
使用GitLab分支源插件
有一个(仍然 * 有点 * 新)Jenkins插件称为GitLab Branch Source,它提供了许多很棒的功能,如果没有插件,我无法轻松设置,并且应该很容易满足OP的要求。
例如,您可以创建一个“多分支管道”Jenkins作业,将其配置为将所需的“GitLab项目”作为其“分支源”,并将自动为您的项目分支创建新的Jenkins作业,并为您的合并请求创建新的Jenkins作业。该插件还可以自动在GitLab项目上安装Web钩子,以便新的分支,提交或合并请求将触发Jenkins继续前进。
所有这些都是可以很好地配置的,例如,您可以选择加入或退出自动Web钩子创建。或者,您可以指定合并请求作业应该创建并检出本地合并提交/结果以进行测试。
hl0ma9xz3#
IMPORTANT MULTIBRANCH JOB - 200响应,但没有触发
公认的答案是正确的。然而,正如许多人在使用GitLab Branch Source plugin时指出的那样,当他们从gitlab测试webhook时,他们得到了200,但在Jenkins上没有任何触发器。
这实际上是gitlab上的test函数的问题。
如果你通过将代码推送到你的分支来做一个实时测试,它会被触发。
这给我带来了很大的痛苦!希望我给你留了点。
92vpleto4#
这是对上面关于合并请求的问题评论的一个更长的回复,由于篇幅的原因,我将其作为一个答案而不是评论发布。
多分支管道不支持Gitlab合并请求挂接。更准确地说,gitlab插件并不支持此功能。如果添加合并请求webhook并对其进行测试,则会得到响应...“此项目不支持合并请求Hook”。转到您找到的文档...
“管道多分支作业
注意:无法将外部数据从GitLab传递到Pipeline Multibranch作业,因此不会为该作业类型填充GitLab环境变量。GitLab只会为Jenkins项目触发分支索引,Jenkins会相应地构建分支,而不需要例如git分支环境变量。因此,插件只监听多分支管道作业的GitLab Push Hooks;将忽略合并请求挂接。”https://github.com/jenkinsci/gitlab-plugin#pipeline-multibranch-jobs
很不幸。您至少可以创建一个“Pipeline”类型的经典作业,并使用“Pipeline script from SCM”选项,该选项将依赖于存储库中的Jenkinsfile。这将支持脚本式或声明式,或两者的混合。这意味着您可以将其指向已经在Blue Ocean中创建的Jenkinsfile(结果却发现您无法为此执行合并请求,因为在Blue Ocean中创建的管道当然总是多分支的)。然后,您可以使用作业配置将此传统管道作业配置为在合并请求时触发。您需要使用脚本中的插件步骤来根据需要更新GitlabCommitStatus和acceptGitLabMR。这至少会导致在更现代的蓝海UI中查看管道运行的能力。Gitlab MR中的pipeline链接也会将您引导到相同的UI。