如何通过Python获取Jira中issue关联的拉取请求(Pull Request)状态
错误根因
你当前代码报错是因为issue.id返回的是Jira Issue的纯数字ID字符串,本身不包含pullrequest属性,属于属性调用入口错误。
解决方法
步骤1:确认PR字段存储位置
首先运行如下代码,遍历你Jira实例的所有自定义字段,找到和拉取请求/PR/合并请求相关的字段ID:
from jira import JIRA # 替换为你的Jira鉴权逻辑 auth_jira = JIRA(server='你的Jira服务地址', basic_auth=('你的账号', '你的接口Token')) issue = auth_jira.issue('XYZ-000') # 输出所有字段的ID和名称,定位PR对应字段 for field in auth_jira.fields(): print(f"字段ID: {field['id']}, 字段名称: {field['name']}")
步骤2:通过自定义字段读取PR状态
找到PR对应的字段ID(格式为customfield_xxxx)后,直接调用对应属性读取PR信息:
# 示例:假设PR对应字段ID为customfield_12345 pr_list = issue.fields.customfield_12345 if pr_list: for pr in pr_list: # 可根据实际返回的字段调整取值逻辑 pr_status = pr.get('status') pr_url = pr.get('url') print(f"PR状态:{pr_status},PR地址:{pr_url}")
特殊场景:PR存储在开发面板未同步到自定义字段
如果你的Jira绑定了GitHub/GitLab等代码仓库,PR信息仅存在于开发面板未同步到自定义字段,可直接调用Jira内置接口拉取:
# 构造开发信息请求地址,applicationType根据实际绑定的仓库类型调整,可选值github/gitlab/bitbucket dev_api_url = f"{auth_jira._options['server']}/rest/dev-status/latest/issue/detail?issueId={issue.id}&applicationType=github&dataType=pullrequest" resp = auth_jira._session.get(dev_api_url) dev_data = resp.json() # 提取PR状态 if dev_data.get('detail'): for pr in dev_data['detail'][0].get('pullRequests', []): print(f"PR标题:{pr['name']},PR状态:{pr['status']}")
注意事项
- 确保你的Jira账号有开发信息读取权限,否则会触发403报错
- Python 3.7环境兼容的jira库最高版本为3.5.0,不要安装更高版本避免兼容性问题
内容的提问来源于stack exchange,提问作者Rocky
相关产品推荐
相关产品推荐

