You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Jenkins流水线中如何捕获完整的异常错误信息?

Jenkins流水线捕获Shell命令详细错误信息的方案

要获取sh命令执行的完整错误输出,仅靠e.localizedMessage无法拿到有效内容,可通过以下两种方式实现:

方式一:主动捕获标准错误输出

在sh步骤中配置参数,直接捕获命令的标准错误输出,同时用返回码判断执行状态,避免自动抛出异常:

try {
    def errorOutput = sh(
        script: "ls nonexistentfolder",
        returnStderr: true,
        returnStatus: true
    )
    if (errorOutput != 0) {
        println "命令执行失败:${errorOutput}"
        // 更新GitHub提交状态,携带详细错误
        updateGitHubStatus(status: 'failure', description: "构建失败:${errorOutput}")
        error("终止流水线:命令执行失败")
    }
} catch (e) {
    updateGitHubStatus(status: 'failure', description: "构建异常:${e.message}")
}

注意:当returnStatus和returnStderr同时设为true时,sh步骤的返回值是标准错误输出内容,而非退出码。如果需要同时获取退出码和stderr,可将命令的stderr重定向到stdout,再用returnStdout: true捕获。

方式二:从异常对象中提取详细信息

当sh命令失败抛出hudson.AbortException时,可通过异常的cause属性或完整异常字符串获取详细错误:

try {
    sh("ls nonexistentfolder")
} catch (hudson.AbortException e) {
    def fullError = e.toString()
    // 部分场景下,详细错误存储在cause属性中
    if (e.cause != null) {
        fullError = e.cause.toString()
    }
    // 更新GitHub状态
    updateGitHubStatus(status: 'failure', description: "构建失败:${fullError}")
}

核心提示

  • 优先使用方式一,能直接精准获取命令的stderr内容,避免依赖异常对象的内部结构。
  • 若必须用try-catch捕获异常,需针对性处理hudson.AbortException,这是Jenkins执行shell命令失败时抛出的标准异常类型。

内容的提问来源于stack exchange,提问作者TomNash

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 08:43:16