一个种子作业可以处理来自多个转发的DSL吗



我最近成功地将几个手动创建的作业转换为DSL脚本(内联到临时的"种子"作业中),并惊喜地发现它如此简单。现在,我想摆脱多个种子作业,并尝试更干净地构建内容。

为此,我创建了一个新的jenkins-cirepo,并将所有Groovy DSL脚本提交给它。然后,我创建一个job-generator-Jenkins作业,该作业从jenkins-cirepo中提取,并有一个Process job DSL步骤。此步骤勾选Look on Filesystem框,并将DSL Scripts字段设置为jobs/*.groovy。全局推送通知已经到位,这或多或少符合预期:如果我更改jenkins-cirepo,job-generator作业会自动运行并重新生成所有作业——太棒了!

我不喜欢这个解决方案的地方在于它的引用位置很差:作业的DSL脚本与代码完全分离。我真正喜欢的是将作业DSL脚本保存在每个单独的代码存储库中的jenkins子文件夹中,并有一个处理所有这些脚本的单个种子作业。这样,CI设置的更改可以与代码一起进行代码审查。对我来说,这就像是一个理想的设置。

不幸的是,我不清楚如何实现这一点。如果我能想出一种方法让种子作业监视多个转发,这样对其中任何一个转发的提交都会触发它,也许我可以在处理作业DSL步骤之前注入另一个构建步骤,并(不知何故)为我的胜利编写脚本,但是。。。我甚至不确定如何达到这一点。(我当然不想在生成器作业中对每个repo进行完整克隆,只是为了拉入DSL脚本!)

我怀疑我不是第一个希望他们能把JobDSL脚本放在代码旁边的人,尽管我可能高估了它的好处。关于这个话题的任何建议都将不胜感激——谢谢!

不幸的是,没有直接的方法来解决这个问题。已经打开了几个功能请求(JENKINS-33275、JENKINS-37220),但AFAIK没有人处理其中的任何一个。

作为一种变通方法,您可以使用管道多分支插件,并为每个存储库创建一个多分支项目。然后,您必须向每个repo/branch添加一个简单的Jenkinsfile,并使用Jenkinsfile来执行Job DSL脚本。有关详细信息,请参阅在管道脚本中使用作业DSL。这将需要最少的编码,但我认为必须克隆每个repo才能工作,因为Job DSL文件必须在文件系统上可用。

您可以使用Job DSL创建多分支作业,请参阅API查看器中的多分支PipelineJob。这将是你的"根"种子工作。

如果你的转发托管在GitHub上,你也可以签出GitHub组织文件夹插件。使用该插件,您必须为每个组织只创建一个作业,而不是多个多分支作业。

最新更新