Python操作Jira方法

[TOC]
Jira提供了完善的RESTful API,如果不想直接請(qǐng)求API接口可以使用Python的Jira庫(kù)來(lái)操作Jira

Jira Python文檔

安裝方法

pip install jira

認(rèn)證

Jira的訪問是有權(quán)限的,在訪問Jira項(xiàng)目時(shí)首先要進(jìn)行認(rèn)證,Jira Python庫(kù)提供了3種認(rèn)證方式:

  1. 通過Cookis方式認(rèn)證(用戶名,密碼)
  2. 通過Basic Auth方式認(rèn)證(用戶名,密碼)
  3. 通過OAuth方式認(rèn)證

認(rèn)證方式只需要選擇一種即可,以下代碼為使用Cookies方式認(rèn)證。

form jira import JIRA

jira = JIRA('http://jira.***.com/', auth=('用戶名', '登錄密碼')

返回的jira對(duì)象便可以對(duì)Jira進(jìn)行操作。主要的操作包括:

  1. 項(xiàng)目
  2. 問題
  3. 搜索
  4. 關(guān)注者
  5. 評(píng)論
  6. 附件

項(xiàng)目(Project)

  • jira.projects(): 查看所有項(xiàng)目列表
  • jira.project("項(xiàng)目的Key"): 查看單個(gè)項(xiàng)目

項(xiàng)目對(duì)象的主要屬性及方法如下:

  • key: 項(xiàng)目的Key
  • name: 項(xiàng)目名稱
  • description: 項(xiàng)目描述
  • lead: 項(xiàng)目負(fù)責(zé)人
  • projectCategory: 項(xiàng)目分類
  • components: 項(xiàng)目組件
  • versions: 項(xiàng)目中的版本
  • raw: 項(xiàng)目的原始API數(shù)據(jù)

示例

print(jira.projects())  # 打印所有你有權(quán)限訪問的項(xiàng)目列表

project = jira.project('某個(gè)項(xiàng)目的Key')

print(project.key, project.name, project.lead) 

問題(Issue)

Issue是Jira的核心,Jira中的任務(wù),用戶Story,Bug實(shí)質(zhì)上都是一個(gè)Issue。
單個(gè)問題對(duì)象可以通過jira.issue("問題的Key")得到,問題的主要屬性和方法如下:

  • id: 問題的id
  • key: 問題的Key
  • permalink(): 獲取問題連接
  • fields: 問題的描述,創(chuàng)建時(shí)間等所有的配置域
  • raw: 問題的原始API數(shù)據(jù)

配置域(Fields)

一般問題的ields中的屬性分為固定屬性和自定義屬性,自定義屬性格式一般為類似customfield_10012這種。常用的問題的Fields有:

  • assignee:經(jīng)辦人
  • created: 創(chuàng)建時(shí)間
  • creator: 創(chuàng)建人
  • labels: 標(biāo)簽
  • priorit: 優(yōu)先級(jí)
  • progress:
  • project: 所示項(xiàng)目
  • reporter: 報(bào)告人
  • status: 狀態(tài)
  • summary: 問題描述
  • worklog: 活動(dòng)日志
  • updated: 更新時(shí)間
  • watches: 關(guān)注者
  • comments: 評(píng)論
  • resolution: 解決方案
  • subtasks: 子任務(wù)
  • issuelinks: 連接問題
  • lastViewed: 最近查看時(shí)間
  • attachment

示例如下:

issue = jira.issue('JRA-1330')
print(issue.key, issue.fields.summary, issue.fields.status)

關(guān)注者/評(píng)論/附件

  • jira.watchers(): 問題的關(guān)注者
  • jira.add_watcher(): 添加關(guān)注者
  • jira.remove_watcher(): 移除關(guān)注者
  • jira.comments(): 問題的所有評(píng)論
  • jira.comment(): 某條評(píng)論
  • jira.add_comment():添加評(píng)論
  • comment.update()/delete(): 更新/刪除評(píng)論
  • jira.add_attachment(): 添加附件

示例如下:

issue = jira.issue('JRA-1330')

print(jiaa.watchers(issue)) # 所有關(guān)注者
jira.add_watcher(issue, 'username')  # 添加關(guān)注者

print(jira.comments(issue))  # 所有評(píng)論
comment = jira.comment(issue, '10234')  # 某條評(píng)論
jira.add_comment(issue, 'new comment') # 新增評(píng)論
comment.update(body='update comment')  # 更新評(píng)論
comment.delete()  # 刪除該評(píng)論

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

創(chuàng)建/分配/轉(zhuǎn)換問題

  • jira.create_issue(): 創(chuàng)建問題
  • jira.create_issues(): 批量創(chuàng)建問題
  • jira.assign_issue(): 分配問題
  • jira.transitions(): 獲取問題的工作流
  • jira.transition_issue(): 轉(zhuǎn)換問題

示例如下:

# 創(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)建問題
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')

# 轉(zhuǎn)換問題
jira.transition_issue(issue, '5', assignee={'name': 'pm_user'}, resolution={'id': '3'})

搜索

Jira的搜索非常強(qiáng)大,并配有一套專門的搜索語(yǔ)言,稱為JQL(Jira Query Language),Jira的Python庫(kù)便是基于JQL語(yǔ)法進(jìn)行搜索的,返回的是搜索到的問題列表。
使用語(yǔ)句為

jira.search_issues('JQL語(yǔ)句')

默認(rèn)最大結(jié)果數(shù)未1000,可以通過maxResults參數(shù)配置,該參數(shù)為-1時(shí)不限制數(shù)量,返回所有搜索結(jié)果。

jira.search_issues('project=PROJ and assignee = currentUser()', maxResults=-1)

JQL參考:

Jira高級(jí)搜索

Jira高級(jí)搜索-字段參考

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • TOC] Jira提供了完善的RESTful API,如果不想直接請(qǐng)求API接口可以使用Python的Jira庫(kù)來(lái)...
    琉璃_233a閱讀 776評(píng)論 0 0
  • 配置域(Fields) 一般問題的ields中的屬性分為固定屬性和自定義屬性,自定義屬性格式一般為類似custom...
    琉璃_233a閱讀 2,726評(píng)論 0 0
  • ??最近,團(tuán)隊(duì)準(zhǔn)備引入 Jira 做需求管理和任務(wù)跟蹤。為了能更好地運(yùn)用 Jira(挖坑),研究了下如何通過 Py...
    Gaius_Yao閱讀 10,015評(píng)論 1 7
  • 由于工作的需要,我們每天都會(huì)使用到JIRA去記錄并跟蹤產(chǎn)品設(shè)計(jì)問題的解決。JIRA里面有大量的數(shù)據(jù),Reporte...
    Lorence閱讀 2,137評(píng)論 0 1
  • 參加羅布泊的挑戰(zhàn)活動(dòng),有兩個(gè)地方讓我眼前一亮,一是羅布泊,一是眾籌的方式。為什么要眾籌呢?后來(lái)遇到很多途友,大家一...
    淮源笑笑生閱讀 562評(píng)論 0 0

友情鏈接更多精彩內(nèi)容