Selamat siang, Habr !
Hari ini saya ingin membagikan salah satu cara bagaimana menggunakan Plugin Pilihan Aktif untuk menjadikan tugas di Jenkins yang paling terpadu dan mudah dipahami oleh pengguna.
Pendahuluan
Singkatan seperti DevOps bukan lagi sesuatu yang baru untuk komunitas TI. Bagi banyak orang, frasa “make DevOps” dikaitkan dengan semacam tombol ajaib, ketika Anda mengkliknya, kode aplikasi secara otomatis berubah menjadi aplikasi yang digunakan dan diuji (semuanya sebenarnya lebih rumit, tapi kami abstrak dari semua proses).
Jadi, kami menerima pesanan untuk membuat tombol ajaib sehingga administrator dapat menggunakan aplikasi dengan satu klik. Ada berbagai jenis implementasi dari tugas ini: dari menulis bot untuk semua messenger hingga mengembangkan aplikasi terpisah. Namun demikian, tujuan dari semua ini adalah sama - untuk membuat peluncuran perakitan dan penerapan aplikasi yang paling transparan dan nyaman.
Dalam kasus kami, kami akan menggunakan Jenkins .
Tantangan
Buat pekerjaan Jenkins yang nyaman yang akan menjalankan perakitan dan / atau penyebaran layanan Microsoft yang dipilih dari versi tertentu.
Masukkan data
Kami memiliki beberapa repositori yang berisi kode sumber berbagai layanan microser.
Definisi Parameter
Parameter berikut harus memasukkan input dari pekerjaan kami:
- URL repositori dengan kode layanan mikro yang ingin kami kumpulkan dan terapkan saat memulai pekerjaan.
- ID komit dari mana majelis akan berlangsung.
APA SAJA
Cara termudah untuk menyelesaikan tugas adalah membuat dua parameter tipe String.
Dalam hal ini, pengguna harus memasukkan path secara manual ke repositori dan melakukan id, yang, Anda lihat, tidak sepenuhnya nyaman.
SEPERTI APA SAJA
Sekarang mari kita coba berbagai jenis parameter untuk mempertimbangkan semua kelebihannya.
Buat parameter pertama dari jenis Parameter Pilihan, yang kedua - Pilihan Aktif Parameter Referensi Reaktif. Dalam parameter dengan tipe Pilihan, kami akan secara manual menambahkan nama-nama repositori di mana kode layanan microser kami disimpan di bidang Pilihan.
Jika audiens menyukai artikel ini, maka pada artikel selanjutnya saya akan menjelaskan proses mengonfigurasi tugas di Jenkins menggunakan deskripsi melalui kode (Konfigurasi sebagai kode), yaitu kita tidak perlu memasukkan nama repositori secara manual dan membuat parameter, semuanya akan terjadi secara otomatis (kode kita akan menerima daftar repositori dari SCM dan membuat parameter dengan daftar ini).
Nilai-nilai dari parameter kedua akan diisi secara dinamis dengan kami, tergantung pada nilai apa yang akan diambil oleh parameter pertama (test1 atau test2), karena setiap repositori memiliki daftar komit sendiri.
Pilihan Aktif Parameter Referensi Reaktif memiliki bidang-bidang berikut untuk diisi:
- Nama - nama parameter.
- Script - kode yang akan dieksekusi setiap kali nilai parameter dari bidang Parameter yang direferensikan diubah (dalam kasus kami, ketika kami memilih antara test1 dan test2).
- Deskripsi - deskripsi singkat tentang parameter.
- Jenis Pilihan - jenis objek yang dikembalikan oleh skrip (dalam kasus kami, kami akan mengembalikan kode html).
- Parameter yang direferensikan - nama parameter, ketika mengubah nilai kode dari bagian Script akan dieksekusi.
Kami melanjutkan langsung ke pengisian bidang utama dalam parameter ini. Kami menawarkan dua jenis implementasi untuk dipilih: menggunakan Script Groovy atau Scriptler Script .
Kami memilih yang pertama, karena Scriptler hanyalah sebuah plugin yang menyimpan skrip yang sudah Anda tulis dan memungkinkan Anda untuk menggunakannya dalam tugas-tugas lain tanpa harus menyalin lagi.
Kode Groovy untuk mendapatkan semua komit dari repositori yang dipilih:
AUTH = " Base64" GIT_URL = "url SCM (https://bitbucket.org/)" PROJECT_NAME = " , " def htmlBuild() { html = """ <html> <head> <meta charset="windows-1251"> <style type="text/css"> div.grayTable { text-align: left; border-collapse: collapse; } .divTable.grayTable .divTableCell, .divTable.grayTable .divTableHead { padding: 0px 3px; } .divTable.grayTable .divTableBody .divTableCell { font-size: 13px; } </style> </head> <body> """ def commitOptions = "" getCommitsForMicroservice(MICROSERVICE_NAME).each { commitOptions += "<option style='font-style: italic' value='COMMIT=${it.getKey()}'>${it}</option>" } html += """<p style="display: inline-block;"> <select id="commit_id" size="1" name="value"> ${commitOptions} </select></p></div>""" html += """ </div> </div> </div> </body> </html> """ return html } def getCommitsForMicroservice(microserviceRepo) { def commits = [:] def endpoint = GIT_URL + "/rest/api/1.0/projects/${PROJECT_NAME}/repos/${microserviceRepo}/commits" def conn = new URL(endpoint).openConnection() conn.setRequestProperty("Authorization", "Basic ${AUTH}") def response = new groovy.json.JsonSlurper().parseText(conn.content.text) response.values.each { commits.put(it.displayId, it.message) } return commits } return htmlBuild()
Tanpa merinci, kode ini menerima nama layanan mikro (MICROSERVICE_NAME) sebagai input, mengirimkan permintaan ke Bitbucket (metode getCommitsForMicroservice ) menggunakan API-nya, dan menerima id dan komit semua komit untuk layanan microservice ini.
Seperti yang disebutkan sebelumnya, kode ini harus mengembalikan html yang akan ditampilkan pada halaman Build with Parameters di Jenkins, jadi kami membungkus semua nilai yang diterima dari Bitbucket dalam daftar dan menambahkan untuk memilih.
Setelah menyelesaikan semua langkah, kita harus mendapatkan halaman Build with Parameters yang indah .
Jika Anda memilih microservice test1:
Jika Anda memilih microservice test2:
Setuju bahwa akan lebih nyaman bagi pengguna untuk berinteraksi dengan tugas Anda dengan cara ini daripada menyalin url setiap kali dan mencari id komit yang diperlukan.
PS Artikel ini memberikan contoh yang sangat sederhana, yang mungkin tidak memiliki aplikasi praktis dalam formulir ini, karena majelis memiliki parameter yang jauh lebih berbeda, tetapi tujuan artikel ini adalah untuk menunjukkan operasi alat dan tidak menyediakan solusi yang berfungsi.
PSS Seperti yang saya tulis sebelumnya, jika artikel ini bermanfaat, yang berikutnya adalah tentang mengkonfigurasi tugas Jenkins secara dinamis menggunakan kode .