当前位置: 首页 > 知识库问答 >
问题:

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

韦绍晖
2023-03-14

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

我的问题是:

> < li>

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

如何触发单个分支的实际构建作业?我只能为推送事件添加一个网络钩子,但我必须添加分支名称,我不知道如何操作。

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

到目前为止,我尝试的是触发多分支工作,但这没有效果,跟随这个帖子根本不起作用。

共有3个答案

子车凌龙
2023-03-14

这是对上面关于合并请求的问题评论的一个更长的回应,由于篇幅的原因,我把它作为一个回答而不是一个评论贴出来。

多分支管道不支持Gitlab合并请求挂钩。更准确的说,gitlab插件不支持这个。如果您添加一个合并请求webhook并测试它,您将得到响应..."此项目不支持合并请求挂钩"。转到您找到的文档...

“管道多分支工作

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

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

丁嘉
2023-03-14

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

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

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

轩辕庆
2023-03-14

你需要在 Jenkins 上安装 Gitlab Plugin。

这将在Jenkins上添加一个/projectendpoint。(见詹金斯的文章=

现在在你的 Gitlab 项目上添加一个 webhook =

在Url: set超文本传输协议://*yourjenkins.com*/**项目**(/*foldername*)?/*yourproject ectname*仅此而已,然后单击“添加Webook”。

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

它在Gitlab插件中无需认证即可工作,欢迎使用认证配置。

 类似资料:
  • 我有一个参数化的Jenkins多分支管道,使用GitHub repo作为Jenkins文件和一些脚本的源。管道被配置为在Webhook上触发分支和拉请求,但我还希望只对主分支使用参数化的cron触发器,特别是在工作日每4小时一次。 我使用声明性管道语法,但如果必要,我愿意使用脚本化管道。 我使用参数化调度器插件来实现带有参数的cron触发器。 这个管道示例捕获了我试图实现但不支持的内容: 这项功能

  • 我对使用Jenkins文件和GIT插件的Jenkins多分支pipleline有一个问题。 问题是,每次向暂存分支推送都会触发master管道。所需的行为是,推送到暂存分支仅触发用于暂存的管道,而推送到主分支仅触发主管道 这是我的詹金斯档案 我将分享一些日志:这是主分支的日志 这是主分支的日志,但只有暂存有一个新的提交: 注意“已发现更改”,即使主分支上的头未更改 詹金斯·弗。2.190.1 Gi

  • 问题内容: 标题大多是这样说的。如何从远程git存储库触发Jenkins多分支管道项目构建? “ Trigger远程构建”构建触发器选项似乎不起作用,因为没有保存您设置的令牌。 问题答案: 目前(Jenkins 2.22),“触发触发器远程构建”构建触发选项在多分支管道作业配置中可见,但不起作用(如果您检查并指定了令牌,则无论如何保存后都会重置)。根据这个,这是故意的触发器不能确定,但一个错误,它

  • 问题内容: 我希望我的Jenkins多分支管道工作避免触发自身。作业之所以提交,是因为它将递增版本文件并将其检入源代码管理,这将导致无限循环。 在常规工作中,我可以按照以下说明操作来避免这种循环(尽管这不是最干净的方法)。 这些说明不适用于多分支管道(没有“忽略某些用户的提交”选项)。Jenkins多分支管道中是否有任何方法可以防止自我触发的提交? 问题答案: 如果使用GIT,一种解决方法: 更改

  • 我有一个Jenkins管道作业(不是多分支管道),管道内的逻辑之一是,当gitlab scm上有一个合并请求时,我想基于触发此生成的合并请求的源分支构建一些东西。 我的问题是,在Jenkinsfile中,我如何动态地获取这个源分支,签出代码,并创建一个工作区,以便在这个分支上运行构建?

  • 我正在努力在将提交添加到GitHub上的特定分支时触发Jenkins Pipeline作业。 我在詹金斯工作选项上没有看到合适的构建触发器,就像詹金斯自由式工作一样。 如何将Jenkins管道作业设置为在使用新提交更新分支时触发? 到目前为止,我还没有找到这个场景的明确答案,只有在提交到master时触发Jenkins管道作业,只有关于多分支作业的答案。 任何关于这个问题的帮助将不胜感激!