Jira提供了完善的RESTful API,如果不想直接請求API接口可以使用Python的Jira庫來操作Jira
安裝方法
pip install jira
認證
Jira的訪問是有權限的,在訪問Jira項目時首先要進行認證,Jira Python庫提供了3種認證方式:
- 通過Cookis方式認證(用戶名,密碼)
- 通過Basic Auth方式認證(用戶名,密碼)
- 通過OAuth方式認證
認證方式只需要選擇一種即可,以下代碼為使用Cookies方式認證。
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)
JQL參考: