gpt4 book ai didi

jenkins - 如何从 sh step 命令获取 curl 退出状态?

转载 作者:行者123 更新时间:2023-12-04 01:53:10 48 4
gpt4 key购买 nike

我试图将命令的结果放入我的 Jenkinsfile 中的 bool 变量中。命令是: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。

最佳答案

由于 -o /dev/null,您的命令没有返回任何输出转变。如果你想捕捉退出代码,你必须设置 returnStatus而不是 returnStdout选项,例如:

def fileAlreadyExists = sh(
script: "curl -o/dev/null -sfI \"$url\"",
returnStatus: true
)

或者你可以扩展你的 Bash 命令来做 echo $?在 curl 命令回显最后一个命令退出代码之后:

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 ,所以如果您期望 0 退出代码,那么最好使这个比较明确,例如:
if (fileAlreadyExists == 0) { /* exists */ } else { /* not exist */ }

作为旁注:记得逃跑 \如果你想把它传递给 sh 命令 - Jenkins 会去掉单个转义字符,所以如果你想传递例如双引号底层脚本然后你必须通过以下方式转义它: \\\" .

关于jenkins - 如何从 sh step 命令获取 curl 退出状态?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52039618/

48 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com