Sebagai contoh:
var output=sh "echo foo";
echo "output=$output";
Saya akan mendapatkan:
output=0
Jadi, ternyata saya mendapatkan kode keluar daripada stdout. Apakah mungkin untuk menangkap stdout menjadi variabel pipeline, sehingga saya bisa mendapatkan:
output=foo
sebagai hasil saya?
.trim()
bagian dari jawaban ini, jika tidak, Anda mungkin mendapatkan karakter baris baru di akhir baris--short
kerev-parse
bisa langsung mendapatkan hash pendekgitCommit = sh(returnStdout: true, script: 'git rev-parse HEAD').toString().trim()
Catatan: Masalah Jenkins tertaut telah diselesaikan sejak saat itu.
Seperti yang disebutkan dalam JENKINS-26133 , tidak mungkin mendapatkan keluaran shell sebagai variabel. Sebagai solusinya disarankan menggunakan write-read dari file sementara. Jadi, contoh Anda akan terlihat seperti ini:
sh "echo foo > result"; def output=readFile('result').trim() echo "output=$output";
sumber
returnStdout
parameter baru yang diteruskan kesh
langkah.stdout
danexit status
dari perintah shell. Di lain waktu, gunakanreturnStdout
parameter.Coba ini:
Diuji pada:
sumber
Anda juga dapat mencoba menggunakan fungsi ini untuk menangkap StdErr StdOut dan mengembalikan kode.
Memperhatikan:
sumber
Versi singkatnya adalah:
sumber
Referensi: http://shop.oreilly.com/product/0636920064602.do Halaman 433
sumber
Saya memiliki masalah yang sama dan mencoba hampir semua hal yang kemudian saya temukan setelah saya mengetahui bahwa saya mencobanya di blok yang salah. Saya mencobanya di blok langkah sedangkan itu perlu di blok lingkungan.
sumber