tutorial steps example español jenkins jenkins-workflow jenkins-pipeline

steps - jenkinsfile



¿Es posible capturar el stdout del comando sh DSL en la tubería? (5)

Por ejemplo:

var output=sh "echo foo"; echo "output=$output";

Obtendré:

output=0

Entonces, aparentemente obtengo el código de salida en lugar del stdout. ¿Es posible capturar el stdout en una variable de canalización, de modo que pueda obtener: output=foo como resultado?


Nota: El problema vinculado de Jenkins ya se ha resuelto.

Como se menciona en JENKINS-26133 no fue posible obtener la salida del shell como una variable. Como solución alternativa sugirió el uso de escritura-lectura desde un archivo temporal. Entonces, su ejemplo se habría visto así:

sh "echo foo > result"; def output=readFile(''result'').trim() echo "output=$output";


Prueba esto:

def get_git_sha(git_dir='''') { dir(git_dir) { return sh(returnStdout: true, script: ''git rev-parse HEAD'').trim() } } node(BUILD_NODE) { ... repo_SHA = get_git_sha(''src/FooBar.git'') echo repo_SHA ... }

Probado en:

  • Jenkins ver. 2.19.1
  • Pipeline 2.4

También puede intentar usar estas funciones para capturar StdErr StdOut y el código de retorno.

def runShell(String command){ def responseCode = sh returnStatus: true, script: "${command} &> tmp.txt" def output = readFile(file: "tmp.txt") if (responseCode != 0){ println "[ERROR] ${output}" throw new Exception("${output}") }else{ return "${output}" } }

Aviso:

&>name means 1>name 2>name -- redirect stdout and stderr to the file name


Una versión corta sería:

echo sh(script: ''ls -al'', returnStdout: true).result


JENKINS-26133 , el paso sh admite la devolución de stdout al proporcionar el parámetro returnStdout .

// These should all be performed at the point where you''ve // checked out your sources on the slave. A ''git'' executable // must be available. // Most typical, if you''re not cloning into a sub directory gitCommit = sh(returnStdout: true, script: ''git rev-parse HEAD'').trim() // short SHA, possibly better for chat notifications, etc. shortCommit = gitCommit.take(6)

Ver este ejemplo .