存档

2021年2月 的存档

Python 操作JIRA

2021年2月25日 没有评论

最近被各种统计和归总纠结着,从系统里查询然后在 Excel 里填数据。就寻思着是否有方式可以加速,网上检索下,果然找到有访问 JIRA 现成的库。

pip3 install jira

认证
JIRA的访问是有权限的,在访问Jira项目时首先要进行认证,JIRA Python库提供了3种认证方式:

通过Cookis方式认证(用户名,密码)
通过Basic Auth方式认证(用户名,密码)
通过OAuth方式认证

form jira import JIRA

jira = JIRA('http://jira.***.com/', auth=('用户名', '登录密码')

返回的jira对象便可以对Jira进行操作。主要的操作包括:

  • 项目
  • 问题
  • 搜索
  • 关注者
  • 评论
  • 附件

项目(Project)
jira.projects(): 查看所有项目列表
jira.project(“项目的Key”): 查看单个项目


项目对象的主要属性及方法如下:

  • key: 项目的Key
  • name: 项目名称
  • description: 项目描述
  • lead: 项目负责人
  • projectCategory: 项目分类
  • components: 项目组件
  • versions: 项目中的版本
  • raw: 项目的原始API数据
print(jira.projects()) # 打印所有你有权限访问的项目列表
project = jira.project('某个项目的Key')
print(project.key, project.name, project.lead)

问题(Issue)
Issue是 JIRA 的核心,JIRA 中的任务,用户Story,Bug实质上都是一个Issue。
单个问题对象可以通过jira.issue(“问题的Key”)得到,问题的主要属性和方法如下:

  • id: 问题的id
  • key: 问题的Key
  • permalink(): 获取问题连接
  • fields: 问题的描述,创建时间等所有的配置域
  • raw: 问题的原始API数据


配置域(Fields)
一般问题的ields中的属性分为固定属性和自定义属性,自定义属性格式一般为类似customfield_10012这种。常用的问题的Fields有:

  • assignee:经办人
  • created: 创建时间
  • creator: 创建人
  • labels: 标签
  • priorit: 优先级
  • progress:
  • project: 所示项目
  • reporter: 报告人
  • status: 状态
  • summary: 问题描述
  • worklog: 活动日志
  • updated: 更新时间
  • watches: 关注者
  • comments: 评论
  • resolution: 解决方案
  • subtasks: 子任务
  • issuelinks: 连接问题
  • lastViewed: 最近查看时间
  • attachment
issue = jira.issue('JRA-1330')
print(issue.key, issue.fields.summary, issue.fields.status)

关注者/评论/附件

  • jira.watchers(): 问题的关注者
  • jira.add_watcher(): 添加关注者
  • jira.remove_watcher(): 移除关注者
  • jira.comments(): 问题的所有评论
  • jira.comment(): 某条评论
  • jira.add_comment():添加评论
  • comment.update()/delete(): 更新/删除评论
  • jira.add_attachment(): 添加附件
issue = jira.issue('JRA-1330')

print(jiaa.watchers(issue)) # 所有关注者
jira.add_watcher(issue, 'username') # 添加关注者

print(jira.comments(issue)) # 所有评论
comment = jira.comment(issue, '10234') # 某条评论
jira.add_comment(issue, 'new comment') # 新增评论
comment.update(body='update comment') # 更新评论
comment.delete() # 删除该评论

print(issue.fields.attachment) # 问题附件
jira.add_attachment(issue=issue, attachment='/some/path/attachment.txt') # 添加附件


创建/分配/转换问题
jira.create_issue(): 创建问题
jira.create_issues(): 批量创建问题
jira.assign_issue(): 分配问题
jira.transitions(): 获取问题的工作流
jira.transition_issue(): 转换问题

# 创建问题
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)

# 批量创建问题
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)

# 分配问题
jira.assign_issue(issue, 'newassignee')

# 转换问题
jira.transition_issue(issue, '5', assignee={'name': 'pm_user'}, resolution={'id': '3'})

搜索
JIRA 的搜索非常强大,并配有一套专门的搜索语言,称为JQL(Jira Query Language),JIRA 的Python库便是基于JQL语法进行搜索的,返回的是搜索到的问题列表。

jira.search_issues('JQL语句')
#默认最大结果数未1000,可以通过maxResults参数配置,该参数为-1时不限制数量,返回所有搜索结果。

jira.search_issues('project=PROJ and assignee = currentUser()', maxResults=-1)
分类: 日常 标签: