Jira Python API 如何获取 issue 的 Resolution 信息?
结论
先检查 Jira 返回的原始字段。enhanced_search_issues 中的 expand="comments,attachments" 用来请求可展开的关联内容,不能代替 fields 参数来选择 issue 字段。可以显式请求 resolution,然后检查 issue.raw["fields"]。
还要区分 resolution 状态和你说的“最终解决说明”。标准 resolution 表示 Jira 配置的解决结果,例如 Fixed、Done。如果你要找的是每个 issue 的具体说明,它可能在自定义字段或评论中,不能只根据 resolution 状态推断。
显式请求并检查 resolution
搜索时可以指定要返回的字段。下面用位置参数传入 JQL,以兼容不同 Jira Python 库版本中 JQL 参数名的差异:
issues = jira.enhanced_search_issues(
"project = 'MY_PROJECT' AND created >= '2023-01-01'",
fields=["resolution"],
maxResults=100,
)
for issue in issues:
fields = issue.raw.get("fields", {})
resolution = fields.get("resolution")
print(issue.key, resolution)
如果 resolution 有值,通常会是一个包含 name、id 等信息的对象;实际返回内容以 Jira 实例的响应为准。你也可以通过 issue.fields.resolution 读取它。检查 issue.raw 可以确认服务端是否返回了该字段。dir(issue.fields) 列出的是 Python 对象的属性,不能可靠地反映 Jira 当前 issue 响应中包含的所有字段。
如果需要的是一段解决说明
如果 resolution 只返回状态,先在 Jira 页面上确认具体说明存在哪个字段:
- 如果说明在自定义字段中,先查出字段 ID,再把它和
resolution一起加入fields。 - 如果说明写在评论里,就从评论数据读取。请求评论的展开内容不会让评论变成
resolution字段。
可以用 Jira Python 客户端列出字段名称和 ID,查找对应的自定义字段:
for field in jira.fields():
print(field.get("name"), field.get("id"))
找到对应 ID 后,例如 customfield_12345,可以这样请求并检查:
issues = jira.enhanced_search_issues(
"project = 'MY_PROJECT' AND created >= '2023-01-01'",
fields=["resolution", "customfield_12345"],
maxResults=100,
)
for issue in issues:
fields = issue.raw.get("fields", {})
print(issue.key, fields.get("resolution"))
print(issue.key, fields.get("customfield_12345"))
如果不确定目标字段的名称或 ID,请参考 jira.fields() 的结果和 Jira 页面上的字段配置。若已请求该字段,但响应中仍缺失或为 null,再检查该 issue 是否设置了此字段、当前账号是否有权查看,以及所用 Jira REST API 和客户端版本是否支持请求该字段。
备注:内容仅供参考。
