Jenkins 詹金斯流产平行期

Jenkins 詹金斯流产平行期,jenkins,jenkins-pipeline,Jenkins,Jenkins Pipeline,如何从一个并行作业中止另一个并行作业?我必须处理Jenkins管道中应该并行运行的任务。一旦任务1完成,任务2也应该完成。可能吗 pipeline { agent none stages { stage('Stage A') { agent { label "winvm01" } steps { script { stage('Stage 1') {

如何从一个并行作业中止另一个并行作业?我必须处理Jenkins管道中应该并行运行的任务。一旦任务1完成,任务2也应该完成。可能吗

pipeline {
  agent none
  stages {
    stage('Stage A') {
      agent {
        label "winvm01"
      }
      steps {
            script {
                stage('Stage 1') {       

                    def branches = [:]

                    branches["branch_1"] = { 
                         // do some lengthy work
                         echo "branch 1 ended"
                         // abort branch 2 here!!??
                    }

                    branches["branch_2"] = {
                        // to something that only should run while branch_1 is running
                    }
                    parallel branches
                }   
            }
       }
    }
  }
}

类似这样的方法会奏效:

stop = false

parallel 'long': {
    sleep 20
    println "finished long process"
    stop = true
}, 'short': {
    while ( !stop ) {
        println "work"
        sleep 1
    }
    println "stopped by other branch"
}
您还可以让分支1在流程结束时创建一个文件,分支2将检查该文件

如果分支1失败且停止条件从未满足,最好为分支2添加一个超时


编辑:忘记了
failFast:true
标志,这是确保其他分支在第一个分支失败时停止的更好方法。

failFast:true仅在失败时停止其他阶段,但如果我回忆正确,则不会不成功。这将是很好的,如果它将工作在不成功的也。不过,您的答案的问题是,它假设通常为“println”work“的作业很短,可以在循环中反复运行,等待停止。我认为在OP的问题中,branch_2是一个长时间运行的作业,应该在branch_1停止时停止。