项目中遇到了需要判断状态码的需求从网上找了些参考文档,最近有时间,整理了下,进入正题
在使用 Jenkins Pipeline 进行自动化构建和部署时,我们经常需要执行 Shell 命令,并获取命令的输出结果或执行状态。然而,很多同学对 sh
步骤的用法不够熟悉,导致脚本出错或逻辑异常。
今天,我们就来系统梳理一下 Jenkins Pipeline 中 sh
命令的两种用法:
当我们需要执行一个命令并获取其输出内容(比如获取文件md5
),可以使用 returnStdout: true
。
def result = sh(script:"echo 'haha'",returnStdout:true).trim()echo "${result}"
def result = sh(script:"haha", returnStdout:true).trim()echo "${result}"
sh
返回的是字符串输出,不是 result
对象!默认情况下,如果 Shell 命令执行失败(返回非0状态码),Jenkins 会直接中断 Pipeline。 如果希望捕获错误而不中断,比如判断某个服务进程是否存在、文件是否存在等。
这时,使用 returnStatus: true
。
示例:
def status = sh(script:"netstat -tunlp|grep java|grep 8088",returnStatus:true)
if (status == 0) {
echo "进程存在"
}else {
echo "进程不存在"
}
方法 | 用途 | 是否中断 Pipeline | 推荐场景 |
---|---|---|---|
returnStdout: true | 获取命令输出 | 失败时中断 | 获取版本号、MD5、主机名等 |
returnStatus: true | 获取状态码 | 不中断 | 条件判断、错误容忍 |
.trim()
:去除换行符和空格。== 0
:0 表示成功。try-catch
或 returnStatus
避免 Pipeline 意外中断。
sh(script: 'cmd', returnStdout: true).trim()