使用jq命令提取Jenkins JSON输出时如何去除null结果
解决Jenkins构建SHA1提取时的null输出问题
方法一:筛选存在lastBuiltRevision的Action项
修改你的jq命令,添加筛选条件,只处理包含目标字段的action条目:
curl --user <user name>:<user token> -s "<jenkins url>/jenkins/job/<job name>/<build number>/api/json" | jq -r '.actions[] | select(.lastBuiltRevision != null) | .lastBuiltRevision.SHA1'
方法二:按Action类型精准筛选
如果想避免误匹配,可以直接定位到存储Git构建数据的Action类型(hudson.plugins.git.util.BuildData):
curl --user <user name>:<user token> -s "<jenkins url>/jenkins/job/<job name>/<build number>/api/json" | jq -r '.actions[] | select(._class == "hudson.plugins.git.util.BuildData") | .lastBuiltRevision.SHA1'
优化curl请求耗时
针对你提到的curl请求耗时5秒的问题,可以通过tree参数只请求需要的字段,减少数据传输量:
curl --user <user name>:<user token> -s "<jenkins url>/jenkins/job/<job name>/<build number>/api/json?tree=actions[_class,lastBuiltRevision[SHA1]]"
配合这个精简后的请求,上述jq命令依然可以正常提取SHA1,同时能有效缩短请求时间。
原命令输出大量null的原因
原命令遍历了actions数组的所有条目,但大部分Action(比如CauseAction、TimeInQueueAction)并不包含lastBuiltRevision字段,jq遇到不存在的字段时会默认输出null。通过select筛选后,仅处理符合条件的Action项,就能只得到有效SHA1值。
内容的提问来源于stack exchange,提问作者Ramesh Thiyagarajan
相关产品推荐
相关产品推荐

