Jenkins işində dinamik parametrlər yaratmaq və ya tapşırığınızı istifadəçi üçün necə asanlaşdırmaq olar

Yaxşı gün, Habr!

Bu gün necə istifadə etməyin yollarından birini bölüşmək istəyirəm Aktiv Seçimlər Plugin tapşırığı yerinə yetirin Jenkins istifadəçi üçün ən vahid və başa düşülən.

Giriş

DevOps kimi abbreviatura uzun müddətdir ki, İT icması üçün yeni bir şey deyil. Bir çox insanlar üçün "DevOps etmək" ifadəsi bir növ sehrli düymə ilə əlaqələndirilir, kliklədikdə tətbiq kodu avtomatik olaraq yerləşdirilən və sınaqdan keçirilmiş bir tətbiqə çevrilir (bu, əslində daha mürəkkəbdir, lakin biz bütün proseslərdən abstrakt edirik).

Beləliklə, administratorların tətbiqi bir kliklə yerləşdirə bilməsi üçün belə bir sehrli düyməni hazırlamaq əmri aldıq. Bu tapşırığın həyata keçirilməsinin müxtəlif növləri var: hər hansı bir messencer üçün bot yazmaqdan başlayaraq ayrı bir tətbiqin hazırlanmasına qədər. Buna baxmayaraq, bütün bunların məqsədi eynidir - montajın işə salınması və tətbiqin yerləşdirilməsini mümkün qədər şəffaf və rahat etmək.

Bizim vəziyyətimizdə istifadə edəcəyik Jenkins.


Jenkins işində dinamik parametrlər yaratmaq və ya tapşırığınızı istifadəçi üçün necə asanlaşdırmaq olar

Tapşırıq

Müəyyən bir versiyanın seçilmiş mikroservisinin yığılmasını və (və ya) yerləşdirilməsini həyata keçirəcək rahat Jenkins işi yaradın.

Jenkins işində dinamik parametrlər yaratmaq və ya tapşırığınızı istifadəçi üçün necə asanlaşdırmaq olar

Daxiletmə məlumatları

Müxtəlif mikroservislərin mənbə kodunu ehtiva edən bir neçə depomuz var.

Parametrlərin müəyyən edilməsi

İşimizin girişi aşağıdakı parametrləri almalıdır:

  1. İşi yerinə yetirərkən qurmaq və yerləşdirmək istədiyimiz mikroservis kodu ilə deponun URL-i.
  2. Qurulacaq öhdəliyin ID-si.

OLDUĞU KİMİ

Bu tapşırığı yerinə yetirməyin ən asan yolu String tipli iki parametr yaratmaqdır.

Jenkins işində dinamik parametrlər yaratmaq və ya tapşırığınızı istifadəçi üçün necə asanlaşdırmaq olar

Bu halda, istifadəçi repozitoriyaya gedən yolu və id-ci kodunu əl ilə daxil etməli olacaq, gördüyünüz kimi, bu, çox rahat deyil.

Jenkins işində dinamik parametrlər yaratmaq və ya tapşırığınızı istifadəçi üçün necə asanlaşdırmaq olar

OLMAQ OLARAQ

İndi onun bütün üstünlüklərini görmək üçün başqa bir parametr növünə cəhd edək.
Birinci parametri Choice Parameter tipi ilə yaradaq, ikincisi - Active Choices Reactive Reference Parameter. Seçim növü ilə parametrdə, mikroservislərimizin kodunun saxlandığı Seçimlər sahəsinə depoların adlarını əl ilə əlavə edəcəyik.

Jenkins işində dinamik parametrlər yaratmaq və ya tapşırığınızı istifadəçi üçün necə asanlaşdırmaq olar

Əgər auditoriya bu məqaləni bəyənirsə, onda növbəti məqalədə kod vasitəsilə təsvirdən istifadə edərək Jenkins-də tapşırıqların konfiqurasiya prosesini təsvir edəcəyəm (Kod kimi konfiqurasiya), yəni. depoların adlarını əl ilə daxil etməyə və parametrlər yaratmağa ehtiyac qalmayacaq, hər şey avtomatik olaraq baş verəcək (kodumuz SCM-dən depoların siyahısını alacaq və bu siyahı ilə parametr yaradacaq).

İkinci parametrin dəyərləri, birinci parametrin hansı dəyər almasından (test1 və ya test2) asılı olaraq dinamik şəkildə doldurulacaq, çünki hər bir deponun öz öhdəliklər siyahısı var.

Aktiv Seçimlər Reaktiv İstinad Parametri doldurmaq üçün aşağıdakı sahələrə malikdir:

  1. ad - parametr adı.
  2. Ssenari - İstinad edilən parametr sahəsindən parametrin qiyməti hər dəfə dəyişdirildikdə yerinə yetiriləcək kod (bizim vəziyyətimizdə test1 və test2 arasında seçim etdikdə).
  3. təsvir – parametrin qısa təsviri.
  4. Seçim növü - skript tərəfindən qaytarılan obyektin növü (bizim vəziyyətimizdə html kodunu qaytaracağıq).
  5. istinad edilən parametr – dəyəri dəyişən parametrin adı, Skript bölməsindən kod icra ediləcək.

Jenkins işində dinamik parametrlər yaratmaq və ya tapşırığınızı istifadəçi üçün necə asanlaşdırmaq olar

Gəlin birbaşa bu parametrdə ən vacib sahəni doldurmağa davam edək. Seçmək üçün bizə iki növ həyata keçirmə təklif olunur: istifadə Möhtəşəm Skript və ya Skript skripti.
Birincisini seçirik, çünki Scriptler sadəcə olaraq artıq yazdığınız skriptləri saxlayan və onları yenidən kopyala-yapışdırmadan başqa tapşırıqlarda istifadə etməyə imkan verən plagindir.

Seçilmiş depodan bütün öhdəlikləri əldə etmək üçün gözəl 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()

Təfərrüatlara varmadan, bu kod giriş kimi mikroxidmətin adını (MICROSERVICE_NAME) alır, sorğu göndərir Bitbucket (üsul getCommitsForMicroservice) API-dən istifadə edərək verilmiş mikroservis üçün bütün öhdəliklərin id və commit mesajını alır.
Daha əvvəl qeyd edildiyi kimi, bu kod səhifədə göstəriləcək html-i qaytarmalıdır Parametrlərlə qurun Jenkins-də, Bitbucket-dən alınan bütün dəyərləri siyahıya yığırıq və seçimə əlavə edirik.

Bütün addımları tamamladıqdan sonra belə gözəl bir səhifə almalıyıq Parametrlərlə qurun.

Əgər test1 mikroservisini seçmisinizsə:

Jenkins işində dinamik parametrlər yaratmaq və ya tapşırığınızı istifadəçi üçün necə asanlaşdırmaq olar

Əgər test2 mikroservisini seçmisinizsə:

Jenkins işində dinamik parametrlər yaratmaq və ya tapşırığınızı istifadəçi üçün necə asanlaşdırmaq olar

Razılaşın ki, istifadəçi üçün hər dəfə url-ni köçürmək və tələb olunan commit id-ni axtarmaqdansa, sizin tapşırığınızla bu şəkildə qarşılıqlı əlaqədə olmaq daha rahat olacaq.

PS Bu məqalə çox sadələşdirilmiş bir nümunədir, olduğu kimi praktiki istifadə etməyə bilər, çünki montajların daha çox müxtəlif variantları var, lakin bu məqalənin məqsədi alətin necə işlədiyini göstərmək idi, işlək bir həll təmin etmək deyil.

PSS Daha əvvəl yazdığım kimi, bu məqalə faydalıdırsa, növbəti məqalə haqqında olacaq kod vasitəsilə Jenkins tapşırıqlarının dinamik konfiqurasiyası.

Mənbə: www.habr.com

Добавить комментарий