跳过正文
  1. Posts/

Jenkins 中 `result` 与 `currentResult` 的区别

·492 字·1 分钟· ·
沈显鹏
作者
沈显鹏
DevOps & Build 工程师 | Python 爱好者 | 开源贡献者
目录

这是一篇记录 resultcurrentResult 区别的笔记。


1. Declarative Pipeline 示例
#

以下是来自 JENKINS-46325 的测试代码:

pipeline {
    agent any
    stages {
        stage ('Init') {
            steps {
                echo "Init result: ${currentBuild.result}"
                echo "Init currentResult: ${currentBuild.currentResult}"
            }
            post {
                always {
                    echo "Post-Init result: ${currentBuild.result}"
                    echo "Post-Init currentResult: ${currentBuild.currentResult}"
                }
            }
        }
        stage ('Build') {
            steps {
                echo "During Build result: ${currentBuild.result}"
                echo "During Build currentResult: ${currentBuild.currentResult}"
                sh 'exit 1'
            }
            post {
                always {
                    echo "Post-Build result: ${currentBuild.result}"
                    echo "Post-Build currentResult: ${currentBuild.currentResult}"
                }
            }
        }
    }
    post {
        always {
            echo "Pipeline result: ${currentBuild.result}"
            echo "Pipeline currentResult: ${currentBuild.currentResult}"
        }
    }
}

运行结果(部分):

Init result: null
Init currentResult: SUCCESS
Post-Init result: null
Post-Init currentResult: SUCCESS
During Build result: null
During Build currentResult: SUCCESS
+ exit 1
Post-Build result: FAILURE
Post-Build currentResult: FAILURE
Pipeline result: FAILURE
Pipeline currentResult: FAILURE
Finished: FAILURE

结论:

  • currentResult 在流水线运行中会反映当前阶段的执行结果(初始为 SUCCESS,阶段失败时更新为 FAILURE)。
  • result 在 Declarative Pipeline 中为 null,直到流水线执行结束或阶段显式设置时才有值。

2. Scripted Pipeline 示例
#

以下是来自 CloudBees 支持文档 的例子。

失败情况
#

node {
    try {
        sh "exit 1"
        currentBuild.result = 'SUCCESS'
    } catch (Exception err) {
        currentBuild.result = 'FAILURE'
    }
    echo "RESULT: ${currentBuild.result}"
}

输出:

+ exit 1
RESULT: FAILURE
Finished: FAILURE

成功情况
#

node {
    try {
        echo "I'm not going to fail"
        currentBuild.result = 'SUCCESS'
    } catch (Exception err) {
        currentBuild.result = 'FAILURE'
    }
    echo "RESULT: ${currentBuild.result}"
}

输出:

I'm not going to fail
RESULT: SUCCESS
Finished: SUCCESS

3. 总结
#

属性类型何时更新典型用途
currentResult只读(String)始终反映当前构建或阶段的实时状态,默认 SUCCESS判断当前流水线/阶段执行是否失败
result可读写(String)默认 null,可在脚本中显式设置,或构建结束后自动赋值手动控制或覆盖最终构建结果

简单来说:

  • currentResult = “当前状态”
  • result = “最终结果(可手动覆盖)”

相关文章

Jenkins Linux Agent 配置

·353 字·1 分钟
本文提供了 Jenkins Linux Agent 的逐步配置指南,包括 Java 运行时的准备、节点创建以及常见问题的排查方法。