Jira簡介
Jira是目前比較流行的基于Java架構的管理系統(tǒng)(Atlassian公司支持),有開源代碼,方便做二次開發(fā)(可擴展性)。Jira是一款功能非常強大的管理工具,廣泛的用來 缺陷跟蹤、用例管理、需求收集、任務跟蹤、工時管理、項目計劃管理等工作領域。
python有支持操作Jira的第三方包,方便自定義一些自動化操作。
Jira使用
安裝
pip install jira
Jira認證
from jira import JIRA
options = {'server': 'https://jira.xxxx.com'}
jira = JIRA(basic_auth=("username", "password"),options=options)
這種明文賬號密碼是不安全的,所以可以用另一種用API token的方式進行認證。
到https://id.atlassian.com/manage/api-tokens生成你的API token。
from jira import JIRA
options = {'server': 'https://jira.xxxx.com'}
jira = JIRA(basic_auth=("username", YOUR_API_TOKEN),options=options)
官方有更安全的方式,可見Basic auth for REST APIs
issue操作
1.查詢
成功認證登陸上Jira后,可以直接通過issue號查詢單個issue
issue = jira.issue("JIRA-issue-number")
查詢返回的issue JSON會自動編組,并生成issue對象返回,可以直接訪問相應字段
summary = issue.fields.summary # issue概述
assignee = issue.fields.assignee # issue當前處理人
為了節(jié)省時間,可以指定需要返回的字段
issue = jira.issue('JRA-1330', fields='summary,comment')
也可以通過JQL查詢符合條件的issues,下方代碼為返回項目為PRO,狀態(tài)不為Done和CLOSED的前500個Bug
jql = 'project=PRO AND Type=Bug AND status NOT IN ("DONE", "CLOSED")'
issues_in_proj = jira.search_issues(jql, maxResults=500)
2.創(chuàng)建
可以通過一個一個參數(shù)創(chuàng)建issue
new_issue = jira.create_issue(project='PROJ_key_or_id',
summary='New issue from jira-python',
description='Look into this one',
issuetype={'name': 'Bug'})
也可以通過字典創(chuàng)建
issue_dict = {
'project': {'id': 123},
'summary': 'New issue from jira-python',
'description': 'Look into this one',
'issuetype': {'name': 'Bug'},
}
new_issue = jira.create_issue(fields=issue_dict)
也可以批量創(chuàng)建多個issues
issue_list = [
{
'project': {'id': 123},
'summary': 'First issue of many',
'description': 'Look into this one',
'issuetype': {'name': 'Bug'},
},
{
'project': {'key': 'FOO'},
'summary': 'Second issue',
'description': 'Another one',
'issuetype': {'name': 'Bug'},
},
{
'project': {'name': 'Bar'},
'summary': 'Last issue',
'description': 'Final issue of batch.',
'issuetype': {'name': 'Bug'},
}]
issues = jira.create_issues(field_list=issue_list)
3.修改更新
issue的分配和取消分配
# 需要有issue分配權限
jira.assign_issue(issue, 'newassignee')
# 取消分配
jira.assign_issue(issue, None)
更新字段
issue.update(summary='new summary', description='A new summary was added')
# 通過字典更新
issue.update(fields={'summary': 'new summary', 'description': 'A new summary was added'})
comment操作
comment跟issue一樣是一個對象??梢酝ㄟ^issue對象或者jira對象獲取comment
comments_a = issue.fields.comment.comments
comments_b = jira.comments(issue) # comments_b == comments_a
可以通過ID獲取單個comment
comment = jira.comment('JRA-1330', '10234')
可以訪問comment的一些信息
author = comment.author.displayName
time = comment.created
添加、編輯和刪除comment也一樣簡單
comment = jira.add_comment('JRA-1330', 'new comment') # no Issue object required
comment = jira.add_comment(issue, 'new comment',
visibility={'type': 'role', 'value': 'Administrators'}) # for admins only
comment.update(body = 'updated comment body')
comment.delete()
狀態(tài)變更
了解某個issue有哪些可用的狀態(tài)轉換
issue = jira.issue('PROJ-1')
transitions = jira.transitions(issue)
[(t['id'], t['name']) for t in transitions] # [(u'5', u'Resolve Issue'), (u'2', u'Close Issue')]
Note: 只會返回當前經過身份驗證的用戶可用的狀態(tài)轉換!
然后對issue做相應的狀態(tài)轉換
# 將issue狀態(tài)改為已解決,并將其分配給pm_user
jira.transition_issue(issue, '5', assignee={'name': 'pm_user'}, resolution={'id': '3'})
# 等同
jira.transition_issue(issue, '5', fields={'assignee':{'name': 'pm_user'}, 'resolution':{'id': '3'}})