PAYATHON 2026

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 和客户端版本是否支持请求该字段。

备注:内容仅供参考。