跳过正文
  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 Linux Agent 配置
·353 字·1 分钟
本文提供了 Jenkins Linux Agent 的逐步配置指南,包括 Java 运行时的准备、节点创建以及常见问题的排查方法。
Jenkins Windows Agent 配置
·608 字·2 分钟
本文提供 Jenkins Windows Agent 的详细配置步骤,包括 Java 运行时准备、节点创建以及常见问题的排查方法。
备份 Jenkins 的方法
·442 字·1 分钟
介绍如何使用 ThinBackup 插件或 Shell 脚本备份 Jenkins,确保 Jenkins 配置和构建数据安全存储。
通过 generic-webhook-trigger 插件实时获取 Bitbucket Repository Events
·716 字·2 分钟
本文介绍如何使用 Jenkins 的 generic-webhook-trigger 插件来实时获取 Bitbucket 仓库的事件信息,如 Pull Request ID 等。
Jenkins 执行 Shell 如果返回值不为0,作业(Job)停止并失败怎么办?
·393 字·1 分钟
如何在 Jenkins Pipeline 中处理 Shell 返回值不为0的情况,以确保作业(Job)在执行成功后仍然显示为成功状态。
解决 “.NET Framework 2.0 or later is required on this computer to run a Jenkins agent as a Windows service” 问题
·316 字·1 分钟
当 Jenkins Windows Agent 因缺少 .NET Framework 无法连接时,通过安装 .NET Framework 3.5 并设置 Jenkins Agent 服务来解决问题。