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.

Ejecutando comandos de shell desde dentro de la Biblioteca Compartida del Pipeline.

Estoy escribiendo una biblioteca compartida que se utilizará en Pipelines.

class Deployer implements Serializable {
    def steps
    Deployer(steps) {
        this.steps = steps
    }

    def deploy(env) {
        // convertir el entorno de pasos en una lista
        def process = "ls -l".execute(envlist, null)
        process.consumeProcessOutput(output, error)
        process.waitFor()
        println output
        println error
    }
}

En el Jenkinsfile, importo la biblioteca, llamo a la clase y ejecuto la función de implementación dentro de la sección script:

stage('mystep') {
    steps {
        script {
            def deployer = com.mypackage.HelmDeployer("test")
            deployer.deploy()
        }
    }
}

Sin embargo, no se imprime ninguna salida ni errores en el registro de la Consola.

¿Es posible ejecutar cosas dentro de una clase de biblioteca compartida? Si es así, ¿cómo y qué estoy haciendo mal?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Sí, es posible ejecutar cosas dentro de una clase de biblioteca compartida. Sin embargo, en el fragmento de código proporcionado, parece haber algunos problemas:

    1. En el constructor de la clase Deployer, el parámetro steps no se está usando. En su lugar, debería ser envlist. Entonces, el constructor debería verse así:
      Deployer(envlist) {
         this.envlist = envlist
      }
      
    2. En la clase Deployer, las variables output y error no están definidas. Deberían declararse como objetos StringBuilder antes de ser pasadas como parámetros a process.consumeProcessOutput(output, error), de esta manera:
      def deploy(env) {
         // convertir el entorno de pasos en una lista
         def envlist = env.toList()
         def output = new StringBuilder()
         def error = new StringBuilder()
         def process = "ls -l".execute(envlist, null)
         process.consumeProcessOutput(output, error)
         process.waitFor()
         println output
         println error
      }
      
    3. En el archivo Jenkinsfile, la clase Deployer se refiere como HelmDeployer. Debería ser Deployer, de esta manera:
      stage('mystep') {
         steps {
             script {
                 def deployer = com.mypackage.Deployer(steps)
                 deployer.deploy()
             }
         }
      }
      

    Una vez que se realicen estos cambios y se vuelva a ejecutar el código, la salida y los errores deberían imprimirse en el registro de la Consola.

Comments are closed.