Nyieun parameter dinamis dina pakasaban Jenkins, atawa kumaha carana sangkan tugas anjeun ramah-pamaké

Wilujeng siang, Habr!

Dinten ieu abdi hoyong bagikeun salah sahiji cara ngagunakeun Pilihan Active Plugin ngalakukeun tugas di Jenkins paling ngahiji jeung ramah-pamaké.

perkenalan

Singketan sapertos DevOps henteu deui énggal pikeun komunitas IT. Pikeun seueur jalma, frasa "ngalakukeun DevOps" dikaitkeun sareng sababaraha jinis tombol sihir, nalika diklik, kode aplikasi sacara otomatis janten aplikasi anu disebarkeun sareng diuji (sadayana saleresna langkung rumit, tapi urang abstrak tina sadaya prosés).

Janten, kami nampi pesenan pikeun ngadamel tombol ajaib sapertos kitu ku kituna pangurus tiasa nyebarkeun aplikasi sareng hiji klik. Aya sababaraha jinis palaksanaan tugas ieu: ti nulis bot pikeun salah sahiji utusan instan pikeun ngembangkeun aplikasi anu misah. Tapi, sadayana ieu ngagaduhan tujuan anu sami - pikeun ngamimitian ngawangun sareng panyebaran aplikasi salaku transparan sareng merenah-gancang.

Dina hal urang urang bakal ngagunakeun Jenkins.


Nyieun parameter dinamis dina pakasaban Jenkins, atawa kumaha carana sangkan tugas anjeun ramah-pamaké

tugas

Jieun pakasaban Jenkins merenah anu bakal ngajalankeun ngawangun sarta (atawa) deployment tina microservice dipilih tina versi nu tangtu.

Nyieun parameter dinamis dina pakasaban Jenkins, atawa kumaha carana sangkan tugas anjeun ramah-pamaké

Input data

Kami ngagaduhan sababaraha repositori anu ngandung kode sumber tina sababaraha jasa mikro.

Nangtukeun parameter

Parameter di handap ieu kedah ditampi salaku input pikeun padamelan urang:

  1. URL gudang kalayan kode microservice anu urang hoyong ngawangun sareng nyebarkeun nalika ngajalankeun padamelan.
  2. ID tina komitmen ti mana ngawangun bakal lumangsung.

AS IS

Cara panggampangna pikeun ngalengkepan tugas ieu nyaéta nyieun dua parameter tina tipe String.

Nyieun parameter dinamis dina pakasaban Jenkins, atawa kumaha carana sangkan tugas anjeun ramah-pamaké

Dina hal ieu, pangguna kedah sacara manual ngalebetkeun jalur ka Repository sareng commit id, anu, anjeun tingali, henteu saé pisan.

Nyieun parameter dinamis dina pakasaban Jenkins, atawa kumaha carana sangkan tugas anjeun ramah-pamaké

AS TO BE

Ayeuna hayu urang coba tipe séjén parameter mertimbangkeun sagala kaunggulan na.
Hayu urang nyieun parameter kahiji kalayan tipe Pilihan Parameter, kadua - Active Pilihan Reactive Reference Parameter. Dina parameter sareng jinis Pilihan, urang sacara manual bakal nambihan dina widang Pilihan nami repositori dimana kodeu microservices kami disimpen.

Nyieun parameter dinamis dina pakasaban Jenkins, atawa kumaha carana sangkan tugas anjeun ramah-pamaké

Upami pamiarsa resep kana tulisan ieu, maka dina tulisan salajengna kuring bakal ngajelaskeun prosés ngonpigurasikeun tugas di Jenkins, nganggo pedaran ngaliwatan kode (Konfigurasi salaku kode), nyaéta. kami henteu kedah sacara manual ngalebetkeun nami gudang sareng nyiptakeun parameter, sadayana bakal otomatis lumangsung (kode kami bakal nampi daptar repositori ti SCM sareng nyiptakeun parameter sareng daptar ieu).

Nilai-nilai parameter kadua bakal dieusi sacara dinamis, gumantung kana nilai naon anu dicandak ku parameter kahiji (test1 atanapi test2), sabab unggal gudang gaduh daptar commits sorangan.

Pilihan Aktif Parameter Rujukan Réaktif boga widang di handap pikeun ngeusian:

  1. nami - ngaran parameter.
  2. naskah - kode anu bakal dieksekusi unggal waktos nilai parameter tina widang parameter Referenced dirobah (dina hal urang, nalika urang milih antara test1 na test2).
  3. gambaran - pedaran ringkes parameter.
  4. Jenis Pilihan - jinis obyék anu dipulangkeun ku naskah (bisi kami bakal uih deui kode html).
  5. Parameter anu dirujuk - nami parameter, nalika nilaina dirobih, kodeu tina bagian Skrip bakal dieksekusi.

Nyieun parameter dinamis dina pakasaban Jenkins, atawa kumaha carana sangkan tugas anjeun ramah-pamaké

Hayu urang neruskeun langsung ka ngeusian kaluar widang pangpentingna dina parameter ieu. Kami ditawarkeun dua jinis palaksanaan pikeun milih: ngagunakeun Skrip Groovy atawa Scriptler Script.
Urang milih kahiji, saprak Scriptler téh ngan hiji plugin nu ngaheéat Aksara nu saméméhna geus ditulis tur ngidinan Anjeun pikeun make eta dina tugas séjén tanpa salinan-témpél deui.

Kode Groovy pikeun kéngingkeun sadaya komitmen tina gudang anu 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 ngintip rinci, kode ieu nampi nami microservice (MICROSERVICE_NAME) salaku input sareng ngirim pamundut ka Bitbucket (metode getCommitsForMicroservice) ngagunakeun API na, sarta meunang id sarta commit pesen sadaya commits pikeun microservice dibikeun.
Salaku disebutkeun tadi, kode ieu kudu balik html nu bakal dipintonkeun dina kaca Ngawangun sareng Parameter di Jenkins, janten urang mungkus sadayana nilai anu ditampi tina Bitbucket dina daptar sareng tambahkeun pikeun milih.

Saatos ngalengkepan sadaya léngkah, urang kedah nampi halaman anu saé sapertos kitu Ngawangun sareng Parameter.

Lamun anjeun milih test1 microservice:

Nyieun parameter dinamis dina pakasaban Jenkins, atawa kumaha carana sangkan tugas anjeun ramah-pamaké

Lamun anjeun milih test2 microservice:

Nyieun parameter dinamis dina pakasaban Jenkins, atawa kumaha carana sangkan tugas anjeun ramah-pamaké

Satuju yén éta bakal langkung gampang pikeun pangguna pikeun berinteraksi sareng tugas anjeun ku cara kieu tibatan nyalin url unggal waktos sareng milarian id komitmen anu diperyogikeun.

PS Artikel ieu nyadiakeun conto pisan saderhana, nu bisa jadi teu bisa dipake praktis dina formulir ieu, saprak majelis boga leuwih loba parameter béda, tapi tujuan artikel ieu pikeun nembongkeun kumaha alat jalan, teu nyadiakeun solusi jalan.

PSS Salaku I wrote saméméhna, lamun artikel ieu mangpaat, lajeng hiji salajengna bakal ngeunaan динамическое конфигурирование задач Jenkins посредством кода.

sumber: www.habr.com

Tambahkeun komentar