Krijimi i parametrave dinamikë në Jenkins job, ose si ta bëni detyrën tuaj miqësore për përdoruesit.

Mirë se vini, Habr!

Sot doja të ndaj një nga mënyrat si me Active Choices Plugin të realizohet një detyrë në Jenkins mënyrën më të unifikuar dhe të kuptueshme për përdoruesin.

Hyrje

Abreviatura si DevOps nuk është më një koncept i ri për komunitetin IT. Shumë njerëz e lidhin frazën "të bësh DevOps" me një buton magjik, që kur shtypet, kodin e aplikacionit e shndërron automatikisht në një aplikacion të zhvilluar dhe të testuar (është më e komplikuar në të vërtetë, por ne do të abstrahojmë nga të gjithë proceset).

Pra, na erdhi një kërkesë për të bërë një buton magjik, që administratorët të mund të zbatojnë aplikacionin me një klikim. Ekzistojnë mënyra të ndryshme për ta realizuar këtë detyrë: duke filluar nga shkrimi i një boti për ndonjë mesazher dhe duke përfunduar me zhvillimin e një aplikacioni të veçantë. Megjithatë, qëllimi i të gjithë kësaj është i njëjtë – të bëjmë që nisja e ndërtimit dhe implementimit të aplikacionit të jetë sa më transparente dhe e lehtë.

Në rastin tonë do të përdorim Jenkins.


Krijimi i parametrave dinamikë në Jenkins job, ose si ta bëni detyrën tuaj miqësore për përdoruesit.

Detyra

Krijoni një punë të re në Jenkins, e cila do të fillojë ndërtimin dhe (ose) depoyin e mikro-shërbimit të zgjedhur të një versioni të caktuar.

Krijimi i parametrave dinamikë në Jenkins job, ose si ta bëni detyrën tuaj miqësore për përdoruesit.

Të dhënat hyrëse

Kemi disa repozitorë ku ndodhet kodi burimor i mikro-shërbimeve të ndryshme.

Përcaktimi i parametrave

Në hyrje të punës sonë duhet të vijë informacioni në vijim:

  1. URL e repozitorit me kodin e mikro-shërbimit që dëshirojmë të ndërtojmë dhe zbatojmë kur fillojmë punën.
  2. ID e commit-it, nga e cila do të bëhet ndërtimi.

AS IS

Mënyra më e thjeshtë për të realizuar këtë detyrë është të krijojmë dy parametra me llojin String.

Krijimi i parametrave dinamikë në Jenkins job, ose si ta bëni detyrën tuaj miqësore për përdoruesit.

Në këtë rast, përdoruesi do të duhet të futë manualisht rrugën deri te repozitori dhe id e commit-it, që, prano, nuk është shumë praktike.

Krijimi i parametrave dinamikë në Jenkins job, ose si ta bëni detyrën tuaj miqësore për përdoruesit.

AS TO BE

Tani do të provojmë një lloj tjetër parametrash, për të shqyrtuar të gjitha përfitimet e tij.
Do të krijojmë parametrin e parë me llojin Choice Parameter, dhe të dytin — Active Choices Reactive Reference Parameter. Në parametrin me llojin Choice do të shtojmë manualisht emrat e repozitorive, ku ruhet kodi i mikro-shërbimeve tona.

Krijimi i parametrave dinamikë në Jenkins job, ose si ta bëni detyrën tuaj miqësore për përdoruesit.

Nëse ky artikull i pëlqen publikut, në artikullin e ardhshëm do të përshkruaj procesin e konfiguruar të detyrave në Jenkins, duke përdorur përshkrimin përmes kodit (Configuration as code), dmth. nuk do na nevojitet të futim manualisht emrat e repozitorive dhe të krijojmë parametra, gjithçka do të ndodhë automatikisht (kodi ynë do të marrë listën e repozitorive nga SCM dhe do të krijojë një parametrin me atë listë).

Vlerat e parametrave të dytë do të mbushen në mënyrë dinamike, në varësi të asaj që do të marrë parametri i parë (test1 ose test2), sepse çdo repozit të kemi një listë të vetën të commit-eve.

Active Choices Reactive Reference Parameter ka këto fusha për t'u mbushur:

  1. Emri – emri i parametrave.
  2. Script – kodi që do të ekzekutohet çdo herë kur vlerën e parametrave në fushën Referenced parameter të modifikojmë (në rastin tonë, kur do të zgjedhim mes test1 dhe test2).
  3. Përshkrimi – një përshkrim i shkurtër i parametrave.
  4. Choice Type – lloji i objektit që skripti do të kthejë (në rastin tonë do të kthejmë kodin html).
  5. Referenced parameter – emri i parametrave, kur modifikimi i vlerës së tij do të ekzekutojë kodin nga seksioni Script.

Krijimi i parametrave dinamikë në Jenkins job, ose si ta bëni detyrën tuaj miqësore për përdoruesit.

Të kalojmë direkt tek mbushja e fushës më të rëndësishme në këtë parametrë. Na ofrohen dy lloje realizimesh: përdorimi i Groovy Script ose Scriptler Script.
Zgjidhni të parin, sepse Scriptler është vetëm një plug-in që ruan skriptet e shkruara më parë nga ju dhe lejon përdorimin e tyre në detyra të tjera pa e bërë përsëri kopje-ngjitje.

Kodi Groovy për të marrë të gjitha commit-et nga repozitori i zgjedhur:

AUTH = "login dhe fjalëkalimi në Base64"                           
GIT_URL = "url në SCM tuaj (https://bitbucket.org/)"                       
PROJECT_NAME = "emri i fushës së projektit, ku ndodhen repo-t"

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

Nëse nuk futemi në detaje, ky kod merr si hyrje emrin e mikro-shërbimit (MICROSERVICE_NAME), dërgon një kërkesë në Bitbucket (metoda getCommitsForMicroservice), duke përdorur API-në e tij dhe merr id dhe mesazhin e commit-it të të gjitha commit-eve për këtë mikro-shërbim.
Siç u përmend më parë, ky kod duhet të kthejë html, që do të shfaqet në faqen Build with Parameters në Jenkins, prandaj të gjitha vlerat e marra nga Bitbucket do t'i mbështjellim në një listë dhe do t’i shtojmë në select.

Pas përfundimit të të gjitha veprimeve, ne duhet të marrim një faqe të tillë të bukur Build with Parameters.

Nëse zgjodhëm mikro-shërbimin test1:

Krijimi i parametrave dinamikë në Jenkins job, ose si ta bëni detyrën tuaj miqësore për përdoruesit.

Nëse zgjodhëm mikro-shërbimin test2:

Krijimi i parametrave dinamikë në Jenkins job, ose si ta bëni detyrën tuaj miqësore për përdoruesit.

Prano, se do t'ju jetë shumë më e lehtë të ndërveproni me detyrën tuaj në këtë mënyrë, sesa çdo herë të kopjoni url-në dhe të kërkoni commit id e duhur.

P.S. Ky artikull përmban një shembull shumë të thjeshtuar, i cili, ndoshta, nuk ka përdorim praktik në këtë formë, pasi ndërtimet kanë shumë më tepër parametra të ndryshëm, por qëllimi i këtij artikulli ishte të tregonte funksionimin e mjetit dhe jo të ofronte një zgjidhje të punës.

P.S.S. Siç kam shkruar më parë, nëse ky artikull do të ishte i dobishëm, atëherë tjetri do të jetë mbi konfigurimi dinamik i detyrave Jenkins përmes kodit.

Burimi: habr.com

Bleni hostim të besueshëm për faqe me mbrojtje nga DDoS, serverë VPS VDS 🔥 Bleni hostim të besueshëm për faqe me mbrojtje nga DDoS, serverë VPS VDS | ProHoster