跳过正文
Background Image
  1. Posts/

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

·492 字·1 分钟· ·
沈显鹏
作者
沈显鹏
目录

这是一篇记录 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 进行资源的锁定和释放
·901 字·2 分钟
本文介绍了如何使用 Jenkins 的 Lockable Resources 插件来管理和锁定资源,确保在多任务环境中资源的独占性和安全性。
通过 Jenkins 来提交修改的代码 git push by Jenkins
·439 字·1 分钟
如何通过 Jenkins Pipeline 脚本来提交修改的代码到 Git 仓库,包括克隆仓库、修改代码和推送更改等步骤。
Jenkins Linux Agent 配置
·353 字·1 分钟
本文提供了 Jenkins Linux Agent 的逐步配置指南,包括 Java 运行时的准备、节点创建以及常见问题的排查方法。
Jenkins Windows Agent 配置
·608 字·2 分钟
本文提供 Jenkins Windows Agent 的详细配置步骤,包括 Java 运行时准备、节点创建以及常见问题的排查方法。
Jenkinsfile 配置
·256 字·1 分钟
本文介绍了如何使用 Jenkinsfile 配置 Jenkins Pipeline,包括构建、测试和发布阶段的示例,以及如何处理邮件通知。
备份 Jenkins 的方法
·442 字·1 分钟
介绍如何使用 ThinBackup 插件或 Shell 脚本备份 Jenkins,确保 Jenkins 配置和构建数据安全存储。