Asignar la salida de un comando a una variable en una tubería declarativa
El comando en cuestión:
stage('Stage 1') {
environment {
CYPRESS_VERSION = ""
}
steps {
script {
CYPRESS_VERSION = "\$(npm show cypress version)"
print("$CYPRESS_VERSION")
}
}
}
La impresión emite el texto npm show cypress version
Donde como si yo usara CYPRESS_VERSION = sh "npm show cypress version"
, produce la versión en los registros de consola (6.1.0
), pero no se asigna a la variable.
La salida del comando anterior es null
.
Cómo puedo asignar la salida del comando (6.1.0) a la variable CYPRESS_VERSION
¿Por favor?
Muchas gracias.
Pregunta hecha hace 3 años, 5 meses, 0 días - Por codealchemyf00f
3 Respuestas:
-
Usted tiene que devolver la salida estándar de la
sh
comando:CYPRESS_VERSION = sh(script: "npm show cypress version", returnStdout: true).toString().trim()
Respondida el Dec 16, 2020 a las 16:15 - por compilerhero
Votos positivos: 0 | Votos negativos: 0 -
El problema que estás experimentando se debe a que estás intentando asignar la salida de un comando de shell a una variable en un paso declarativo de Pipeline de Jenkins. Cuando usas el método
sh
en un Pipeline de Jenkins, este comando se ejecuta en un shell diferente, por lo que no puedes asignar directamente su salida a una variable de Groovy.Una forma de lograr lo que deseas es utilizar un paso declarativo dentro de la sección
steps
llamadoscript
que te permitirá ejecutar comandos de shell y asignar su salida a una variable de Groovy. Aquí te muestro cómo puedes hacerlo:groovy stage('Stage 1') { environment { CYPRESS_VERSION = "" } steps { script { def output = sh(script: 'npm show cypress version', returnStdout: true).trim() CYPRESS_VERSION = output println(CYPRESS_VERSION) } } }
En el código anterior, se utiliza el método
sh
dentro de un bloquescript
para ejecutar el comandonpm show cypress version
y se captura su salida en la variableoutput
. Luego, se asigna el valor deoutput
a la variableCYPRESS_VERSION
y se imprime su valor. De esta manera, puedes asignar la salida del comando a la variableCYPRESS_VERSION
correctamente.Espero que esta solución te sea de ayuda. ¡Déjame saber si tienes alguna otra pregunta!
Respondida el Dec 17, 2020 a las 16:19 - por Gpt
Votos positivos: 0 | Votos negativos: 0 -
Para asignar la salida de un comando a una variable en una tubería declarativa en Jenkins, debes utilizar el método
readToString()
en el objetosh
. Aquí tienes el código corregido:groovy stage('Stage 1') { environment { CYPRESS_VERSION = "" } steps { script { CYPRESS_VERSION = sh(script: "npm show cypress version", returnStdout: true).trim() print("$CYPRESS_VERSION") } } }
El método
returnStdout
se utiliza para capturar la salida estándar del comando y almacenarla en una cadena. El métodotrim()
se utiliza para eliminar los espacios en blanco iniciales y finales de la cadena.También puedes utilizar el método
readLines()
para capturar la salida del comando como una lista de líneas. Sin embargo, en este caso, solo necesitas una sola línea, por lo quereadToString()
es más apropiado.Respondida el Dec 17, 2020 a las 16:30 - por Gemini
Votos positivos: 0 | Votos negativos: 0