rea*_*hit 1 parallel-processing groovy jenkins jenkins-pipeline
在此,我需要在不等待的情况下触发 3 次迭代(下面的示例 3)我的作业,但在触发所有 3 个作业后,必须等到所有 3 个作业成功完成,无论失败或通过。
我正在使用 wait:true但这会等待每次迭代,这不是我想要的。如果我使用 wait: false,它不会等待循环中的所有迭代完成,也不会等待下游作业完成。我希望当前的工作等到我得到工作结果(3 个管道)。
//job1 is a pipeline job which i am triggering multiple times with different params
stage {
for(int cntr=0;i<3;i++) {
build job : "job1",
parameters: [string(name: 'param1', value:val[cntr] )],
wait: false
}
}
Run Code Online (Sandbox Code Playgroud)
我认为你真正想要的是并行运行它们,然后等待它们全部完成。
为此,您可以使用并行关键字:
parallel:并行执行。获取从分支名称到闭包的映射以及可选参数failFast>,该参数将在任何其他分支发生故障时终止所有分支:Run Code Online (Sandbox Code Playgroud)parallel firstBranch: { // do something }, secondBranch: { // do something else }, failFast: true|false```
在你的情况下,它可能看起来像:
stage('Build Jobs') {
def values = ['value1', 'value2', 'value2']
parallel values.collectEntries {value ->
["Building With ${value}": {
build job : "job1",
parameters: [string(name: 'param1', value: value)],
wait: true
}]
}
}
Run Code Online (Sandbox Code Playgroud)
或者,如果您想使用索引而不是常量列表:
stage('Build Jobs') {
def range = 0..2 // or range = [0, 1, 2]
parallel range.collectEntries { num ->
["Iteration ${num}": {
build job : "job1",
parameters: [string(name: 'param1', value: somefunc(num)],
wait: true
}]
}
}
Run Code Online (Sandbox Code Playgroud)
这将并行执行所有作业,然后等待它们全部完成,然后再继续管道(不要忘记将步骤wait的参数设置build为true)。您可以在这里
找到更多类似的示例。
| 归档时间: |
|
| 查看次数: |
3949 次 |
| 最近记录: |