¿Cómo obtengo la salida de un comando de shell ejecutado usando una variable desde Jenkinsfile (groovy)?
Tengo algo como esto en un Jenkinsfile (Groovy) y quiero grabar el stdout y el código de salida en una variable para usar la información más tarde.
sh "ls -l"
¿Cómo puedo hacer esto, especialmente porque parece que realmente no se puede ejecutar ningún tipo de código groovy dentro de la Jenkinsfile
?
4 answers
La última versión del paso pipeline sh
le permite hacer lo siguiente;
// Git committer email
GIT_COMMIT_EMAIL = sh (
script: 'git --no-pager show -s --format=\'%ae\'',
returnStdout: true
).trim()
echo "Git committer email: ${GIT_COMMIT_EMAIL}"
Otra característica indocumentada (por ahora) es la opción returnStatus
.
// Test commit message for flags
BUILD_FULL = sh (
script: "git log -1 --pretty=%B | grep '\\[jenkins-full]'",
returnStatus: true
) == 0
echo "Build full flag: ${BUILD_FULL}"
Estas opciones se agregaron en función de este problema.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-12-06 13:09:12
La respuesta rápida es esta:
sh "ls -l > commandResult"
result = readFile('commandResult').trim()
Creo que existe una solicitud de característica para poder obtener el resultado del paso sh, pero por lo que sé, actualmente no hay otra opción.
EDITAR: JENKINS-26133
EDIT2: No estoy muy seguro desde qué versión, pero sh / bat steps ahora puede devolver la salida std, simplemente:
def output = sh returnStdout: true, script: 'ls -l'
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-11-23 12:33:42
La versión actual de la canalización admite de forma nativa returnStdout
y returnStatus
, lo que permite obtener la salida o el estado de sh
/bat
pasos.
Un ejemplo:
def ret = sh(script: 'uname', returnStdout: true)
println ret
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-10-12 20:30:31
Este es un caso de ejemplo, que tendrá sentido creo!
node('master'){
stage('stage1'){
def commit = sh (returnStdout: true, script: '''echo hi
echo bye | grep -o "e"
date
echo lol''').split()
echo "${commit[-1]} "
}
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-07-20 11:48:50