Par exemple:
var output=sh "echo foo";
echo "output=$output";
J'aurai:
output=0
Donc, apparemment, j'obtiens le code de sortie plutôt que le stdout. Est-il possible de capturer le stdout dans une variable de pipeline, de sorte que je puisse obtenir:
output=foo
comme résultat?
.trim()
partie de cette réponse, sinon vous risquez d'obtenir un caractère de nouvelle ligne à la fin de la ligne--short
àrev-parse
peut simplement obtenir directement un hachage courtgitCommit = sh(returnStdout: true, script: 'git rev-parse HEAD').toString().trim()
Remarque: le problème lié à Jenkins a depuis été résolu.
Comme mentionné dans JENKINS-26133, il n'était pas possible d'obtenir la sortie du shell en tant que variable. Comme solution de contournement suggérée l'utilisation de la lecture en écriture à partir d'un fichier temporaire. Donc, votre exemple aurait ressemblé à:
sh "echo foo > result"; def output=readFile('result').trim() echo "output=$output";
la source
returnStdout
paramètre passé à l'sh
étape.stdout
etexit status
de la commande du shell. D'autres fois, utilisez lereturnStdout
paramètre.Essaye ça:
Testé sur:
la source
Vous pouvez également essayer d'utiliser ces fonctions pour capturer StdErr StdOut et retourner le code.
Remarquer:
la source
Une version courte serait:
la source
Référence: http://shop.oreilly.com/product/0636920064602.do Page 433
la source
J'ai eu le même problème et j'ai essayé presque tout ce que j'ai trouvé après avoir appris que je l'essayais dans le mauvais bloc. Je l'ai essayé en bloc d'étapes alors qu'il doit être dans le bloc d'environnement.
la source