如何让Jenkins任务触发完所有循环下游任务后统一等待全部执行完成
解决方法
核心思路:先批量异步触发所有job1,把每个触发后返回的任务实例对象存到集合中,全部触发完成后再统一遍历等待所有实例执行完成即可,同时配置不传播下游任务的错误状态,满足不管下游成功失败都要等完全部执行的需求。
修正后的代码示例如下:
// 定义集合存储触发的job1实例引用 def job1Runs = [] stage('批量触发job1') { // 修正原代码的循环条件笔误,将i<3改为cntr<3 for(int cntr=0; cntr<3; cntr++) { // wait设为false异步触发,触发后直接返回当前任务实例,无需等待执行完成 def run = build job: "job1", parameters: [string(name: 'param1', value: val[cntr])], wait: false, // 关闭结果传播,下游job1执行失败不会直接终止当前流水线 propagate: false // 将触发的任务实例存入集合 job1Runs.add(run) } } stage('等待所有job1执行完成') { // 遍历所有job1实例,等待每个实例执行结束 job1Runs.each { run -> run.waitForCompletion() // 可选:获取并打印每个下游任务的执行结果 echo "下游任务${run.getFullDisplayName()}执行结果:${run.getResult()}" } } // 此处之后的流水线逻辑会在3个job1全部执行完成后才会运行
关键配置说明
wait: false:异步触发任务,触发完成立刻返回任务实例,不用等当前job1执行完就可以触发下一个,满足批量并行触发的需求propagate: false:关闭结果传播,下游job1不管执行成功还是失败,都不会直接中断当前流水线,符合不关心下游结果仅需等待全部执行完成的要求run.waitForCompletion():对提前存储的任务实例调用等待完成方法,所有实例都执行完成后当前阶段才会结束,后续流水线步骤才会继续执行
内容的提问来源于stack exchange,提问作者reachit
相关产品推荐
相关产品推荐

