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

时间:2017-04-15 03:13:22

标签: jenkins jenkins-pipeline

我对管道很新,并且已经阅读了一些官方教程。我一直试图弄清楚如何在try/catch中运行的节点中使用parallel。我正在关注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 {
                           ^

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

2 个答案:

答案 0 :(得分:2)

尝试将'script'替换为'steps',它在我身边很好用

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

}

答案 1 :(得分:0)

我想,您正在运行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'
            }
        }
    }
}