你需要会使用下面两个编程语言:
自定义脚本文件结构
常用安装包
安装包 |
作用 |
Sys |
获取输入参数 |
json |
处理JSON数据 |
requests |
调用API |
datetime |
将时间从毫秒转换为所需的日期格式 |
获取输入参数
使用sys.argv[索引]可以获取脚本文件中的参数,其中的索引从1到通过的参数。
当该通过的参数为$COMPLETE_V3_JSON_FILE 时(到包含请求和Diff JSON的路径), JSON文件通过使用如下代码段可读:
file_Path = sys.argv[1]
with open(file_Path) as data_file:
data = json.load(data_file)
实施逻辑
用于调用API的代码段:
with requests.Session() as s:
url = 'api_url'
r = s.post(url,verify=True, data=post_data,headers=headers)
按要求构建 api_url, post_data 和 headers 。
以下代码段用于将时间从毫秒转换为所需的日期格式:
date = datetime.datetime.fromtimestamp(int(millisec)/1e3).strftime('%d %b %Y, %H:%M:%S')
构建返回JSON
例如{"key":"value"}的JSON样本可以构建如下:
json = {}
json["key"] = "value"
print(json)
例如[{"key":"value"}]的JSON组可以构建如下:
json = {}
json["key"] = "value"
result = []
result.append(json)
print(result)
使用脚本中的返回JSON可以执行一些操作。了解使用返回JSON执行的操作请点击 这里。
下面是一个JSON架构示例,可以更新请求的附加字段JIRA_ISSUE_ID & JIRA_ISSUE_URL 并为其添加注释。
更新请求的附加字段
import requests
import sys
import json,os
resultjson={}
resultjson["operation"] = []
resultjson["result"]="success"
message = "Sample Python script for update request"
resultjson["message"]=message
operationJson={"INPUT_DATA":[]}
operationJson["OPERATIONNAME"]="UPDATE"
operationJson["FORMAT"]="V3"
updateReqArray_field={}
updateReqArray_field['udf_sline_2101']="123"
updateReqArray_field['udf_sline_1803']="abcd"
updateReqArray={}
updateReqArray['udf_fields']=updateReqArray_field
updateReq={}
updateReq['request']=updateReqArray
operationJson['INPUT_DATA'].append(updateReq)
resultjson['operation'].append(operationJson)
print(resultjson)
添加注释
import sys
import json
resultjson={}
message = "Sample Python script for adding note using v3 API"
resultjson["operation"] = []
resultjson["result"]="success"
operationJson={"INPUT_DATA":[]}
operationJson["OPERATIONNAME"]="ADD_NOTE"
operationJson["FORMAT"]="V3"
requestNoteDetails={}
requestNoteDetails['description']="Jira Request Created"
requestNoteDetails['show_to_requester']="false"
requestNoteDetails['notify_technician']="true"
requestNoteDetails['mark_first_response']="false"
requestNoteDetails['add_to_linked_requests']="true"
requestNote={}
requestNote['request_note']=requestNoteDetails
resultjson["message"]=message
operationJson['INPUT_DATA'].append(requestNote)
resultjson['operation'].append(operationJson)
print(resultjson)
支持的参数—$COMPLETE_V3_JSON_FILE
$COMPLETE_V3_JSON_FILE 它表示一个文件的路径,该文件包含完整的JSON格式的请求细节、过往的字段值以及更新字段值。该文件是临时的,在脚本执行后自动删除。
该临时的JSON文件被创建于 SDP_Home\integration\custom_scripts\request\ 目录下, 文件名为 <requestid_timestamp>.json.
$COMPLETE_V3_JSON_FILE 架构
{
"request": {
<all request properties in V3 format>
},
"diff": {
"old": {
"request": {
"priority": {
"id": "4",
"name": "High"
},
"urgency": {
"id": "3",
"name": "Normal"
},
"impact_details": "High impact for servers"
}
},
"new": {
"request": {
"priority": {
"id": "1",
"name": "Low"
},
"urgency": {
"id": "4",
"name": "Low"
},
"impact_details": "Low impact for servers"
}
}
},
"LOGIN_NAME": "administrator",
"LOGGEDIN_USER_TYPE": "Technician",
"LOGGEDIN_USER_NAME": "administrator",
"OPERATION_TYPE": "add"
}
提供给$COMPLETE_V3_JSON_FILE 临时文件的输入JSON
输入 的是JSON. 在这里,请求密钥包含V3 API 格式的所有字段,除了解决方案,首次响应时间,首次截止时间和SLA。
输入字段中的其他信息:
输出自定义字段的JSON 格式
请求字段的脚本应返回一个JSON,该JSON包含失败/成功的状态,以及一条信息,该信息将显示在请求的历史标签里。
一般格式:
{
"result": "success",
"message": "Message"
}
服务器脚本必须将输出JSON(如果有的话)写到相同的提供给该脚本的临时文件夹。禁止调用外部API调用来更新相同请求,因为这将阻止更新后的值传递到业务规则。
$COMPLETE_V3_JSON_FILE
$COMPLETE_V3_JSON_FILE 表示包含$COMPLETE_JSON 和 $DIFF_JSON的文件的文件路径放在一个JSON中。不向类/脚本传递过多的参数,而是通过文件路径,脚本可以打开文件并访问所需的值。
该文件是临时创建的,并在脚本执行后删除。
该临时JSON文件被创建于SDP_Home\integration\custom_scripts\request\ 目录下, 文件名为 <requestid_timestamp>.json.