world tutorial hello first example español jenkins groovy jenkins-workflow jenkins-pipeline jenkins-2

tutorial - Cómo ejecutar un comando en un trabajo Jenkins 2.0 Pipeline y luego devolver la salida estándar



jenkins pipeline tutorial español (2)

¿Hay una mejor manera de ejecutar una tarea de shell en una canalización de Jenkins 2.0 y luego devolver la stdout del comando. La única forma en que puedo hacer que esto funcione es canalizar la salida del comando a un archivo y luego leer el archivo en una variable.

sh(''git config --get remote.origin.url > GIT_URL'') def stdout = readFile(''GIT_URL'').trim()

Esto parece una forma realmente mala de devolver la salida. Esperaba poder hacer algo como:

def stdout = sh(''git config --get remote.origin.url'').stdout

o

def exitcode = sh(''git config --get remote.origin.url'').exitcode

es posible?


Actualizar

Desde 6/2016, JENKINS-26133 está oficialmente marcado como Resuelto. Por lo tanto, antes de probar las soluciones alternativas, primero intente la here compatible para sh / bat que hace posible utilizar los parámetros returnStdout y returnStatus .

Soluciones

Desafortunadamente, esta característica aún no está soportada y falta. Para obtener más información, consulte el JENKINS-26133 oficial:

JENKINS-26133 Shell toma / devuelve salida / estado Estado: Asignado: Prioridad: Resolución: Abrir Jesse Glick Major Sin resolver

Descripción

Actualmente sh no tiene un valor de retorno significativo, y lanza una excepción si el estado de salida no es cero. Sería bueno tener una opción para que devuelva el código de salida (cero o no) como un valor entero:

def r = sh script: ''someCommand'', returnStatus: true

Solución actual:

sh ''someCommand; echo $? > status'' def r = readFile(''status'').trim()

O para que devuelva su salida estándar (similar a los backticks de shell):

def lines = sh(script: ''dumpStuff.sh'', returnStdout: true).split("/r?/n")

Solución:

sh ''dumpStuff.sh > result'' def lines = readFile(''result'').split("/r?/n")

O para que tome algo en la entrada estándar:

sh script: ''loadStuff.sh'', stdin: someText

Solución:

writeFile file: ''input'', text: someText > sh ''loadStuff.sh < input''

Probablemente requiere algunos cambios de API en tareas duraderas.


Sí, como se mencionó en luka5z , la versión 2.4 del complemento de procesos y nodos de tuberías ahora admite este tipo de cosas:

def stdout = sh(script: ''git config --get remote.origin.url'', returnStdout: true) println stdout def retstat = sh(script: ''git config --get remote.origin.url'', returnStatus: true) println retstat

Parece que si intentas devolver ambos en el mismo script, returnStatus sobrescribirá returnStdout, lo cual es un poco desafortunado.

Puedes leer más en la documentación oficial here

Edición: Además, también le permite un control más preciso sobre los estados de compilación inestables o fallidos. Puedes ver un ejemplo en mi comentario here