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

如何在Jenkins代理上运行程序并捕获返回码或输出字符串

Jenkins流水线实现代理程序执行与结果判断

以下是满足需求的完整Jenkins流水线代码:

pipeline {
    agent {
        label 'MyAgent'
    }

    stages {
        stage('Hello') {
            steps {                
                echo "Hello World ${p_TargetDevice}"
                script {
                    // 执行代理上的程序并捕获返回码
                    def exitCode = bat(
                        script: 'c:\\test\\program.exe',
                        returnStatus: true
                    )
                    
                    // 记录返回码到日志
                    echo "程序执行返回码: ${exitCode}"
                    
                    // 判断返回码,非0则终止流水线
                    if (exitCode != 0) {
                        error "程序执行失败,返回码: ${exitCode}"
                    }
                }
            }
        }
        
        stage('Bye') {
            steps {
                echo 'Goodbye World'
            }
        }
    }
}

关键说明:

  • 执行程序与捕获返回码:使用bat步骤(Windows代理)运行目标程序,通过returnStatus: true参数捕获返回码——默认情况下Jenkins会在命令返回非0时直接终止流水线,该参数允许我们手动控制后续逻辑。如果是Linux/macOS代理,替换为sh步骤即可。
  • 逻辑处理:用script块包裹Groovy判断逻辑,因为流水线的steps区域仅支持Jenkins内置步骤,无法直接写条件判断。
  • 终止流水线:当返回码非0时,调用error方法抛出错误,Jenkins会立即终止流水线,并将错误信息写入日志。
  • 变量拼接:使用Groovy的${变量名}语法完成字符串拼接,替代原伪代码中的+,更符合Jenkins流水线的语法规范。

扩展:捕获程序输出内容

如果需要同时记录程序的输出内容(而非仅返回码),可以使用以下写法一次性获取输出和返回码:

script {
    def outputStream = new ByteArrayOutputStream()
    def exitCode = bat(
        script: 'c:\\test\\program.exe',
        returnStatus: true,
        stdout: outputStream,
        stderr: outputStream
    )
    def programOutput = outputStream.toString().trim()
    
    echo "程序输出内容:\n${programOutput}"
    echo "返回码: ${exitCode}"
    
    if (exitCode != 0) {
        error "程序执行失败,返回码: ${exitCode},输出内容:\n${programOutput}"
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 00:15:45