You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用JQ优化Shell脚本输出格式并实现状态判断

解决SonarQube API数据处理的输出格式与状态判断问题

1. 优化JQ输出为指定的键值对文本格式

问题原因

你之前用JQ构造对象{Status:.status, ...}会输出JSON结构,而非目标的纯文本键值对格式。需要改用JQ的字符串插值功能拼接成所需格式。

修正代码

# 先修正curl命令(原命令多余的--data-urlencode参数会导致请求异常)
projectStatusUrl='url/api/qualitygates/project_status?projectKey=app'
project_status="$(curl -s -u token: "${projectStatusUrl}")"

# 用JQ字符串插值生成目标格式,每个条件后添加空行分隔
code_T=$(jq -r '.projectStatus.conditions[] | select(.status=="ERROR") | "Status: \(.status)\nMetricKey: \(.metricKey)\nComparator: \(.comparator)\n"' <<< "$project_status")

echo "$code_T"

输出效果

Status: ERROR
MetricKey: new_coverage
Comparator: LT

Status: ERROR
MetricKey: new_duplicated_lines_density
Comparator: GT

2. 修复状态判断失效问题

问题原因

你之前的code_T变量存储的是所有匹配条件的结构化内容(多行文本或JSON),直接与"OK"/"WARN"/"ERROR"字符串对比永远无法匹配。正确做法是提取项目整体状态,或检查条件中是否存在对应状态值。

方案1:基于SonarQube返回的整体状态判断(推荐)

SonarQube API的.projectStatus.overallStatus字段直接给出项目最终的质量门状态,无需遍历单个条件:

# 获取项目整体状态
overall_status=$(jq -r '.projectStatus.overallStatus' <<< "$project_status")

# 状态判断逻辑
if [[ "$overall_status" == "OK" ]]; then
  echo '::set-output name=quality-status::PASSED'
elif [[ "$overall_status" == "WARN" ]]; then
  echo '::set-output name=quality-status::WARN'
elif [[ "$overall_status" == "ERROR" ]]; then
  echo '::set-output name=quality-status::ERROR'
else
  echo '::set-output name=quality-status::UNKNOWN'
fi

方案2:基于单个条件的状态判断(自定义逻辑)

如果需要根据单个条件的状态(比如只要存在一个ERROR就判定失败),可以用以下方式:

# 检查是否存在ERROR状态的条件
has_error=$(jq -r '.projectStatus.conditions[] | .status' <<< "$project_status" | grep -q "ERROR" && echo "true" || echo "false")
# 检查是否存在WARN状态的条件(且无ERROR)
has_warn=$(jq -r '.projectStatus.conditions[] | .status' <<< "$project_status" | grep -q "WARN" && echo "true" || echo "false")

if [[ "$has_error" == "true" ]]; then
  echo '::set-output name=quality-status::ERROR'
elif [[ "$has_warn" == "true" ]]; then
  echo '::set-output name=quality-status::WARN'
else
  echo '::set-output name=quality-status::PASSED'
fi

内容的提问来源于stack exchange,提问作者CamposTI

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 19:18:19