Bamboo能否基于Curl请求返回的JSON响应判断任务失败?
Bamboo 200状态码下JSON字段校验部署状态的实现方案
方案1:Shell脚本主动控制退出码(推荐,无额外依赖/配置要求)
Bamboo的Shell脚本任务默认会根据脚本最终的退出码判定任务结果:退出码为0判定成功,非0判定失败。你不需要依赖Bamboo自带的HTTP状态码校验逻辑,直接在你的校验脚本内解析JSON字段,主动返回对应退出码即可。
实现步骤:
- 调用校验接口时同时捕获HTTP状态码和响应体,先判断接口本身是否可正常访问
- 使用轻量JSON解析工具提取
status字段值 - 匹配到失败状态时主动返回非0退出码,中断后续流程
示例脚本:
# 调用校验接口,同时保存响应体和HTTP状态码 RESPONSE=$(curl -s --connect-timeout 10 --max-time 30 "替换为你的校验接口URL" -w "\n%{http_code}") # 分离HTTP状态码和响应体 HTTP_CODE=$(echo "$RESPONSE" | tail -n1) RESP_BODY=$(echo "$RESPONSE" | head -n -1) # 先判断接口请求本身是否正常 if [ "$HTTP_CODE" != "200" ]; then echo "校验接口调用失败,HTTP状态码:$HTTP_CODE" exit 1 fi # 解析status字段,优先使用jq,无jq可改用Python解析 if command -v jq &> /dev/null; then DEPLOY_STATUS=$(echo "$RESP_BODY" | jq -r '.status') else DEPLOY_STATUS=$(echo "$RESP_BODY" | python3 -c "import json,sys; print(json.load(sys.stdin)['status'])") fi # 判断部署状态 if [ "$DEPLOY_STATUS" != "success" ]; then echo "部署校验不通过,当前状态:$DEPLOY_STATUS" exit 1 fi echo "部署校验成功,可触发后续回归测试流程"
方案2:封装通用校验逻辑(适合多计划复用场景)
如果有多个部署计划需要用到同款校验逻辑,可以将上述脚本封装为Bamboo的共享脚本任务,配置参数化的校验接口地址、成功状态值等字段,所有计划直接引用即可,不用重复编写代码。
注意事项
- 部署耗时2小时的情况下,建议调整Bamboo作业的超时阈值,避免任务被系统强制中断
- 校验逻辑建议增加重试机制,避免因接口偶发抖动导致整个部署任务误判失败
内容的提问来源于stack exchange,提问作者Mihir
相关产品推荐
相关产品推荐

