Krijimi i parametrave dinamikë në punën e Jenkins, ose si të bëni që detyra juaj të jetë miqësore për përdoruesit.

Përshëndetje, Habr!

Sot do të doja të ndaj një nga mënyrat se si me ndihmën e Active Choices Plugin të realizojmë detyrën në Jenkins mënyrën më të unifikuar dhe të qartë për përdoruesin.

Hyrje

Akroni si DevOps nuk është më diçka e re për komunitetin IT. Për shumë njerëz, fraza "të bësh DevOps" asociohet me një buton magjik, pas të cilit kodi i aplikacionit automatikisht kthehet në një aplikacion të shpërndarë dhe të testuar (në të vërtetë, gjithçka është më e komplikuar, por ne do ta abstrahojmë nga të gjitha proceset).

Kështu, na erdhi një porosi për të krijuar një buton magjik, në mënyrë që administratorët të mund të shpërndajnë aplikacionin me një klikim. Ekzistojnë lloje të ndryshme realizimi të këtij detyrimi: duke filluar nga shkruajtja e një boti për ndonjë nga mesazherët dhe duke përfunduar me zhvillimin e një aplikacioni të veçantë. Megjithatë, qëllimi i të gjithë kësaj është të bëjmë aktivizimin e ndërtimit dhe shpërndarjes së aplikacionit sa më të qartë dhe të lehtë.

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


Krijimi i parametrave dinamikë në punën e Jenkins, ose si të bëni që detyra juaj të jetë miqësore për përdoruesit.

Detyra

Të krijojmë një punë të përshtatshme në Jenkins, e cila do të aktivizojë ndërtimin dhe (ose) shpërndarjen e mikroshërbimit të zgjedhur të një versioni të caktuar.

Krijimi i parametrave dinamikë në punën e Jenkins, ose si të bëni që detyra juaj të jetë miqësore për përdoruesit.

Të dhënat hyrëse

Ne kemi disa depo, ku ndodhet kodi burimor i mikroshërbimeve të ndryshme.

Përcaktimi i parametrave

Në hyrje të punës tonë duhet të marrim parametrat e mëposhtëm:

  1. URL e depozitës me kodin e mikroshërbimit, që ne duam të ndërtojmë dhe të shpërndajmë gjatë aktivizimit të punës.
  2. ID e angazhimit, nga i cili do të ndodhi ndërtimi.

AS IS

Mënyra më e thjeshtë për të kryer detyrën e vënë është të krijojmë dy parametra me tipin String.

Krijimi i parametrave dinamikë në punën e Jenkins, ose si të bëni që detyra juaj të jetë miqësore për përdoruesit.

Në këtë rast, përdoruesit do t'i duhet të fusin manualisht rrugën deri në depo dhe id e angazhimit, gjë që, e pranojmë, nuk është shumë e përshtatshme.

Krijimi i parametrave dinamikë në punën e Jenkins, ose si të bëni që detyra juaj të jetë miqësore për përdoruesit.

AS TO BE

Tani le të provuam një tjetër tip parametrash për të shqyrtuar të gjitha avantazhet e tij.
TĂ« krijojmĂ« parametrin e parĂ« me tipin Choice Parameter, parametrin e dytĂ« — Active Choices Reactive Reference Parameter. NĂ« parametrin me tipin Choice shtojmĂ« manualisht nĂ« fushĂ«n Choices emrat e depozitave, ku ruhet kodi i mikroshĂ«rbimeve tona.

Krijimi i parametrave dinamikë në punën e Jenkins, ose si të bëni që detyra juaj të jetë miqësore për përdoruesit.

Nëse kjo artikull i pëlqen audiencës, në artikullin në vijim do të përshkruaj procesin e konfigurimit të detyrave në Jenkins, duke përdorur përshkrimin përmes kodit (Configuration as code), pra, nuk do të na nevojitet të fusim manualisht emrat e repo dhe të krijojmë parametra, gjithçka do të ndodhi automatikisht (kodi ynë do të marrë listën e repo nga SCM dhe do të krijojë një parametër me këtë listë).

Vlerat e parametrin të dytë do të mbushen dinamikisht, në varësi të asaj se çfarë vlerë merr parametri i parë (test1 ose test2), sepse çdo repo ka listën e vet të komiteteve.

Parametri Referencial i Aktivitetit të Zgjedhjeve Reaktive ka fushat e mëposhtme për tu mbushur:

  1. Emri – emri i parametrin.
  2. Kodi – kodi, i cili do tĂ« ekzekutohet çdo herĂ«, kur vlere e parametrin nĂ« fushĂ«n Referenced parameter ndryshon (nĂ« rastin tonĂ«, kur pĂ«rzgjidhim midis test1 dhe test2).
  3. PĂ«rshkrimi – njĂ« pĂ«rshkrim tĂ« shkurtĂ«r tĂ« parametrin.
  4. Lloji i Zgjedhjes – lloji i objektit tĂ« kthyer nga skripta (nĂ« rastin tonĂ« do tĂ« kthejmĂ« kod html).
  5. Parametri i Referencuar – emri i parametrin, pĂ«r ndryshimin e vlerĂ«s sĂ« tĂ« cilit do tĂ« ekzekutohet kodi nĂ« seksionin Kodi.

Krijimi i parametrave dinamikë në punën e Jenkins, ose si të bëni që detyra juaj të jetë miqësore për përdoruesit.

Të kalojmë direkt në mbushjen e fushës kryesore në këtë parametër. Na ofrohen dy lloje realizimesh: përdorimi i Skriptit Groovy ose Skriptit Scriptler.
Zgjedhim të parën, sepse Scriptler është thjesht një plugin që ruan skriptet që i keni shkruar më parë dhe ju lejon t'i përdorni ato në detyra të tjera pa kërkuar kopje dhe ngjitje përsëri.

Kodi Groovy për të marrë të gjithë komitetet nga repo i zgjedhur:

AUTH = "login dhe fjalëkalimi në Base64"                           
GIT_URL = "url për SCM tuaj (https://bitbucket.org/)"                       
PROJECT_NAME = "emri i zonës së projektit, ku ndodhen depozitë" 

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 hyjmë në detaje, ky kod merr si input emrin e mikroshë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 komiteteve të gjitha për këtë mikroshërbim.
Siç u tha më parë, ky kod duhet të kthejë html, i cili do të shfaqet në faqen Ndërtuar me Parametra në Jenkins, prandaj të gjitha vlerat e marra nga Bitbucket i mbështjellim në një listë dhe i shtojmë në zgjedhje.

Pas përfundimit të të gjitha veprimeve, duhet të kemi një faqe të tillë të bukur Ndërtuar me Parametra.

Nëse zgjodhëm mikroshërbimin test1:

Krijimi i parametrave dinamikë në punën e Jenkins, ose si të bëni që detyra juaj të jetë miqësore për përdoruesit.

Nëse zgjodhëm mikroshërbimin test2:

Krijimi i parametrave dinamikë në punën e Jenkins, ose si të bëni që detyra juaj të jetë miqësore për përdoruesit.

Mund të pajtoheni se përdoruesit do t'i jetë shumë më e lehtë të ndërveprojnë me detyrën tuaj në këtë mënyrë, sesa çdo herë të kopjojnë url-në dhe të kërkojnë id-në e nevojshme të komitetit.

P.S. Në këtë artikull, është paraqitur një shembull shumë i thjeshtuar, i cili ndoshta nuk ka aplikim praktik në këtë formë, sepse ndërtimet kanë shumë më tepër parametra të ndryshëm, por qëllimi i këtij artikulli ishte të tregohet funksionimi i instrumentit, dhe jo të ofrohet një zgjidhje funksionale.

P.S.S. Siç kam shkruar më parë, nëse ky artikull do të jetë i dobishëm, atëherë artikulli tjetër do të jetë për konfigurimin dinamik të detyrave në Jenkins përmes kodit.

Burimi: habr.com

Blini hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS đŸ”„ Blini hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS | ProHoster