#当创建的请求类型为“Bug”且影响为“High”时,该脚本文件会创建一个 JIRA 工单。请求 ID、主题、描述、到期时间和优先级会传递给 JIRA 以创建工单。成功创建 JIRA 工单后,会从响应中获取 JIRA 工单 ID 和工单 URL,并将其作为备注添加到 ServiceDesk Plus 请求中。自定义字段 “JIRA_ISSUE_ID” 和 “JIRA_ISSUE_URL” 也会更新为相应的值。
#需要由用户设置:url、jirausername、jirapassword、Jira_Server、Port_Number
#命令 - 'py CreateJiraTicket.py $COMPLETE_JSON_FILE'
import requests
import sys
import json
import datetime
#打开并访问 json 文件
file_Path = sys.argv[1]
with open(file_Path) as data_file:
data = json.load(data_file)
#获取所需的值
request_obj = data['request']
workorderid = request_obj['WORKORDERID']
subject = request_obj['SUBJECT']
desc = request_obj['SHORTDESCRIPTION']
priority = request_obj['PRIORITY']
duebytime = request_obj['DUEBYTIME']
#将时间从毫秒转换为日期格式
duebydate = datetime.datetime.fromtimestamp(int(duebytime) / 1e3).strftime('%d %b %Y, %H:%M:%S')
jsonData ='''{
"fields": {
"summary": "'''+subject+'''",
"description": "'''+desc+'''",
"issuetype": {
"name": "BUG"
},
"project": {
"key": "ServiceDesk Plus issues"
},
"duedate": "'''+duebydate+'''",
"priority": {
"name": "'''+priority+'''"
},
"customfield_10003": "'''+workorderid+'''"
}
}'''
jirausername = 'jirausername'
jirapassword = 'jirapassword'
string = username + ":" + password
stringbytes = bytes(string,"utf-8")
base64string = base64.b64encode(stringbytes)
base64string = base64string.decode("utf-8")
headers = ''' {
"X-Version" : "1",
'Content-Type':'application/json',
"Accept" : "application/json",
"Authorization" : "Basic " + base64string
}'''
with requests.Session() as s:
url = "[Jira_Server]:[Port_Number]/rest/api/2/issue/"
r = s.post(url,verify=True, data=jsonData,headers=headers)
#如果调用成功返回,则创建备注并更新自定义字段
if(r.status_code == 202):
responseobj=r.json()
jiraissueid = responseobj['id']
jiraissueurl = responseobj['self']
note={}
note["notestext"] = "已创建 Jira 请求,ID: "+jiraissueid+"</br> 问题链接: "+jiraissueurl
noteObject={}
noteObject["notes"]=note
addNoteJson={}
addNoteJson['INPUT_DATA']=[]
addNoteJson['INPUT_DATA'].append(noteObject)
addNoteJson["OPERATIONNAME"]="ADD_NOTE"
updateReqArray={}
updateReqArray['JIRA_ISSUE_ID']=jiraissueid
updateReqArray['JIRA_ISSUE_URL']=jiraissueurl
updateFieldsJson={"INPUT_DATA":[]}
updateFieldsJson['INPUT_DATA'].append(updateReqArray)
updateFieldsJson["OPERATIONNAME"]="EDIT_REQUEST"
resultjson={}
resultjson["result"] = "success"
resultjson["message"] = "已创建 Jira 请求。包含问题 ID 和 URL 的备注已添加。"
resultjson["operation"] = []
resultjson["operation"].append(addNoteJson)
resultjson["operation"].append(updateFieldsJson)
print(resultjson)
else:
print("提交请求时出现问题")
print(r.json())