我正在尝试将命令的结果放入Jenkinsfile中的布尔变量中。命令为:curl -o/dev/null -sfI "$url"
,可以在sh中使用,如下所示:
if ( curl -o/dev/null -sfI "$url" ); then
echo "URL exists"
else
echo "URL does not exist"
fi
因此,我的jenkinsfile中需要此条件,但我不知道如何重新创建它。这是我尝试过的:
def fileAlreadyExists = sh(
script: "curl -o/dev/null -sfI \"$url\"",
returnStdout: true
)
但是似乎总是返回false。
答案 0 :(得分:3)
由于-o /dev/null
的切换,您的命令不返回任何输出。如果要捕获退出代码,则必须设置returnStatus
而不是returnStdout
选项,例如:
def fileAlreadyExists = sh(
script: "curl -o/dev/null -sfI \"$url\"",
returnStatus: true
)
或者,您可以在curl命令之后扩展Bash命令以执行echo $?
以回显最后一个命令退出代码:
def fileAlreadyExists = sh(
script: "curl -o/dev/null -sfI \"$url\"; echo \\\$?",
returnStdout: true
) as Integer // explicit casting needed, because it returns String
变量fileAlreadyExists
存储一个整数值,因此您可以在if ()
语句中使用它(Groovy将if (0)
评估为false
,因此如果您期望{{1} }退出代码,那么最好使此比较显式,如:
0
请注意:如果要将if (fileAlreadyExists == 0) { /* exists */ } else { /* not exist */ }
传递给sh命令,请记住将其转义-Jenkins会删除单个转义字符,因此如果要传递例如用双引号标记基础脚本,然后您必须通过以下方式对其进行转义:\
。