如何用jq语法筛选含制品的GitLab作业ID?
获取GitLab作业中包含制品的作业ID的jq语法实现
针对你的需求,这里提供两种符合要求的jq命令,解决你之前只返回制品信息、丢失作业ID的问题:
方式一:通过检查artifacts_file键是否存在返回作业ID
直接遍历每个作业对象,筛选出包含artifacts_file键的对象,再提取其id字段:
jq '.[] | select(has("artifacts_file")) | .id'
逻辑说明:.[]遍历所有作业对象,select(has("artifacts_file"))过滤出存在目标键的作业,最后| .id输出对应作业ID。
方式二:通过检查artifacts数组是否非空返回作业ID
判断作业对象的artifacts数组长度是否大于0,满足条件则提取作业ID:
jq '.[] | select(.artifacts | length > 0) | .id'
逻辑说明:你之前的命令错误地深入到artifacts数组的元素层级,导致丢失了上层作业对象的ID信息。这个命令在作业对象层级做判断,确保能拿到对应的ID。
如果需要同时返回作业ID和对应的制品信息,可以用以下命令:
jq '.[] | select(.artifacts | length > 0) | {id: .id, artifacts: .artifacts}'
内容的提问来源于stack exchange,提问作者Fadi
相关产品推荐
相关产品推荐

