如何在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
相关产品推荐
相关产品推荐

