Octopus Runbook 忽略Bash退出码无法标记运行失败问题求助
问题原因及解决方法
1. 代码语法错误
你当前Bash脚本的条件判断逻辑存在语法问题:[ $statusCode=200 ] 没有在变量、比较运算符、比较值之间添加空格,Bash会将整段视为非空字符串判断,永远返回真值,因此无论接口返回什么状态码,脚本最终都会返回0退出码,自然不会触发Runbook的失败标记。
此外代码没有处理curl请求本身异常(如网络不通、域名解析失败)的场景,此时$statusCode会为空或异常值,也会导致判断逻辑失效。
2. 修正后的代码
# 开启错误自动退出,避免异常时后续逻辑继续执行 set -e url=$(get_octopusvariable "SmokeTestURL") statusCode=$(curl -X POST \ --silent \ --output /dev/null \ --write-out "%{http_code}" \ --header "accept: application/json" \ --header "Content-Type: application/json" \ --data "..." \ "$url") echo "接口返回状态码:$statusCode" # 补全条件判断空格,用数值比较运算符,增加变量引用引号避免空值异常 if [ "$statusCode" -eq 200 ]; then exit 0 else echo "冒烟测试不通过,期望状态码200,实际返回$statusCode" exit 1 fi
3. Runbook配置检查项
如果修正代码后问题仍然存在,检查对应步骤的配置:
- 确认步骤的出错时继续选项未被勾选,该选项开启后会忽略脚本的非0退出码,强制标记步骤为成功
- 确认步骤执行脚本的配置中没有全局添加
set +e参数,该参数会忽略所有执行错误的退出码
内容的提问来源于stack exchange,提问作者Stand__Sure
相关产品推荐
相关产品推荐

