我想用 python-jira 更改 jira 问题状态。python-jira API 是http://jira-python.readthedocs.org/en/latest/。我找不到任何方法来做到这一点。我正在尝试使用 issue.update(status="Closed")
。但它不起作用。我在https://developer.atlassian.com/display/JIRADEV/Issue+status+and+workflow中找到了问题状态和工作流程。但我仍然不知道是什么做。谁能帮帮我?
4 回答
我也遇到了这个问题,不幸的是 JIRA 令人难以置信的灵活性有时也使它成为 PITA。
要更改工单的状态,您需要进行转换,将其从一种状态移动到另一种状态。
您需要找到您的转换 ID,然后像这样使用它:
if issue.fields.status in ('open', 'reopened'):
# Move the ticket from opened to closed.
jira.transition_issue(ticket, transition='131')
jira-python 文档在这里发现和进行转换。
jira.transition_issue
记录在这里。您实际上可以使用转换的名称(例如'Closed'
:)而不是 ID,但 ID 更可靠,因为它不会更改。
要更改状态,您需要在问题上方进行交易。转换只是在“工作流程”中定义的操作,并将问题从一种状态转换到另一种状态。从当前状态,您只能执行有限的转换集,这取决于“工作流程”。尝试使用以下功能: 当前问题状态:
issue = jira.issue('PROJECT-1')
issue.fields.status
JIRA 状态:name='Fix 已提交',id='10827'
问题当前状态的可能转换:
jira.transitions(issue)
[{'id': '181', 'name': '修复失败', 'to': ..........}}}, {'id': '261', 'name': 'Fix Verfied', 'to': {'self':.....}}}]
因此,您可以执行两个转换:
jira.transition_issue(issue, transition='Fix Failed')
或者
jira.transition_issue(issue, 261)
然后您可以验证您的问题在服务器上更改了状态:
issue = jira.issue('PROJECT-1')
issue.fields.status
JIRA 状态:名称='修复失败',id='10830'
因此,在回答您的问题时,如果状态未通过转换连接,您需要执行更多转换以将问题从一种状态转移到另一种状态。例如:考虑来自此 url的工作流程,您的问题当前状态为“已解决”,假设您想要达到“进行中”状态。可以使用类似的代码:
jira.transition_issue(issue, transition='Reopen Issue')
jira.transition_issue(issue, transition='Start Progress')
以下是通过 Python 更新 Jira 问题状态的代码:
from jira import JIRA
JIRA_SERVER = "https://issues.your-company.com/"
jira_user_name = "your_user_name"
jira_password = "your_jira_password"
jira_connection = JIRA(basic_auth=(jira_user_name, jira_password),
server=JIRA_SERVER)
jira_connection.transition_issue("PR-1309", "Start Progress")
这里 PR-1309 是您的 JIRA 问题的 ID。Start Progress 是针对这个问题需要采取的行动。对于 JIRA 的不同客户,操作列表可能会有所不同。因此,打开您的 JIRA 门户并查看您的 JIRA 问题的可用转换选项。一些过渡动作可以是:-
- 准备好的
- 完毕
- 拒绝
- 进行中
- 去做
- 审查
- 中止
我的用例只是改变票的状态。
您在之前的尝试中需要改变的只是不要明确提及这个词transitionId=
这对我有用。
jira.transition_issue(issue, '31')