//------------------------------------------------------------------------------ // Ejecutar automatizacion STELA desde Pipeline JENKINS y esperar que finalice // Cuando finaliza se controla el resultado y en base al mismo se establece // la condicion de ejecucion del pipeline, exitosa o con error // // Creado por: STB Fecha: 2023-11-20 //------------------------------------------------------------------------------ // Variables globales de configuración al ambiente de cada cliente def STELA_server = 'servidor-stela.com' // Nombre del servidor STELA donde está publicada la API CI/CD def token = 'token-proyecto' // Token del proyecto STELA def id_Automation = 'id-automatizacion' // Id de la automatización, carpeta o Escenario a ejecutar def espera_stela = 30 // Pausa en segundos entre consultas para esperar el resultado // Variables globales def started = false // Indica que la automatización de STELA se inició correctamente def execId = 0 // Número de ejecución devuelto por STELA pipeline { agent any stages { stage('Invoca la API CI/CD de STELA para ejecutar una Automatización, Carpeta o Escenario') { steps { script { def requestData = [ id_Automation: '', token: '' ] requestData['id_Automation'] = id_Automation requestData['token'] = token echo "RequestData: ${groovy.json.JsonOutput.toJson(requestData)}" def URLServicioEjecucion = "https://${STELA_server}/STELAUI_API_CICD/execute/automation" def response = httpRequest( url: URLServicioEjecucion, httpMode: 'POST', contentType: 'APPLICATION_JSON', requestBody: groovy.json.JsonOutput.toJson(requestData) ) def jsonResponse = '' if (response.status == 200) { jsonResponse = readJSON text: response.content echo "Respuesta de STELA: $jsonResponse" if (jsonResponse['success'] == true) { started = true execId = jsonResponse['id_execution'] } else { error "STELA no pudo iniciar automatización: ${response.status}" } } else { error "ERROR: No se pudo ejecutar servicio - HTTP Status: ${response.status}" } } } } stage('Control del resultado de la ejecución en STELA') { when { expression { return started } } steps { script { def url = "https://${STELA_server}/STELAUI_API_CICD/execute/result?token=${token}&exe_token=${execId}" def response = httpRequest( url: url, httpMode: 'GET', contentType: 'APPLICATION_JSON', acceptType: 'APPLICATION_JSON', requestBody: '' ) def jsonResponse = '' if (response.status == 200) { jsonResponse = readJSON text: response.content echo "Respuesta de STELA al pedido de resultados: $jsonResponse" } else { error "STELA no pudo ejecutar la automatización - HTTP Status: ${response.status}" } if (jsonResponse['success'] == true) { while (jsonResponse['result'] < 2) { sleep(espera_stela) // Esperamos antes de volver a consultar echo "Se consulta a STELA por el resultado" response = httpRequest( url: url, httpMode: 'GET', contentType: 'APPLICATION_JSON', acceptType: 'APPLICATION_JSON', requestBody: '' ) if (response.status == 200) { jsonResponse = readJSON text: response.content echo "Respuesta de STELA al pedido de resultados: $jsonResponse" } else { error "STELA no pudo ejecutar la automatización - HTTP Status: ${response.status}" } } switch (jsonResponse['result']) { case 2: echo "STELA: Las automatizaciones finalizaron EXITOSAMENTE." break case 3: error "STELA: Las automatizaciones finalizaron CON FALLOS." break default: error "STELA: Las automatizaciones finalizaron CON FALLOS. Vea $jsonResponse" } } } } } } }