Python操作Jira

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'}})

参考

Jira-python API

你可能感兴趣的:(Python操作Jira)