如何让通用 Webhook 触发器插件与 Jenkins 中的多分支管道一起使用?

Posted

技术标签:

【中文标题】如何让通用 Webhook 触发器插件与 Jenkins 中的多分支管道一起使用?【英文标题】:How to get the Generic Webhook Trigger Plugin to work with multibranch pipelines in Jenkins? 【发布时间】:2019-08-02 03:35:57 【问题描述】:

我正在尝试设置一个场景,在 github 上创建一个触发 Jenkins 多分支管道的拉取请求,并且该多分支管道使用通用 Webhook 插件从从 github 发送到 jenkins 的 POST 请求中提取值在脚本中使用。

不幸的是,正如Generic Webhook Trigger Plugin wiki 所述:

注意:从管道配置时,该管道需要运行一次,以应用插件触发配置,之后该插件将能够触发作业。这就是 Jenkins 的工作方式,而不是在这个插件中实现的东西。您可以通过使用 Job DSL 来避免这种情况,并让 Job DSL 使用在该 DSL 中配置的插件创建管道作业。

使用普通管道就可以了,因为它只是创建 Jenkins 作业的一个过程。然而问题是,每当创建新的分支/PR 时,多分支管道都会创建一个新作业,这意味着对于我在 github 上创建的 each 拉取请求(这会触发我的多分支管道脚本),然后我必须运行它两次才能使通用 webhook 功能正常工作。对于长期项目来说,必须为每个 PR 重新提交是很乏味的。

在我看来,解决/改进这个问题有两种可能的方法。一种是尝试使用 DSL Jobs(如 wiki 建议的那样);但我尝试了这个,但无法让它工作(它给设置增加了巨大的复杂性,所以我暂时放弃了它)。

第二种可能的解决方案如下:当在github中创建一个PR时,Generic Webhook会导致在该PR对应的multibranch pipeline中创建一个新的job;多分支管道第一次运行这个新创建的作业的第一次构建将失败,原因在上面的引用中给出;但随后的解决方案可能涉及测试第一个作业是否失败,并以某种方式告诉 Jenkins 再次尝试为该作业重建。

所以我的问题与第二种方法有关:在 github 上创建 PR 后,我如何才能最巧妙地为这个多分支管道运行重建?

任何意见/建议将不胜感激!

【问题讨论】:

【参考方案1】:

要通过 webhook 触发多分支管道,您可以使用此插件:“多分支扫描 Webhook 触发器” https://plugins.jenkins.io/multibranch-scan-webhook-trigger/

【讨论】:

【参考方案2】:

实际上,多分支管道并非如此。只是普通的管道需要运行两次。

我更新了以下文档:

从管道(不是多分支管道)配置时...

【讨论】:

以上是关于如何让通用 Webhook 触发器插件与 Jenkins 中的多分支管道一起使用?的主要内容,如果未能解决你的问题,请参考以下文章

如何在推送某个分支时设置 github webhook 触发器

jenkins结合gitlab实现提交代码自动构建

使用通用 Webhook 参数检出 bitbucket 拉取请求的 GIT SCM 配置

码云Webhook触发Jenkins自动构建 - Jenkins演练

如何在 webhook 触发的函数运行后将信息发送回前端?

Webhook触发Jenkins 多分支项目构建