以jira为工单平台,可以解决一些棘手的问题,献上封装好的代码。
jira api 总结
jira状态转变
- ('4', '开始进行')
- ('5', '解决问题')
- ('2', '关闭问题')
- ('701', '关闭问题')
- ('3', '恢复开启问题')
from jira import JIRA
from config import jira_account
import pandas as pd
jira_server_url = 'http://%s:%d'%(jira_account["HOST"],jira_account["PORT"])
# 连接jira服务器
# server = {'server': jira_url}
class JiraTool:
# ('4', '开始进行')
# ('5', '解决问题')
# ('2', '关闭问题')
# ('701', '关闭问题')
# ('3', '恢复开启问题')
def __init__(self,server=jira_server_url,username=jira_account["USER"],password=jira_account["PASS"]):#
self.server = server
self.basic_auth = (username, password)
self.jiraClinet = None
self.issue = None
def login(self):
self.jiraClinet = JIRA(server=self.server, basic_auth=self.basic_auth)
if self.jiraClinet != None:
print(f"[+]login jira with account:{self.basic_auth[0]} successful!")
return True
else:
return False
# 依据分配的id搜索
def findIssueById(self, issueId):
if issueId:
if self.jiraClinet == None:
self.login()
return self.jiraClinet.issue(issueId)
else:
return 'Please input your issueId'
def createIssue(self, project, summary, description, assignee, priority,labels):
issue_dict = {
'project': {'key': project},
'issuetype': {'name': u'xx问题'},
'summary': summary,
'description': description,
'assignee': {'name': assignee},
'priority': {'name': priority},
'labels': labels.split(';')
}
if self.jiraClinet == None:
self.login()
return self.jiraClinet.create_issue(issue_dict)
#添加完watcher,
def addWatcher(self,new_issue,assignee):
try:
self.jiraClinet.add_watcher(new_issue.id, assignee)
except Exception as e:
print(e)
self.jiraClinet.add_comment(new_issue, u'请管理员在xx修复完毕后点击[解决问题]按钮,以方便跟踪进度,谢谢')
# 依据内部编号(如:HTxx)的ID搜索
def searchissue(self,vulns_id):
# 拼接jira的查询语句
jiraexp = f'project=SRCVR AND text ~ "{vulns_id}"'
# 获取jira目前漏洞修复的状态
_issue = self.jiraClinet.search_issues(jiraexp)
if _issue:
self.issue = _issue[0]
return _issue[0]
# status = issue[0].fields.status.name
def closeissue(self):
if self.issue:
if '2' in self.availabletransitions():
self.jiraClinet.transition_issue(issue, '2', fields={'assignee': {'name': '0xx'}, 'resolution': {'id': '1'}},#resolution 1 为解决问题
comment=u'漏洞修复完毕') # 关闭问题
# 重新打开
# def reopenissue(self,issue,owner_num):
def reopenissue(self):
if self.issue:
if '3' in self.availabletransitions():
self.jiraClinet.transition_issue(self.issue, '3',comment=u'经复测,漏洞再次扫出,请检查漏洞修复状态')
# self.jiraClinet.assign_issue(issue, owner_num)
# 用于检查漏洞可转换的状态
def availabletransitions(self):
if self.issue:
transitions = self.jiraClinet.transitions(self.issue)
availableidlist = [t['id'] for t in transitions]
return availableidlist