如何在Jenkins管道中一次触发多个作业?

时间:2017-10-18 18:08:30

标签: jenkins jenkins-pipeline

我的Jenkins工作层次结构看起来像这样:

Collection/
    ParentJob
    Children/
        Foo
        Bar
        Baz

ParentJob有一些不同的配置,并且需要为每个配置构建Children /中的作业。这些配置基本上只是检查不同的分支并构建这些分支。此外,必须在子作业运行之前完成ParentJob的每个配置的一部分。

如何在每个ParentJob配置的必要部分完成后触发子进程中的所有作业?

我的第一个想法是在ParentJob的管道中放一个build 'Children/*'步骤,但似乎Jenkins在这种情况下不支持通配符。

我可以明确列出所有工作,但这会很繁琐(有几十个子工作),并且可能会因为添加或删除子工作而容易破损。

理想情况下,一个解决方案允许我在不触及任何其他内容的情况下设置新的子作业,并在下次ParentJob运行时自动触发。

2 个答案:

答案 0 :(得分:2)

您可以获取子作业的列表,并使用for循环来构建它们。我没有对此进行测试,但我认为没有理由说它不起作用。

我以类似的方式构建我的作业文件夹,以利用命名约定和基于角色的安全性。

import jenkins.model.*

def childJobNames = Jenkins.instance.getJobNames().findAll { it.contains("Collection/Children") }

for (def childJobName : childJobsNames)
{
    build job: childJobName, parameters: [
        string(name: 'Computer', value: manager.ComputerName)
    ],
    wait: false
}

http://javadoc.jenkins.io/index.html?hudson/model/Hudson.html

答案 1 :(得分:0)

你需要使用Jenkins工作流程或管道,然后你可以运行一个阶段,然后一些并行,然后是一系列连续的阶段,等等。This StackOverflow Question and Answer似乎是一个很好的参考。