我有一个使用Pipeline插件的Jenkins服务器。在这里,我想并行启动多个构建,并等待构建完成,然后再进入我的管道的下一个阶段。
如果我明确地写出构建作业,我能够成功地做到这一点,如下所示:
parallel 'one': {
build job: 'job1',
parameters: [
[$class: 'StringParameterValue', name: 'CONFIG', value: "foo"]
],
propagate: false,
wait: true
}, 'two': {
build job: 'job2',
parameters: [
[$class: 'StringParameterValue', name: 'CONFIG', value: "foo"]
],
propagate: false,
wait: true
}, 'three': {
build job: 'job3',
parameters: [
[$class: 'StringParameterValue', name: 'CONFIG', value: "foo"]
],
propagate: false,
wait: true
}
然而,实际上,需要构建可变数量的作业,因此明确地写出这些作业是不可行的。我试图将构建包装在一个闭包中,如下所示:
def createParallel = { String parallelName ->
parallelName: {
build job: 'jobX',
parameters: [
[$class: 'StringParameterValue', name: 'CONFIG', value: "foo"]
],
propagate: false,
wait: true
}
}
parallel (
createParallel('one'),
createParallel('two'),
createParallel('three')
)
这种方法的问题是构建实际上并没有并行启动 - 它们一次构建一个,等待上一个构建完成。我做错了什么?
答案 0 :(得分:1)
您没有指定任何构建参数,因此Jenkins按设计合并了队列项。
答案 1 :(得分:0)
简短的回答是,由于错误JENKINS-33051和JENKINS-25979,目前无法在Jenkins中完成此操作。
我在上面所做的实际上是创建了三个平行线,每个平行线都有一个参数。需要做的是将闭包放在列表中,然后将列表作为参数传播,如下所示:
def list = [ createParallel('one'), createParallel('two'), createParallel('three') ]
parallel (*list)
不幸的是,目前Jenkins尚未实现这一点。
答案 2 :(得分:0)
设置wait:false,并且构建永远不会等待另一个构建。但是,如果需要触发另一个阶段,则必须获取结果