Jenkins:即使构建失败,管道也总是返回"SUCCESS"



update :这似乎是Pipeline: Declarative插件版本1.3.5中引入的错误 - 降级到1.3.4.1解决了此问题。票是在以下情况下创建的:

  • https://issues.jenkins-ci.org/browse/jenkins-56402

在远程执行器上使用时,如何获得构建的真实状态?

困境:

  • 使用声明管道
  • 构建在远程执行者上运行
  • 构建失败
  • 命中post {fafer {}}
  • currentBuild.result为null, currentBuild.currentResult是成功

在远程执行程序上执行构建时,如何访问实际故障?

代码视图:


pipeline {
    agent any
    stages {
        stage("test run") {
            steps {
                sh "exit 1"
            }
        }
    }
    post {
        always { 
            echo "I always run: ${currentBuild.result} <> ${currentBuild.currentResult}"
        }
        success {
            echo "I'm successful: ${currentBuild.result} <> ${currentBuild.currentResult}"
        }
        failure {
            echo "I failed: ${currentBuild.result} <> ${currentBuild.currentResult}"
        }
        fixed {
            echo "I'm fixed!: ${currentBuild.result} <> ${currentBuild.currentResult}"
        }
    }
}

和输出:

[Pipeline] Start of Pipeline
[Pipeline] node
Running on build-096575a3-e6af-4fff-9ca1-84cc46ba4b86-f9b8d29c in /var/vcap/data/jenkins-slave/workspace/test-job
[Pipeline] {
[Pipeline] stage
[Pipeline] { (test run)
[Pipeline] sh
+ exit 1
[Pipeline] }
[Pipeline] // stage
[Pipeline] stage
[Pipeline] { (Declarative: Post Actions)
[Pipeline] echo
I always run: null <> SUCCESS
[Pipeline] echo
I failed: null <> SUCCESS
[Pipeline] }
[Pipeline] // stage
[Pipeline] }
[Pipeline] // node
[Pipeline] End of Pipeline
ERROR: script returned exit code 1
Finished: FAILURE

(向我的问题发布"官方答案"):

这是Pipeline: Declarative插件版本1.3.5中引入的"错误" - 降级到1.3.4.1解决了此问题。票是在以下情况下创建的:

  • https://issues.jenkins-ci.org/browse/jenkins-56402

用户和开发人员之间关于这是否真的是一个错误。开发人员建议不再使用currentBuild.result(),但许多人指出,这是BC中断并引起了很多问题。

问题已被标记为Critical-可能会回滚或重新开发以更好地实施。

如果您依靠此功能,无论是currentBuild.result还是currentBuild.currentResult,我建议您在此错误上发布您的评论。

您可以使用catch:

                        try {
                        sh "exit 1"
                        currentBuild.result = 'SUCCESS'
                        }catch (Exception err) {
                        currentBuild.result = 'FAILURE'
                        }

最新更新