【发布时间】: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 后,我如何才能最巧妙地为这个多分支管道运行重建?
任何意见/建议将不胜感激!
【问题讨论】:
标签: jenkins jenkins-job-dsl multibranch-pipeline git-webhooks