如何从Jenkins WorkflowRun类型JSON中提取指定分支的name与SHA1值
Jenkins JSON分支信息提取方案
我们可以通过常用的JSON处理工具快速实现指定分支的name与SHA1值提取,具体方法如下:
1. 命令行工具jq实现(最简便)
jq是Linux/macOS环境下通用的轻量级JSON处理工具,直接用以下命令即可查询:
精确匹配分支名
将待处理的JSON内容保存为jenkins.json,替换命令中目标分支名为你要查询的分支全名即可:
jq -r --arg target "目标分支名" '.actions[] | .lastBuiltRevision.branch[] | select(.name == $target) | "\(.name):\(.SHA1)"' jenkins.json
参数说明:
-r:输出原始字符串,避免结果被双引号包裹--arg target 目标分支名:传入要匹配的分支名称,规避特殊字符的语法冲突- 筛选逻辑:遍历actions数组下所有分支条目,匹配name值后按要求格式拼接输出
示例运行效果
查询refs/remotes/abcd/feature/demo_abcd分支时,运行命令:
jq -r --arg target "refs/remotes/abcd/feature/demo_abcd" '.actions[] | .lastBuiltRevision.branch[] | select(.name == $target) | "\(.name):\(.SHA1)"' jenkins.json
输出结果:
refs/remotes/abcd/feature/demo_abcd:433d2ec97cdd1ca01c352aa0b8510e0a8f93fa0c
模糊匹配拓展(可选)
如果需要匹配所有包含指定关键词的分支,修改select条件即可,例如下方命令会输出所有名称带demo的分支:
jq -r --arg target "demo" '.actions[] | .lastBuiltRevision.branch[] | select(.name | contains($target)) | "\(.name):\(.SHA1)"' jenkins.json
2. Python代码实现(适合集成到业务逻辑中)
如果需要在代码中完成提取逻辑,可以用Python原生的json模块实现:
import json # 加载本地JSON文件 with open("jenkins.json", "r", encoding="utf-8") as f: jenkins_data = json.load(f) # 替换为你要匹配的分支名 target_branch = "refs/remotes/abcd/feature/demo_abcd" for action in jenkins_data["actions"]: # 跳过没有lastBuiltRevision字段的异常action节点 if "lastBuiltRevision" not in action: continue for branch in action["lastBuiltRevision"]["branch"]: if branch["name"] == target_branch: print(f"{branch['name']}:{branch['SHA1']}")
内容的提问来源于stack exchange,提问作者jayveersolanki
相关产品推荐
相关产品推荐

