单个种子作业可以处理来自多个回购的DSL吗?

时间:2017-01-11 23:22:05

标签: jenkins jenkins-job-dsl

我最近设法将几个手动创建的作业转换为DSL脚本(内联到临时'种子'作业),并且惊喜地发现它是多么简单。现在,我想摆脱多个种子作业,并尝试更清晰地构建事物。

为此,我创建了一个新的jenkins-ci repo并将所有Groovy DSL脚本提交给它。然后我创建了一个job-generator Jenkins作业,该作业来自jenkins-ci repo,并且只有一个 Process Job DSLs 步骤。此步骤勾选了 Look on Filesystem 框, DSL Scripts 字段设置为jobs/*.groovy。通过全局推送通知,这可以按预期工作:如果我对jenkins-ci repo进行了更改,job-generator作业会自动运行并重新生成所有作业 - 真棒! / p>

我对此解决方案的不满意在于它的参考位置较差:作业的DSL脚本位于与代码完全独立的存储库中。我真正喜欢的是将作业DSL脚本保存在每个单独的代码存储库中,位于jenkins子文件夹中,并具有单个种子作业处理所有这些。这样,对CI设置的更改可以在代码旁边进行代码审查。对我而言,这感觉就像理想的设置。

不幸的是,我对如何实现这一点并不清楚。如果我能找到一种方法让种子作业观察多个repos,这样对其中任何一个的提交都会触发它,也许我可以在 Process Job DSLs 步骤之前注入另一个构建步骤, (不知何故)以我的方式编写胜利,但是......我不确定如何得到到那一点。 (我当然不想在生成器作业中为每个repo做完整的克隆只是为了拉入DSL脚本!)

我怀疑我并不是第一个希望将Job DSL脚本放在代码旁边的人,尽管我可能会高估其好处。关于这个主题的任何建议都将非常感谢 - 谢谢!

1 个答案:

答案 0 :(得分:2)

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

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

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

如果您的回购信息托管在GitHub上,您还可以查看GitHub Organization Folder Plugin。使用该插件,您只能为每个组织创建一个作业,而不是多个多分支作业。