23

我想用 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

4 回答 4

30

我也遇到了这个问题,不幸的是 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 更可靠,因为它不会更改。

于 2013-11-13T04:43:06.753 回答
11

要更改状态,您需要在问题上方进行交易。转换只是在“工作流程”中定义的操作,并将问题从一种状态转换到另一种状态。从当前状态,您只能执行有限的转换集,这取决于“工作流程”。尝试使用以下功能: 当前问题状态:

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')
于 2017-08-23T00:00:45.270 回答
2

以下是通过 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 问题的可用转换选项。一些过渡动作可以是:-

  1. 准备好的
  2. 完毕
  3. 拒绝
  4. 进行中
  5. 去做
  6. 审查
  7. 中止
于 2020-08-26T07:34:51.620 回答
0

我的用例只是改变票的状态。
您在之前的尝试中需要改变的只是不要明确提及这个词transitionId=

这对我有用。

jira.transition_issue(issue, '31')
于 2017-02-07T17:38:17.090 回答