我正在 jenkins 管道中处理一些任务,这些任务会调用 rest api 很多时间。而且我发现 httpRequest 能够通过以下示例完成任务,因为我有很多调用会有很多代码与下面类似,只有一点点不同。
def response = httpRequest acceptType: 'APPLICATION_JSON', contentType: 'APPLICATION_JSON',
httpMode: 'PATCH', requestBody: patchOrg,
url: "https://api.github.com/orgs/${orgName}"
参考https://www.jenkins.io/doc/pipeline/steps/http_request/,httpRequest有很多选项。所以我在下面的函数中添加了一些参数
你可以通过下面的例子调用它
/* refering to https://www.jenkins.io/doc/pipeline/steps/http_request/
*/
def httpCall(url, httpMode='GET', params=[:]) {
def headers = []
valuedParams = [
'acceptType': 'APPLICATION_JSON',
'authentication': null,
'consoleLogResponseBody': false,
'contentType': 'APPLICATION_JSON',
'headers': [:],
'requestBody': null,
'quiet': true,
'responseHandle': 'NONE',
'timeout': null,
'validResponseCodes': '200, 404',
'validResponseContent': null,
]
for (header in params.get('headers', valuedParams['headers'])) {
headers.add(['maskValue': true, 'name': header.key, 'value': header.value])
}
def response = [
status: 500,
content: 'Failed to call ' + url
]
try {
response = httpRequest \
url: url,
acceptType: params.get('acceptType', valuedParams['acceptType']),
authentication: params.get('authentication', valuedParams['authentication']),
consoleLogResponseBody: params.get('consoleLogResponseBody', valuedParams['consoleLogResponseBody']),
contentType: params.get('contentType', valuedParams['contentType']),
customHeaders: headers,
requestBody: params.get('requestBody', valuedParams['requestBody']),
quiet: params.get('quiet', valuedParams['quiet']),
responseHandle: params.get('responseHandle', valuedParams['responseHandle']),
timeout: params.get('timeout', valuedParams['timeout']),
validResponseCodes: params.get('validResponseCodes', valuedParams['validResponseCodes']),
validResponseContent: params.get('validResponseContent', valuedParams['validResponseContent']),
httpMode: httpMode
} catch (hudson.AbortException e) {
print('Failed to call api:' + url + 'with exception' + e.message)
}
return response
}
pipeline {
agent any
stages {
stage('Hello') {
steps {
script {
def params = [
'acceptType': 'APPLICATION_JSON',
'contentType': 'APPLICATION_FORM_DATA',
'formData': [:],
'quiet': true,
'responseHandle': 'NONE',
'timeout': null,
'validResponseCodes': '200, 404',
'validResponseContent': 'token',
'customHeaders': [:],
'headers': ['Authorization': 'your-token']
]
httpCall('https://api.github.com/orgs/', 'GET', params)
}
}
}
}
}