Jira简介
Jira是目前比较流行的基于Java架构的管理系统(Atlassian公司支持),有开源代码,方便做二次开发(可扩展性)。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当前处理人
为了节省时间,可以指定需要返回的字段
issue = jira.issue('JRA-1330', fields='summary,comment')
也可以通过JQL查询符合条件的issues,下方代码为返回项目为PRO,状态不为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.创建
可以通过一个一个参数创建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'})
也可以通过字典创建
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)
也可以批量创建多个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()
状态变更
了解某个issue有哪些可用的状态转换
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: 只会返回当前经过身份验证的用户可用的状态转换!
然后对issue做相应的状态转换
# 将issue状态改为已解决,并将其分配给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'}})