groovy.lang.MissingMethodException:没有方法签名:httpRequest() 适用于参数类型:(java.util.LinkedHashMap)
groovy.lang.MissingMethodException: No signature of method: httpRequest() is applicable for argument types: (java.util.LinkedHashMap)
我有以下一段代码曾经在管道中工作得很好。我必须将它移动到 Jenkins 的共享库中,因此为它创建了一个 class 并进行了必要的调整。
def toJson (input) {
return groovy.json.JsonOutput.toJson(input)
}
def void callAPI (args) {
def apiRequestBody = [
"prop1": args.param1,
"prop2": args.param2
]
// Build the request - notice that authentication should happen seamlessly by using Jenkins Credentials
response = httpRequest (authentication: "${CREDENTIALS_STORED_IN_JENKINS}",
consoleLogResponseBody: true,
httpMode: 'POST',
requestBody: toJson(apiRequestBody),
url: "${API_URL}",
customHeaders: [
[
name: 'Content-Type',
value: 'application/json; charset=utf-8'
],
[
name: 'Accept-Charset',
value: 'utf-8'
]
]
)
当我调用 callAPI (args)
方法时,出现以下错误:
Exception groovy.lang.MissingMethodException: No signature of method: MY_PACKAGE_PATH.MY_CLASS.httpRequest() is applicable for argument types: (java.util.LinkedHashMap) values: [[authentication:MYAPI_UID_PW, consoleLogResponseBody:true, ...]]
我错过了什么?
谢谢
httpRequest
是一个 DSL 命令,它不能 直接 在 class 的上下文中可用,就像你不能使用 sh
、bat
或 node
。
有关详细信息,请参阅 https://www.jenkins.io/doc/book/pipeline/shared-libraries/#accessing-steps。
不过,您可以从 Jenkinsfile 中提取代码并将其放入“var”(或全局变量)中。
如果您坚持将代码放在共享库 class 中,请参考上面的 link,这会将您的代码转换为(注意“script”参数和 script.httpRequest
语法):
def void callAPI (script, args) {
def apiRequestBody = [
"prop1": args.param1,
"prop2": args.param2
]
// Build the request
response = script.httpRequest (authentication: "${CREDENTIALS_STORED_IN_JENKINS}",
// ...
}
我有以下一段代码曾经在管道中工作得很好。我必须将它移动到 Jenkins 的共享库中,因此为它创建了一个 class 并进行了必要的调整。
def toJson (input) {
return groovy.json.JsonOutput.toJson(input)
}
def void callAPI (args) {
def apiRequestBody = [
"prop1": args.param1,
"prop2": args.param2
]
// Build the request - notice that authentication should happen seamlessly by using Jenkins Credentials
response = httpRequest (authentication: "${CREDENTIALS_STORED_IN_JENKINS}",
consoleLogResponseBody: true,
httpMode: 'POST',
requestBody: toJson(apiRequestBody),
url: "${API_URL}",
customHeaders: [
[
name: 'Content-Type',
value: 'application/json; charset=utf-8'
],
[
name: 'Accept-Charset',
value: 'utf-8'
]
]
)
当我调用 callAPI (args)
方法时,出现以下错误:
Exception groovy.lang.MissingMethodException: No signature of method: MY_PACKAGE_PATH.MY_CLASS.httpRequest() is applicable for argument types: (java.util.LinkedHashMap) values: [[authentication:MYAPI_UID_PW, consoleLogResponseBody:true, ...]]
我错过了什么?
谢谢
httpRequest
是一个 DSL 命令,它不能 直接 在 class 的上下文中可用,就像你不能使用 sh
、bat
或 node
。
有关详细信息,请参阅 https://www.jenkins.io/doc/book/pipeline/shared-libraries/#accessing-steps。
不过,您可以从 Jenkinsfile 中提取代码并将其放入“var”(或全局变量)中。
如果您坚持将代码放在共享库 class 中,请参考上面的 link,这会将您的代码转换为(注意“script”参数和 script.httpRequest
语法):
def void callAPI (script, args) {
def apiRequestBody = [
"prop1": args.param1,
"prop2": args.param2
]
// Build the request
response = script.httpRequest (authentication: "${CREDENTIALS_STORED_IN_JENKINS}",
// ...
}