Saya memiliki dua pekerjaan di jenkins, keduanya membutuhkan parameter yang sama.
Bagaimana cara menjalankan pekerjaan pertama dengan parameter sehingga ketika memicu pekerjaan kedua, parameter yang sama digunakan?
Saya memiliki dua pekerjaan di jenkins, keduanya membutuhkan parameter yang sama.
Bagaimana cara menjalankan pekerjaan pertama dengan parameter sehingga ketika memicu pekerjaan kedua, parameter yang sama digunakan?
Jawaban:
Anda dapat menggunakan Plugin Parameterized Trigger yang memungkinkan Anda meneruskan parameter dari satu tugas ke tugas lainnya.
Anda juga perlu menambahkan parameter yang Anda teruskan dari upstream ke downstream.
1. Tindakan Pasca-Bangun> Pilih "Picu build berparameter pada proyek lain"
2. Masukkan variabel lingkungan dengan value.Nilai juga bisa berupa Parameter Build Jenkins.
Langkah-langkah rinci dapat dilihat di sini: -
Semoga bermanfaat :)
The jawaban yang diterima di sini tidak bekerja untuk kasus penggunaan saya. Saya harus mampu membuat parameter secara dinamis dalam satu pekerjaan dan meneruskannya ke pekerjaan lain. Seperti yang disebutkan Mark McKenna, sepertinya tidak ada cara untuk mengekspor variabel dari langkah build shell ke tindakan post build.
Saya mencapai solusi menggunakan Plugin Parameterized Trigger dengan menulis nilai ke file dan menggunakan file itu sebagai parameter untuk diimpor melalui 'Add post-build action' -> 'Trigger parameterized build ...' lalu pilih 'Add Parameters' - > 'Parameter dari file properti'.
Saya pikir jawaban di atas perlu beberapa pembaruan:
Saya mencoba membuat direktori dinamis untuk menyimpan artefak build upstream saya, jadi saya ingin meneruskan nomor build pekerjaan upstream saya ke pekerjaan downstream. Saya mencoba langkah-langkah di atas tetapi tidak dapat membuatnya berfungsi. Begini cara kerjanya:
Ini karena versi baru jenkins mengharuskan Anda untuk menentukan variabel di tugas hilir juga. Saya harap ini membantu.
(untuk sesama karyawan Google)
Jika Anda membangun pipeline yang serius dengan Build Flow Plugin , Anda dapat meneruskan parameter antara pekerjaan dengan DSL seperti ini:
Misalkan tersedia parameter string "CVS_TAG", untuk meneruskannya ke pekerjaan lain:
build("pipeline_begin", CVS_TAG: params['CVS_TAG'])
parallel (
// will be scheduled in parallel.
{ build("pipeline_static_analysis", CVS_TAG: params['CVS_TAG']) },
{ build("pipeline_nonreg", CVS_TAG: params['CVS_TAG']) }
)
// will be triggered after previous jobs complete
build("pipeline_end", CVS_TAG: params['CVS_TAG'])
Petunjuk untuk menampilkan variabel / params yang tersedia:
// output values
out.println '------------------------------------'
out.println 'Triggered Parameters Map:'
out.println params
out.println '------------------------------------'
out.println 'Build Object Properties:'
build.properties.each { out.println "$it.key -> $it.value" }
out.println '------------------------------------'
Cukup tambahkan jawaban saya selain Nigel Kirby karena saya belum bisa berkomentar:
Untuk meneruskan parameter yang dibuat secara dinamis, Anda juga dapat mengekspor variabel dalam ubin 'Execute Shell' dan kemudian meneruskannya melalui 'Trigger parameterized build on other projects' => 'Predefined parameter "=> berikan' YOUR_VAR = $ YOUR_VAR '. Tim saya menggunakan fitur ini untuk meneruskan versi paket npm dari pekerjaan pembuatan ke pekerjaan penerapan
UPDATE: di atas hanya berfungsi untuk parameter yang diinjeksi Jenkins, parameter yang dibuat dari shell masih perlu menggunakan metode yang sama. misalnya. echo YOUR_VAR = $ {YOUR_VAR}> variable.properties dan meneruskan file itu ke hilir
Saya menghadapi masalah yang sama ketika saya harus meneruskan versi pom ke pekerjaan Rundeck hilir.
Apa yang saya lakukan, menggunakan injeksi parameter melalui file properti seperti:
1) Membuat properti di file properti melalui shell:
Bangun tindakan:
Misalnya: definisi properti
2) Meneruskan properti yang ditentukan ke pekerjaan downstream: Tindakan Pasca Build:
Misalnya: pengiriman properti
3) Kemudian mungkin untuk menggunakan $ POM_VERSION seperti itu dalam tugas Rundeck hilir.
/! \ Jenkins Versi: 1.636
/! \ Untuk beberapa alasan saat membuat build yang dipicu, perlu untuk menambahkan opsi 'Parameter build saat ini' untuk meneruskan properti.
Membaca jawabannya, saya tidak melihat opsi lain yang saya suka sehingga saya juga akan menawarkannya. Saya suka parameterisasi pekerjaan, tetapi tidak selalu berskala baik. Jika Anda memiliki pekerjaan yang tidak langsung di bagian hilir dari pekerjaan pertama tetapi lebih jauh di dalam pipeline, Anda tidak benar-benar ingin membuat parameterisasi setiap pekerjaan di pipeline agar dapat meneruskan parameter sepenuhnya. Atau jika Anda memiliki sejumlah besar parameter yang digunakan oleh berbagai pekerjaan lain (terutama yang tidak harus terkait dengan satu pekerjaan induk atau master), sekali lagi parameterisasi tidak berfungsi.
Dalam kasus ini, saya lebih suka mengeluarkan nilai ke file properti dan kemudian memasukkannya ke dalam pekerjaan apa pun yang saya butuhkan menggunakan plugin EnvInject . Ini dapat dilakukan secara dinamis, yang merupakan cara lain untuk menyelesaikan masalah dari jawaban lain di atas di mana pekerjaan berparameter masih digunakan. Solusi ini berskala sangat baik dalam banyak skenario.
Anda dapat menggunakan pembuat Hudson Groovy untuk melakukan ini.
Pekerjaan Pertama di dalam pipa
Pekerjaan kedua di jalur pipa
Saya menemukan jawabannya!
Dengan trial and error hampir 2 jam, saya menemukan jawabannya.
Ini BEKERJA dan apa yang Anda lakukan untuk meneruskan variabel ke pekerjaan jarak jauh:
def handle = triggerRemoteJob(remoteJenkinsName: 'remoteJenkins', job: 'RemoteJob' paramters: "param1=${env.PARAM1}\nparam2=${env.param2}")
Gunakan \ n untuk memisahkan dua parameter, tanpa spasi ..
Berbeda dengan parameter: '' 'someparams' ''
kami menggunakan parameter: "someparams"
"..." inilah yang memberi kita nilai variabel yang diinginkan. (Ini adalah tanda kutip ganda, bukan dua tanda kutip tunggal)
'' '...' '' atau '...' tidak akan memberi kita nilai-nilai itu. (Tiga tanda kutip tunggal atau hanya satu tanda kutip)
Semua parameter di sini didefinisikan dalam blok {} lingkungan pada awal pipeline dan dimodifikasi dalam tahapan> langkah> skrip jika diperlukan.
Saya juga menguji dan menemukan bahwa ketika Anda menggunakan "..." Anda tidak dapat menggunakan sesuatu seperti '' '... "..."' '' atau "... '..'..." atau kombinasi dari Itu...
Tangkapannya di sini adalah bahwa ketika Anda menggunakan "..." di bagian parameter, Anda tidak dapat mengirimkan parameter string; misalnya Ini TIDAK AKAN BEKERJA:
def handle = triggerRemoteJob(remoteJenkinsName: 'remoteJenkins', job: 'RemoteJob' paramters: "param1=${env.PARAM1}\nparam2='param2'")
jika Anda ingin meneruskan sesuatu seperti di atas, Anda perlu menyetel variabel lingkungan param2 = 'param2' dan kemudian menggunakan $ {env.param2} di bagian parameter langkah plugin pemicu jarak jauh