Jenkins ishida dinamik parametrlarni yaratish yoki vazifangizni qanday qilib foydalanuvchilarga qulay qilish

Xayrli kun, Habr!

Bugun men foydalanish usullaridan birini baham ko'rmoqchiman Faol tanlov plagini ichida vazifani bajaring Jenkins eng birlashtirilgan va foydalanuvchi uchun qulay.

kirish

DevOps kabi qisqartma endi IT hamjamiyati uchun yangilik emas. Ko'p odamlar uchun "DevOps qilish" iborasi qandaydir sehrli tugma bilan bog'liq bo'lib, uni bosgandan so'ng, dastur kodi avtomatik ravishda joylashtirilgan va sinovdan o'tgan dasturga aylanadi (aslida hamma narsa murakkabroq, lekin biz barcha jarayonlardan abstrakt qilamiz).

Shunday qilib, biz ma'murlar dasturni bir marta bosish bilan o'rnatishlari uchun shunday sehrli tugmani yaratishga buyurtma oldik. Ushbu vazifani amalga oshirishning turli xil turlari mavjud: har qanday messenjer uchun bot yozishdan alohida dastur ishlab chiqishgacha. Shunga qaramay, bularning barchasi bir xil maqsadga ega - dasturni yaratish va joylashtirishni iloji boricha shaffof va qulay qilish.

Bizning holatlarimizda biz foydalanamiz Jenkins.


Jenkins ishida dinamik parametrlarni yaratish yoki vazifangizni qanday qilib foydalanuvchilarga qulay qilish

Maqsad

Muayyan versiyaning tanlangan mikroservislarini yaratish va (yoki) joylashtirishni boshlaydigan qulay Jenkins ishini yarating.

Jenkins ishida dinamik parametrlarni yaratish yoki vazifangizni qanday qilib foydalanuvchilarga qulay qilish

Ma'lumotlarni kiritish

Bizda turli mikroservislarning manba kodlarini o'z ichiga olgan bir nechta omborlar mavjud.

Parametrlarni aniqlash

Bizning ishimizga kirish sifatida quyidagi parametrlar olinishi kerak:

  1. Ishni bajarayotganda biz yaratmoqchi bo'lgan va o'rnatmoqchi bo'lgan mikroservis kodi bilan omborning URL manzili.
  2. Qurilish amalga oshiriladigan majburiyatning identifikatori.

SHUNDAYKI

Ushbu vazifani bajarishning eng oson yo'li String tipidagi ikkita parametrni yaratishdir.

Jenkins ishida dinamik parametrlarni yaratish yoki vazifangizni qanday qilib foydalanuvchilarga qulay qilish

Bunday holda, foydalanuvchi omborga yo'lni va majburiyat identifikatorini qo'lda kiritishi kerak bo'ladi, siz ko'rib turganingizdek, bu mutlaqo qulay emas.

Jenkins ishida dinamik parametrlarni yaratish yoki vazifangizni qanday qilib foydalanuvchilarga qulay qilish

BO'LADI

Endi uning barcha afzalliklarini ko'rib chiqish uchun boshqa turdagi parametrlarni sinab ko'raylik.
Birinchi parametrni Choice Parameter turi bilan yaratamiz, ikkinchisi - Active Choices Reactive Reference Parameter. Tanlov turiga ega parametrda biz Tanlovlar maydoniga mikroxizmatlarimiz kodi saqlanadigan omborlar nomlarini qo'lda qo'shamiz.

Jenkins ishida dinamik parametrlarni yaratish yoki vazifangizni qanday qilib foydalanuvchilarga qulay qilish

Agar tomoshabinlar ushbu maqolani yoqtirsa, keyingi maqolada men Jenkins-da vazifalarni sozlash jarayonini tasvirlab beraman, kod orqali tavsif (Kod sifatida konfiguratsiya), ya'ni. biz ombor nomlarini qo'lda kiritishimiz va parametrlarni yaratishimiz shart emas, hamma narsa avtomatik ravishda sodir bo'ladi (bizning kodimiz SCM dan omborlar ro'yxatini oladi va ushbu ro'yxat bilan parametr yaratadi).

Ikkinchi parametrning qiymatlari birinchi parametr qanday qiymatga ega bo'lishiga qarab dinamik ravishda to'ldiriladi (test1 yoki test2), chunki har bir omborda o'z majburiyatlari ro'yxati mavjud.

Faol tanlovlar Reaktiv mos yozuvlar parametri to'ldirish uchun quyidagi maydonlar mavjud:

  1. Ism - parametr nomi.
  2. stsenariy – Referenced parametr maydonidagi parametr qiymati har safar o‘zgartirilganda bajariladigan kod (bizning holatda test1 va test2 o‘rtasida tanlov qilganimizda).
  3. Tavsif - parametrning qisqacha tavsifi.
  4. Tanlov turi - skript tomonidan qaytarilgan ob'ekt turi (bizning holatlarimizda biz html kodini qaytaramiz).
  5. Havola qilingan parametr – parametr nomi, uning qiymati o‘zgartirilganda skript bo‘limidagi kod bajariladi.

Jenkins ishida dinamik parametrlarni yaratish yoki vazifangizni qanday qilib foydalanuvchilarga qulay qilish

Keling, to'g'ridan-to'g'ri ushbu parametrdagi eng muhim maydonni to'ldirishga o'tamiz. Bizga ikkita dastur turini tanlash taklif etiladi: foydalanish Groovy stsenariysi yoki Skript skripti.
Biz birinchisini tanlaymiz, chunki Scriptler - bu siz avval yozgan skriptlarni saqlaydigan plagin bo'lib, ularni qaytadan nusxa ko'chirmasdan boshqa vazifalarda ishlatishga imkon beradi.

Tanlangan ombordan barcha majburiyatlarni olish uchun ajoyib kod:

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()

Tafsilotlarga kirmasdan, bu kod kirish sifatida mikroxizmat nomini (MICROSERVICE_NAME) oladi va so‘rov yuboradi. Bitbaqa (usul getCommitsForMicroservice) o'zining API-dan foydalanib, ma'lum mikroservis uchun barcha majburiyatlarning identifikatori va xabarini oladi.
Yuqorida aytib o'tilganidek, ushbu kod sahifada ko'rsatiladigan html-ni qaytarishi kerak Parametrlar bilan tuzing Jenkins-da, shuning uchun biz Bitbucket-dan olingan barcha qiymatlarni ro'yxatga kiritamiz va ularni tanlash uchun qo'shamiz.

Barcha bosqichlarni bajarganimizdan so'ng, biz shunday chiroyli sahifaga ega bo'lishimiz kerak Parametrlar bilan tuzing.

Agar siz test1 mikroxizmatini tanlagan bo'lsangiz:

Jenkins ishida dinamik parametrlarni yaratish yoki vazifangizni qanday qilib foydalanuvchilarga qulay qilish

Agar siz test2 mikroxizmatini tanlagan bo'lsangiz:

Jenkins ishida dinamik parametrlarni yaratish yoki vazifangizni qanday qilib foydalanuvchilarga qulay qilish

Qabul qilingki, foydalanuvchi har safar url-dan nusxa ko'chirish va kerakli topshiriq identifikatorini qidirishdan ko'ra, sizning vazifangiz bilan shu tarzda o'zaro aloqada bo'lish ancha qulayroq bo'ladi.

PS Ushbu maqolada juda soddalashtirilgan misol keltirilgan, bu shaklda amaliy qo'llanilmasligi mumkin, chunki yig'ilishlar juda ko'p turli xil parametrlarga ega, ammo ushbu maqolaning maqsadi ishchi yechimni ta'minlash emas, balki vosita qanday ishlashini ko'rsatish edi.

PSS Avval yozganimdek, agar ushbu maqola foydali bo'lsa, keyingi maqola haqida bo'ladi kod orqali Jenkins vazifalarining dinamik konfiguratsiyasi.

Manba: www.habr.com

a Izoh qo'shish