es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Resultado de ejecución del script de Python en la tubería de Jenkins

Tengo un pipeline de Jenkins donde tengo 2 etapas:

pipeline {
  agent {label 'master'}
  stages ('stage 1') {
    stage {
      steps {
        sh "python3 script.py" //este script devuelve el valor {"status": "ok"}
      }
    }
    stage ('stage 2') {
      // Hacer algo con el JSON de respuesta de script.py
    }
  }
}

El problema es que no puedo hacerlo. Lo que he intentado:
1. Pasar el resultado a una variable de entorno, pero por alguna razón, Jenkins no lo reconoció. ¿Quizás hice algo mal aquí?
2. Analizar y leer la salida estándar de script.py no es una opción, porque este script imprime muchos registros.

La única opción que queda es crear un archivo para almacenar ese JSON y luego leer ese archivo en el siguiente paso, pero es feo.

¿Alguna idea?

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Una posible solución a este problema podría ser utilizar el complemento “Jenkins Pipeline Utility Steps”, específicamente el paso readJSON. Este paso te permite leer un archivo JSON y analizarlo como un mapa dentro de tu script de pipeline.

    Para utilizar este paso, debes modificar tu pipeline de la siguiente manera:

    pipeline {
      agent {label 'master'}
      stages {
        stage('stage 1') {
          steps {
            script {
              // Ejecuta el script y guarda la salida en un archivo JSON
              sh "python3 script.py > output.json"
    
              // Lee el JSON desde el archivo y analízalo como un mapa
              def response = readJSON file: 'output.json'
    
              // Guarda el mapa de respuesta en una variable de pipeline
              env.RESPONSE_JSON = response
            }
          }
        }
        stage('stage 2') {
          steps {
            // Utiliza el mapa de respuesta en tu pipeline
            echo env.RESPONSE_JSON.status
          }
        }
      }
    }
    

    Esta solución evita la necesidad de analizar la salida del script desde stdout, al mismo tiempo que te permite acceder fácilmente a los datos de respuesta en la siguiente etapa del pipeline.

Comments are closed.