Nggawe paramèter dinamis ing proyek Jenkins, utawa carane nggawe tugas pangguna-loropaken

Sugeng siang, Habr!

Dina iki aku pengin nuduhake salah sawijining cara kanggo nggunakake Plugin Pilihan Aktif nindakake tugas ing Jenkins paling manunggal lan pangguna-loropaken.

Pambuka

Singkatan kaya DevOps dudu barang anyar kanggo komunitas IT. Kanggo akeh wong, tembung "do DevOps" digandhengake karo sawetara jinis tombol sihir, nalika diklik, kode aplikasi kanthi otomatis dadi aplikasi sing disebarake lan diuji (kabeh bener luwih rumit, nanging kita abstrak saka kabeh proses).

Dadi, kita nampa pesenan kanggo nggawe tombol ajaib supaya pangurus bisa masang aplikasi kanthi siji klik. Ana macem-macem jinis implementasine tugas iki: saka nulis bot kanggo sembarang utusan cepet kanggo ngembangake aplikasi sing kapisah. Nanging, kabeh iki duwe tujuan sing padha - kanggo nggawe wiwitan lan panyebaran aplikasi kanthi transparan lan trep.

Ing kasus kita bakal nggunakake Jenkins.


Nggawe paramèter dinamis ing proyek Jenkins, utawa carane nggawe tugas pangguna-loropaken

Tujuan

Nggawe proyek Jenkins sing trep sing bakal miwiti mbangun lan (utawa) panyebaran layanan mikro sing dipilih saka versi tartamtu.

Nggawe paramèter dinamis ing proyek Jenkins, utawa carane nggawe tugas pangguna-loropaken

Input data

Kita duwe sawetara repositori sing ngemot kode sumber saka macem-macem layanan mikro.

Nemtokake paramèter

Parameter ing ngisor iki kudu ditampa minangka input kanggo proyek kita:

  1. URL repositori kanthi kode layanan mikro sing pengin dibangun lan disebarake nalika nggarap tugas kasebut.
  2. ID komit saka ngendi mbangun bakal kelakon.

AS IS

Cara paling gampang kanggo ngrampungake tugas iki yaiku nggawe rong paramèter jinis String.

Nggawe paramèter dinamis ing proyek Jenkins, utawa carane nggawe tugas pangguna-loropaken

Ing kasus iki, pangguna kudu ngetik path menyang gudang kanthi manual lan id commit, sing, sampeyan ndeleng, ora trep.

Nggawe paramèter dinamis ing proyek Jenkins, utawa carane nggawe tugas pangguna-loropaken

AS TO BE

Saiki ayo nyoba jinis paramèter liyane kanggo nimbang kabeh kaluwihan.
Ayo nggawe parameter pisanan kanthi jinis Parameter Pilihan, sing kapindho - Parameter Referensi Reaktif Pilihan Aktif. Ing parameter kanthi jinis Pilihan, kita bakal nambah kanthi manual ing lapangan Pilihan jeneng repositori ing ngendi kode layanan mikro kita disimpen.

Nggawe paramèter dinamis ing proyek Jenkins, utawa carane nggawe tugas pangguna-loropaken

Yen pamirsa seneng karo artikel iki, banjur ing artikel sabanjure aku bakal nerangake proses konfigurasi tugas ing Jenkins, nggunakake deskripsi liwat kode (Konfigurasi minangka kode), yaiku. kita ora perlu ngetik jeneng repositori kanthi manual lan nggawe paramèter, kabeh bakal kelakon kanthi otomatis (kode kita bakal nampa dhaptar repositori saka SCM lan nggawe parameter karo dhaptar iki).

Nilai-nilai paramèter kapindho bakal diisi kanthi dinamis, gumantung saka nilai apa sing ditindakake paramèter pisanan (test1 utawa test2), amarga saben repositori nduweni daftar komitmen dhewe.

Parameter Referensi Reaktif Pilihan Aktif nduweni kolom ing ngisor iki sing kudu diisi:

  1. jeneng - jeneng parameter.
  2. script - kode sing bakal dieksekusi saben-saben nilai parameter saka kolom Referenced parameter diganti (ing kasus kita, nalika kita milih antarane test1 lan test2).
  3. Description - gambaran singkat saka parameter.
  4. Tipe Pilihan – jinis obyek bali dening script (ing kasus kita bakal bali kode html).
  5. Parameter sing dirujuk - jeneng parameter, nalika nilai sing diganti, kode saka bagean Script bakal dieksekusi.

Nggawe paramèter dinamis ing proyek Jenkins, utawa carane nggawe tugas pangguna-loropaken

Ayo langsung ngisi kolom sing paling penting ing parameter iki. We sing ana rong jinis implementasine kanggo milih saka: nggunakake Skrip Groovy utawa Scriptler Script.
Kita milih sing pisanan, amarga Scriptler mung plugin sing nyimpen skrip sing wis ditulis sadurunge lan ngidini sampeyan nggunakake ing tugas liyane tanpa nyalin-tempel maneh.

Kode Groovy kanggo entuk kabeh komit saka repositori sing 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 nerangake rincian, kode iki nampa jeneng layanan mikro (MICROSERVICE_NAME) minangka input lan ngirim panjalukan menyang Bitbucket (metode getCommitsForMicroservice) nggunakake API, lan entuk pesen id lan komitmen kabeh komitmen kanggo layanan mikro sing diwenehake.
Kaya sing wis kasebut sadurunge, kode iki kudu ngasilake html sing bakal ditampilake ing kaca kasebut Mbangun karo Parameter ing Jenkins, supaya kita mbungkus kabeh nilai sing ditampa saka Bitbucket ing dhaptar lan ditambahake kanggo dipilih.

Sawise ngrampungake kabeh langkah, kita kudu entuk kaca sing apik banget Mbangun karo Parameter.

Yen sampeyan milih microservice test1:

Nggawe paramèter dinamis ing proyek Jenkins, utawa carane nggawe tugas pangguna-loropaken

Yen sampeyan milih microservice test2:

Nggawe paramèter dinamis ing proyek Jenkins, utawa carane nggawe tugas pangguna-loropaken

Setuju manawa pangguna bakal luwih gampang sesambungan karo tugas sampeyan kanthi cara iki tinimbang nyalin url saben wektu lan nggoleki id komitmen sing dibutuhake.

PS Artikel iki nyedhiyakake conto sing gampang banget, sing bisa uga ora bisa digunakake kanthi praktis ing wangun iki, amarga majelis duwe akeh paramèter sing beda-beda, nanging tujuane artikel iki kanggo nuduhake cara alat kasebut, ora kanggo menehi solusi sing bisa digunakake.

PSS Kaya sing dakcritakake sadurunge, yen artikel iki migunani, sabanjure bakal dadi babagan konfigurasi dinamis tugas Jenkins liwat kode.

Source: www.habr.com

Add a comment