并行使用 try/catch 时管道失败

Pipeline fails when using try/catch in parallel

我对管道还很陌生,一直在阅读一些官方教程。我一直在尝试弄清楚如何在 parallel 中的 运行 节点中使用 try/catch。我正在关注 official example。这是一些代码:

stage('Test') {
    parallel linux: {
        node('linux') {
            checkout scm
            try {
                unstash 'app'
                sh 'make check'
            }
            finally {
                junit '**/target/*.xml'
            }
        }
    }
}

运行 几乎相同的代码,只是更改了节点标签。但是我收到以下错误:

org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed:
WorkflowScript: 23: Expected a step @ line 23, column 29.
                           try {
                           ^

有人知道这里出了什么问题吗?

我猜,您是 运行 版本的 Pipeline 插件,其中不推荐使用此语法(是的,即使您从官方文档中获取示例也会发生这种情况...) 我建议你这样做:

 stage('Test') {
    steps {
        parallel (
           node('linux') {
            "firstTask" : {
                // Do your try/catch etc.
            }
           },
           node('linux') { //or some other slave name
            "secondTask" : {
                // Do some other thing in parallel
            }
           }
        )
    }
}

如果这不起作用,请尝试使用这些步骤,因为错误的原因与它们有关:

stage('Test') {
    parallel linux: {
        node('linux') {
            steps {
            checkout scm
            try {
                unstash 'app'
                sh 'make check'
            }
            finally {
                junit '**/target/*.xml'
            }
          }
        }
    }
}

或:

stage('Test') {
    parallel linux: {
        node('linux') {
            checkout scm
            try {
               steps {
                unstash 'app'
                sh 'make check'
               }
            }
            finally {
                junit '**/target/*.xml'
            }
        }
    }
}

尝试将'script'替换为'steps',我这边效果很好

stage('Test') {
parallel linux: {
    node('linux') {
        script {
            checkout scm
            try {
                unstash 'app'
                sh 'make check'
            }
            finally {
                junit '**/target/*.xml'
            }
      }
    }
}

}