Na przykład:
var output=sh "echo foo";
echo "output=$output";
Wezmę:
output=0
Najwyraźniej otrzymuję kod zakończenia, a nie standardowe wyjście. Czy jest możliwe przechwycenie stdout do zmiennej potoku, tak że mogę uzyskać:
output=foo
jako mój wynik?
.trim()
część tej odpowiedzi, w przeciwnym razie możesz otrzymać znak nowej linii na końcu linii--short
torev-parse
może bezpośrednio uzyskać krótki hashgitCommit = sh(returnStdout: true, script: 'git rev-parse HEAD').toString().trim()
Uwaga: powiązany problem z Jenkinsem został już rozwiązany.
Jak wspomniano w JENKINS-26133 , nie można było uzyskać danych wyjściowych powłoki jako zmiennej. Jako obejście sugerowano użycie zapisu-odczytu z pliku tymczasowego. Twój przykład wyglądałby więc następująco:
sh "echo foo > result"; def output=readFile('result').trim() echo "output=$output";
źródło
returnStdout
parametrowi przekazanemu dosh
kroku.stdout
iexit status
polecenia powłoki. W innych przypadkach użyjreturnStdout
parametru.Spróbuj tego:
Przetestowano na:
źródło
Możesz spróbować użyć tej funkcji również do przechwycenia StdErr StdOut i kodu powrotu.
Ogłoszenie:
źródło
Krótka wersja to:
źródło
Źródła: http://shop.oreilly.com/product/0636920064602.do Strona 433
źródło
Miałem ten sam problem i próbowałem prawie wszystkiego, a potem znalazłem, gdy dowiedziałem się, że próbuję go w niewłaściwym bloku. Próbowałem tego w bloku kroków, podczas gdy musi być w bloku środowiska.
źródło