from jira import JIRA #導入jira jira=JIRA(server='http://127.0.0.1:8080', basic_auth=('name', 'password')) #和jira服務器建立連接
#獲取當前用戶 jira.user(jira.current_user()) #獲取當前用戶所有項目,返回項目字典 for j in jira.projects(): print j, j.name #打印項目名稱;
#通過字段id號獲取issu issue = jira.issue('JRA-1330', fields='summary,description,comment') summary = issue.fields.summary description = issue.fields.description
#查詢issues jql = "project=PROJ AND component = 模塊 AND status=closed AND summary ~標題 AND description ~描述"
try: issues = self.jira.search_issues(jql, maxResults=500) #maxResults參數是設置返回數據的最大值,默認是50。 except Exception as e:
print(e)
sys.exit(-1)
bug_count=len(issues) #查詢的bug數 for issue in issue_search(): issue = str(issue) + issue.fields.summary #標題
projectKey = issue.key.split("-")[0] # 獲得bug的項目key print issue return issue
components = jira.project_components(jira.project("項目key")) # 獲得某項目的所有模塊名稱
# 創建項目模塊
jira.create_component(compoment, project, description=description, leadUserName=None, assigneeType=None, isAssigneeTypeValid=False)
#查詢相關參數 projects #所有項目,projects = jira.projects() project #項目 components #模塊 summary #標題 issuetype #獲取缺陷類型,如缺陷,線上問題、改進等 deion #獲取缺陷的具體描述內容 assignee #經辦人,currentUser()現在的用戶 reporter #報告人 resolution #解決結果,重復Duplicate,開始unresolved, status #bug狀態,關閉closed,已解決resolved due #到期時間,due < endOfWeek() created #創建時間
updated #更新時間 priority #優先級,按優先級排序orderby priority desc #評論 comments_a = issue.fields.comments.comments comments_b = jira.comments(issue) # comments_b ==comments_a
#更新bug信息 issue = jira.issue('JIRA-2') issue.update(versions=[{"name":'V1.1'}]) issue.update(labels=['Label A','Label B']) issue.update(components=[{'name': 'component'}]) issue.update(summary='new summary', description='description') issue.update(assignee={'name': 'new_user'}) issue.update(issuetype={'name': 'Task'}) #更改bug狀態status transitions=self.jira.transitions(issue)
print([(t['id'],t['name']) for t in transitions]) self.jira.transition_issue(issue, 'To Do') #或者 self.jira.transition_issue(issue, 11) issue_dict= { 'summary': 'issue概要', 'description': 'issue描述', } issue.update(fields=issue_dict)
def create_issue(self, summary, description, assignee, compoment, project, issuetype='Task', priority='Medium'):
"""
創建提交bug
:param project: 項目
:param issuetype: 問題類型,Task
:param summary: 主題
:param compoment: 模塊
:param description: 描述
:param assignee: 經辦人
:param priority: 優先級
:return:
"""
issue_dict = {
'project': {'key': project},
'issuetype': {'name': issuetype},
'summary': summary,
'components': [{'name': compoment}],
'description': description,
'assignee': {'name': assignee},
'priority': {'name': priority},
}
return self.jira.create_issue(issue_dict)
#封裝jira一些方法 from jira import JIRA import sys class JiraTool(): def __init__(self, server, username, password, maxResults = 500): self.server = server self.basic_auth = (username, password) # issues查詢的最大值 self.maxResults = maxResults def login(self): self.jira = JIRA(server=self.server, basic_auth=self.basic_auth) if self.jira == None: print('連接失敗') sys.exit(-1) def get_projects(self): """ 獲得jira 的所有項目 :return: """ return [(p.key, p.name, p.id) for p in self.jira.projects()] def get_components(self, project): """ 獲得某項目的所有模塊 :param project: :return: """ return [(c.name, c.id) for c in self.jira.project_components(self.jira.project(project))] def create_component(self, project, compoment, description, leadUserName=None, assigneeType=None, isAssigneeTypeValid=False): """ # 創建項目模塊 :param project: 模塊所屬項目 :param compoment:模塊名稱 :param description:模塊描述 :param leadUserName: :param assigneeType: :param isAssigneeTypeValid: :return: """ components = self.jira.project_components(self.jira.project(project)) if compoment not in [c.name for c in components]: self.jira.create_component(compoment, project, description=description, leadUserName=leadUserName, assigneeType=assigneeType, isAssigneeTypeValid=isAssigneeTypeValid) def create_issue(self, project, compoment, summary, description, assignee, issuetype, priority='Medium'): """ 創建提交bug :param project: 項目 :param issuetype: 問題類型,Task :param summary: 主題 :param compoment: 模塊 :param description: 描述 :param assignee: 經辦人 :param priority: 優先級 :return: """ issue_dict = { 'project': {'key': project}, 'issuetype': {'id': issuetype}, 'summary': summary, 'components': [{'name': compoment}], 'description': description, 'assignee': {'name': assignee}, 'priority': {'name': priority}, } return self.jira.create_issue(issue_dict) def delete_issue(self, issue): """ 刪除bug :param issue: :return: """ issue.delete() def update_issue_content(self, issue, issue_dict): """ 更新bug內容 :param issue: :param issue_dict: issue_dict = { 'project': {'key': project}, 'issuetype': {'id': issuetype}, 'summary': summary, 'components': [{'name': compoment}], 'description': description, 'assignee': {'name': assignee}, 'priority': {'name': priority}, } :return: """ issue.update(fields=issue_dict) def update_issue_issuetype(self, issue, issuetype): """ 更新bug 狀態 :param issue: :param issuetype: 可以為id值如11,可以為值如'恢復開啟問題' :return: """ transitions = self.jira.transitions(issue) # print([(t['id'], t['name']) for t in transitions]) self.jira.transition_issue(issue, issuetype) def search_issues(self, jql): """ 查詢bug :param jql: 查詢語句,如"project=項目key AND component = 模塊 AND status=closed AND summary ~標題 AND description ~描述" :return: """ try: # maxResults參數是設置返回數據的最大值,默認是50。 issues = self.jira.search_issues(jql, maxResults=self.maxResults) except Exception as e: print(e) sys.exit(-1) return issues def search_issue_content(self, issue, content_type): """ 獲取bug 的相關信息 :param issue: :param content_type:項目project; 模塊名稱components; 標題summary; 缺陷類型issuetype; 具體描述內容description; 經辦人assignee; 報告人reporter; 解決結果resolution; bug狀態status; 優先級priority; 創建時間created; 更新時間updated; 評論comments :return: """ # 評論 if content_type == 'comments': return [c.body for c in self.jira.comments(issue)] if hasattr(issue.fields, content_type): result = getattr(issue.fields, content_type) if isinstance(result, list): return [c.name for c in result if hasattr(c, 'name')] return result
if __name__ == '__main__':
jiratool = JiraTool('http://127.0.0.0:8080', '用戶名', '密碼')
jiratool.login()
issues = jiratool.search_issues('project=項目名稱 AND component = 模塊名稱')
for issue in issues:
print(jiratool.search_issue_content(issue,'comments'))
參考官網官網:https://jira.readthedocs.io/en/master/