Membuat parameter dinamis dalam pekerjaan Jenkins, atau cara membuat tugas Anda mudah digunakan

Selamat tinggal, Habr!

Hari ini saya ingin membagikan salah satu cara penggunaannya Plugin Pilihan Aktif mengerjakan tugas di Jenkins yang paling terpadu dan ramah pengguna.

pengenalan

Singkatan DevOps bukan lagi hal baru bagi komunitas IT. Bagi banyak orang, frasa β€œlakukan DevOps” dikaitkan dengan semacam tombol ajaib, ketika diklik, kode aplikasi secara otomatis berubah menjadi aplikasi yang diterapkan dan diuji (sebenarnya semuanya lebih rumit, tetapi kami mengabstraksi dari semua proses).

Jadi, kami menerima perintah untuk membuat tombol ajaib sehingga administrator dapat menyebarkan aplikasi dengan satu klik. Ada berbagai jenis implementasi tugas ini: mulai dari menulis bot untuk pesan instan mana pun hingga mengembangkan aplikasi terpisah. Namun demikian, semua ini memiliki tujuan yang sama - untuk membuat permulaan pembuatan dan penerapan aplikasi setransparan dan senyaman mungkin.

Dalam kasus kami, kami akan menggunakan Jenkins.


Membuat parameter dinamis dalam pekerjaan Jenkins, atau cara membuat tugas Anda mudah digunakan

Tugas

Buat pekerjaan Jenkins yang nyaman yang akan meluncurkan pembangunan dan (atau) penerapan layanan mikro yang dipilih dari versi tertentu.

Membuat parameter dinamis dalam pekerjaan Jenkins, atau cara membuat tugas Anda mudah digunakan

Memasukan data

Kami memiliki beberapa repositori yang berisi kode sumber berbagai layanan mikro.

Mendefinisikan parameter

Parameter berikut harus diterima sebagai masukan untuk pekerjaan kita:

  1. URL repositori dengan kode layanan mikro yang ingin kita buat dan terapkan saat menjalankan pekerjaan.
  2. ID komit tempat pembangunan akan dilakukan.

DENGAN ADANYA

Cara termudah untuk menyelesaikan tugas ini adalah dengan membuat dua parameter bertipe String.

Membuat parameter dinamis dalam pekerjaan Jenkins, atau cara membuat tugas Anda mudah digunakan

Dalam hal ini, pengguna harus memasukkan jalur ke repositori dan id komit secara manual, yang, menurut Anda, sangat tidak nyaman.

Membuat parameter dinamis dalam pekerjaan Jenkins, atau cara membuat tugas Anda mudah digunakan

SEPERTI MENJADI

Sekarang mari kita coba jenis parameter lain untuk mempertimbangkan semua kelebihannya.
Mari kita buat parameter pertama dengan tipe Parameter Pilihan, yang kedua - Parameter Referensi Reaktif Pilihan Aktif. Pada parameter dengan tipe Pilihan, kami akan menambahkan secara manual di bidang Pilihan nama repositori tempat kode layanan mikro kami disimpan.

Membuat parameter dinamis dalam pekerjaan Jenkins, atau cara membuat tugas Anda mudah digunakan

Jika audiens menyukai artikel ini, maka pada artikel berikutnya saya akan menjelaskan proses konfigurasi tugas di Jenkins, menggunakan deskripsi melalui kode (Configuration as code), 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 parameter kedua akan diisi secara dinamis, bergantung pada nilai parameter pertama (test1 atau test2), karena setiap repositori memiliki daftar komitnya sendiri.

Parameter Referensi Reaktif Pilihan Aktif memiliki kolom berikut untuk diisi:

  1. Nama – nama parameter.
  2. Naskah – kode yang akan dieksekusi setiap kali nilai parameter dari kolom Parameter yang direferensikan diubah (dalam kasus kita, ketika kita memilih antara test1 dan test2).
  3. Deskripsi Produk – deskripsi singkat tentang parameter.
  4. Jenis Pilihan – tipe objek yang dikembalikan oleh skrip (dalam kasus kami, kami akan mengembalikan kode html).
  5. Parameter yang direferensikan – nama parameter, ketika nilainya diubah, kode dari bagian Script akan dieksekusi.

Membuat parameter dinamis dalam pekerjaan Jenkins, atau cara membuat tugas Anda mudah digunakan

Mari kita lanjutkan langsung mengisi kolom terpenting dalam parameter ini. Kami ditawari dua jenis implementasi untuk dipilih: menggunakan Skrip Groovy ΠΈΠ»ΠΈ Skrip Penulis.
Kami memilih yang pertama, karena Scriptler hanyalah sebuah plugin yang menyimpan skrip yang telah Anda tulis sebelumnya dan memungkinkan Anda menggunakannya dalam tugas lain tanpa menyalin-menempel lagi.

Kode asyik untuk mendapatkan semua komitmen 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 lebih lanjut, kode ini menerima nama layanan mikro (MICROSERVICE_NAME) sebagai masukan dan mengirimkan permintaan ke Bitbucket (metode getCommitsForMicroservice) menggunakan API-nya, dan mendapatkan pesan id dan komit dari semua komit untuk layanan mikro tertentu.
Seperti disebutkan sebelumnya, kode ini harus mengembalikan html yang akan ditampilkan pada halaman Bangun dengan Parameter di Jenkins, jadi kami menggabungkan semua nilai yang diterima dari Bitbucket ke dalam daftar dan menambahkannya untuk dipilih.

Setelah menyelesaikan semua langkah, kita akan mendapatkan halaman yang indah Bangun dengan Parameter.

Jika Anda memilih layanan mikro test1:

Membuat parameter dinamis dalam pekerjaan Jenkins, atau cara membuat tugas Anda mudah digunakan

Jika Anda memilih layanan mikro test2:

Membuat parameter dinamis dalam pekerjaan Jenkins, atau cara membuat tugas Anda mudah digunakan

Setuju bahwa akan lebih nyaman bagi pengguna untuk berinteraksi dengan tugas Anda dengan cara ini daripada menyalin url setiap saat dan mencari id komit yang diperlukan.

PS Artikel ini memberikan contoh yang sangat sederhana, yang mungkin tidak berguna secara praktis dalam bentuk ini, karena rakitan memiliki lebih banyak parameter berbeda, namun tujuan artikel ini adalah untuk menunjukkan cara kerja alat, bukan untuk memberikan solusi yang berfungsi.

PSS Seperti yang saya tulis sebelumnya, jika artikel ini bermanfaat, maka artikel selanjutnya akan membahasnya konfigurasi dinamis tugas Jenkins melalui kode.

Sumber: www.habr.com

Tambah komentar