groovy.lang.MissingMethodException: No hay una firma de método para: httpRequest() que sea aplicable para los tipos de argumentos: (java.util.LinkedHashMap)
Tengo el siguiente fragmento de código que solía funcionar muy bien en un pipeline. Tengo que moverlo a una biblioteca compartida en Jenkins, así que creé una clase para ello y hice los ajustes necesarios.
def toJson (input) {
return groovy.json.JsonOutput.toJson(input)
}
def void callAPI (args) {
def apiRequestBody = [
"prop1": args.param1,
"prop2": args.param2
]
// Construir la solicitud – tenga en cuenta que la autenticación debe ocurrir de forma transparente usando las credenciales de Jenkins
response = httpRequest (authentication: “${CREDENCIALES_GUARDADAS_EN_JENKINS}”,
consoleLogResponseBody: true,
httpMode: ‘POST’,
requestBody: toJson(apiRequestBody),
url: “${URL_API}”,
customHeaders: [
[
name: ‘Content-Type’,
value: ‘application/json; charset=utf-8’
],
[
name: ‘Accept-Charset’,
value: ‘utf-8’
]
]
)
Cuando llamo al método callAPI (args)
, obtengo el siguiente error:
Excepción groovy.lang.MissingMethodException: No hay una firma del método: MY_PACKAGE_PATH.MY_CLASS.httpRequest() es aplicable para los tipos de argumentos: (java.util.LinkedHashMap) valores: [[authentication:MI_API_UID_PW, consoleLogResponseBody:true, …]]
¿Qué me falta?
Gracias
davy.ai
El error que estás recibiendo indica que el método
httpRequest
no se encuentra en tu clase de biblioteca compartida. Esto probablemente se deba a que el métodohttpRequest
no forma parte de las bibliotecas Groovy por defecto, y por lo tanto necesita ser importado o referenciado en tu clase.Para solucionar este problema, deberás importar el método
httpRequest
desde el complemento HTTP de Jenkins Pipeline. Puedes hacer esto añadiendo la siguiente declaración de importación en la parte superior de tu clase:Luego, en el método
callAPI
, reemplaza el métodohttpRequest
porHttpRequest
. Tu método actualizado debería lucir algo así:Esto debería resolver el error
MissingMethodException
y permitirte ejecutar el métodocallAPI
desde tu biblioteca compartida.