查看 Json 中的任何状态是否失败
See if any of status in Json is failed or not
我正在尝试解析 CircleCI
作业 json 以查看是否所有作业都处于成功状态。如果是,那就做点别的,继续等。
我在 circleci 作业中使用这个 shell 命令来查看是否有任何作业未能提前退出
is_failed=$(echo $json | jq '.items | map(select(.name | contains("my-custom-job") | not)) | any(.status == "failed")')
现在我想检查是否所有作业都具有 success
状态,如果是,则执行其他操作。我怎样才能在 shell 脚本中做到这一点?
这是 CirclCI api 的 link(显然 status
没有枚举,它可能是 null 等)。
更新:
示例 Json
{
"next_page_token": null,
"items": [
{
"started_at": "2021-04-01T14:50:43Z",
"name": "...",
"type": "build",
"status": "running"
},
{
"started_at": null,
"name": "...",
"type": "build",
"status": "blocked"
},
{
"started_at": null,
"name": "...",
"type": "build",
"status": "blocked"
},
{
"started_at": "2021-04-01T14:50:43Z",
"name": "auto-cancel",
"type": "build",
"status": "running"
}
]
}
I want to check if ALL the jobs has success
status
jq --arg wanted "success" '[.items[] | select(.status != $wanted)] | length == 0' file.json
正如评论中所暗示的那样,all
使 jq
变得微不足道。加上 jq
的 -e
选项来设置退出状态,因此它可以很容易地与 shell if
:
一起使用
if jq -e '.items | all(.status == "success")' <<<"$json" >/dev/null; then
echo "All tests passed."
else
echo "There are issues."
fi
我正在尝试解析 CircleCI
作业 json 以查看是否所有作业都处于成功状态。如果是,那就做点别的,继续等。
我在 circleci 作业中使用这个 shell 命令来查看是否有任何作业未能提前退出
is_failed=$(echo $json | jq '.items | map(select(.name | contains("my-custom-job") | not)) | any(.status == "failed")')
现在我想检查是否所有作业都具有 success
状态,如果是,则执行其他操作。我怎样才能在 shell 脚本中做到这一点?
这是 CirclCI api 的 link(显然 status
没有枚举,它可能是 null 等)。
更新: 示例 Json
{
"next_page_token": null,
"items": [
{
"started_at": "2021-04-01T14:50:43Z",
"name": "...",
"type": "build",
"status": "running"
},
{
"started_at": null,
"name": "...",
"type": "build",
"status": "blocked"
},
{
"started_at": null,
"name": "...",
"type": "build",
"status": "blocked"
},
{
"started_at": "2021-04-01T14:50:43Z",
"name": "auto-cancel",
"type": "build",
"status": "running"
}
]
}
I want to check if ALL the jobs has
success
status
jq --arg wanted "success" '[.items[] | select(.status != $wanted)] | length == 0' file.json
正如评论中所暗示的那样,all
使 jq
变得微不足道。加上 jq
的 -e
选项来设置退出状态,因此它可以很容易地与 shell if
:
if jq -e '.items | all(.status == "success")' <<<"$json" >/dev/null; then
echo "All tests passed."
else
echo "There are issues."
fi