Dengan adanya pipeline build jenkins 2.1, jenkins memasukkan env
variabel ke dalam node{}
. Misalnya, BRANCH_NAME
bisa diakses dengan
node {
echo ${env.BRANCH_NAME}
...
Saya ingin menggemakan semua env
properti dalam pipeline jenkins
... mengingat saya tidak mengetahui semua properti sebelumnya.
Saya mencari kode suka
node {
for(e in env){
echo e + " is " + ${e}
}
...
yang akan menggemakan sesuatu seperti
BRANCH_NAME is myBranch2
CHANGE_ID is 44
...
jenkins
groovy
jenkins-pipeline
JamesThomasMoon 1979
sumber
sumber
env.each { name, value -> println "Name: $name -> Value $value" }
cetakanName: org.jenkinsci.plugins.workflow.cps.EnvActionImpl@45c2d1ee -> Value null
.new ClassName() { ... }
), itu akan berhasil. Atau Anda menjalankannya dengan metode yang diberi tag@NonCPS
, maka closure akan bekerja di dalamnya juga.Jawaban:
Cara lain yang lebih ringkas:
cf. https://jenkins.io/doc/pipeline/steps/workflow-durable-task-step/#code-sh-code-shell-script
sumber
sh
denganbat
danenv
dengan diset
bawah Windows.Menurut dokumentasi Jenkins untuk pipeline deklaratif :
Untuk pipeline dengan skrip Jenkins :
Di atas juga mengurutkan env vars Anda untuk kenyamanan.
sumber
printenv
hanyalah perintah shell yang mencetak lingkungan, tidak ada yang khusus untuk Jenkins. Tanpa argumen itu sama denganenv
tanpa argumen. Saya cukup yakinsh 'printenv | sort'
akan bekerja di DCL atau pipeline dengan skrip.sh 'printenv | sort'
ternyata berfungsi untuk pipeline deklaratif Jenkins; fwiwsh 'env | sort'
juga berfungsi (Keduanya diuji pada Jenkins ver. 2.46.1). Saya awalnya menyebutkansh 'printenv'
karena direferensikan dalam dokumentasi resmi Jenkins.Karya-karya berikut:
Perhatikan bahwa kemungkinan besar ini akan gagal pada eksekusi pertama dan mengharuskan Anda menyetujui berbagai metode menarik untuk dijalankan di jenkins sandbox. Ini dilakukan di "kelola jenkins / persetujuan skrip dalam proses"
Daftar yang saya sertakan:
sumber
java.lang.UnsupportedOperationException: each on a CPS-transformed closure is not yet supported
@NonCPS
?Anda dapat mencapai hasil dengan menggunakan
sh
/bat
step danreadFile
:Sayangnya
env.getEnvironment()
mengembalikan peta variabel lingkungan yang sangat terbatas.sumber
sh 'env > env.txt'
bekerja dengan baik dan menyertakan variabel lingkungan yang dibuat oleh proses shell.env.getEnvironment()
menunjukkan hanya variabel lingkungan himpunan Jenkins yang merupakan bagian dari yang terlihat dalamsh 'env'
teknik. Selain itu, diperlukan persetujuan keamanan skripmethod org.jenkinsci.plugins.workflow.support.actions.EnvironmentAction getEnvironment
. Theenv.each { name, value -> println "Name: $name -> Value $value" }
direkomendasikan oleh @Renato @Jayan hanya mencetakName: org.jenkinsci.plugins.workflow.cps.EnvActionImpl@45c2d1ee -> Value null
.Mengapa semua kerumitan ini?
melakukan apa yang Anda butuhkan (di bawah * nix)
sumber
Berikut skrip cepat yang dapat Anda tambahkan sebagai tugas pipeline untuk mencantumkan semua variabel lingkungan:
Ini akan mencantumkan variabel sistem dan Jenkins.
sumber
Cara lintas platform untuk mencantumkan semua variabel lingkungan:
sumber
Saya menggunakan plugin Blue Ocean dan tidak suka setiap entri lingkungan mendapatkan bloknya sendiri. Saya ingin satu blok dengan semua garis.
Mencetak dengan buruk:
Mencetak dengan buruk:
Mencetak dengan baik:
Mencetak dengan baik: (seperti yang disebutkan oleh @mjfroehlich)
sumber
Jawaban di atas, sekarang sudah kuno karena sintaks pipeline baru. Di bawah ini mencetak variabel lingkungan.
sumber
for
penutupan juga akan menyebabkan masalah tanpa@NonCPS
anotasi.The Groovy murni solusi yang membaca global
env
variabel tidak mencetak semua variabel lingkungan (misalnya mereka yang hilang variabel darienvironment
blok, dariwithEnv
konteks dan sebagian besar variabel mesin-spesifik dari OS). Menggunakan langkah-langkah shell dimungkinkan untuk mendapatkan set yang lebih lengkap, tetapi itu membutuhkannode
konteks, yang tidak selalu diinginkan.Berikut ini solusi yang menggunakan
getContext
langkah untuk mengambil dan mencetak set lengkap variabel lingkungan, termasuk parameter pipeline, untuk konteks saat ini.Peringatan: Tidak berfungsi di kotak pasir Groovy. Anda dapat menggunakannya dari perpustakaan bersama tepercaya.
sumber
jika Anda benar-benar ingin mengulang
env
daftar, lakukan saja:sumber
cara lain untuk mendapatkan hasil yang persis seperti yang disebutkan dalam pertanyaan:
Ini dapat dengan mudah diperluas untuk membuat peta dengan subset env vars yang cocok dengan kriteria:
sumber
Saya kira Anda memerlukannya dalam bentuk skrip, tetapi jika orang lain hanya ingin melihat GUI Jenkins, daftar itu dapat ditemukan dengan memilih bagian "Variabel Lingkungan" di menu kiri kontekstual setiap build Select project = > Pilih build => Variabel Lingkungan
sumber
Saya menemukan ini adalah cara termudah:
sumber
Anda bisa mendapatkan semua variabel dari instance jenkins Anda. Kunjungi saja:
sumber