Krijimi i parametrave dinamikë në një punë të Jenkins, ose si ta bëni detyrën tuaj të përshtatshme për përdoruesit

Diten e mire, Habr!

Sot do të doja të ndaj një nga mënyrat e përdorimit Shtojca për zgjedhje aktive bëj detyrën në Jenkins më i unifikuar dhe më miqësor për përdoruesit.

Paraqitje

Një shkurtim i tillë si DevOps nuk është më diçka e re për komunitetin e IT. Për shumë njerëz, shprehja "bëj DevOps" shoqërohet me një lloj butoni magjik, kur klikohet, kodi i aplikacionit shndërrohet automatikisht në një aplikacion të vendosur dhe të testuar (gjithçka është në të vërtetë më e ndërlikuar, por ne po abstragojmë nga të gjitha proceset).

Pra, ne morëm një urdhër për të bërë një buton të tillë magjik në mënyrë që administratorët të mund ta vendosin aplikacionin me një klik. Ekzistojnë lloje të ndryshme të zbatimit të kësaj detyre: nga shkrimi i një bot për cilindo prej lajmëtarëve të çastit deri te zhvillimi i një aplikacioni të veçantë. Sidoqoftë, e gjithë kjo ka të njëjtin qëllim - ta bëjë fillimin e ndërtimit dhe vendosjes së aplikacionit sa më transparent dhe të përshtatshëm.

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


Krijimi i parametrave dinamikë në një punë të Jenkins, ose si ta bëni detyrën tuaj të përshtatshme për përdoruesit

Detyrë

Krijo një punë të përshtatshme për Jenkins që do të nisë ndërtimin dhe (ose) vendosjen e mikroshërbimit të zgjedhur të një versioni të caktuar.

Krijimi i parametrave dinamikë në një punë të Jenkins, ose si ta bëni detyrën tuaj të përshtatshme për përdoruesit

Fut te dhenat

Ne kemi disa depo që përmbajnë kodin burimor të mikroshërbimeve të ndryshme.

Përcaktimi i parametrave

Parametrat e mëposhtëm duhet të merren si hyrje në punën tonë:

  1. URL-ja e depove me kodin e mikroshërbimit që duam të ndërtojmë dhe vendosim gjatë ekzekutimit të punës.
  2. ID e kryerjes nga e cila do të ndodhë ndërtimi.

SIC ËSHTË

Mënyra më e lehtë për të realizuar këtë detyrë është krijimi i dy parametrave të tipit String.

Krijimi i parametrave dinamikë në një punë të Jenkins, ose si ta bëni detyrën tuaj të përshtatshme për përdoruesit

Në këtë rast, përdoruesi do të duhet të fusë manualisht shtegun për në depo dhe ID-në e kryerjes, e cila, siç e shihni, nuk është plotësisht e përshtatshme.

Krijimi i parametrave dinamikë në një punë të Jenkins, ose si ta bëni detyrën tuaj të përshtatshme për përdoruesit

SI TË JESH

Tani le të provojmë një lloj tjetër parametrash për të marrë parasysh të gjitha avantazhet e tij.
Le të krijojmë parametrin e parë me tipin Choice Parameter, i dyti - Active Choices Reactive Reference Parameter. Në parametrin me llojin Choice, do të shtojmë manualisht në fushën Choices emrat e depove ku ruhet kodi i mikroshërbimeve tona.

Krijimi i parametrave dinamikë në një punë të Jenkins, ose si ta bëni detyrën tuaj të përshtatshme për përdoruesit

Nëse audienca e pëlqen këtë artikull, atëherë në artikullin tjetër do të përshkruaj procesin e konfigurimit të detyrave në Jenkins, duke përdorur një përshkrim përmes kodit (Konfigurimi si kod), d.m.th. ne nuk do të kemi nevojë të fusim manualisht emrat e depove dhe të krijojmë parametra, gjithçka do të ndodhë automatikisht (kodi ynë do të marrë një listë të depove nga SCM dhe do të krijojë një parametër me këtë listë).

Vlerat e parametrit të dytë do të plotësohen në mënyrë dinamike, në varësi të asaj vlere që merr parametri i parë (test1 ose test2), sepse çdo depo ka listën e vet të angazhimeve.

Zgjedhjet aktive Parametri i referencës reaktive ka fushat e mëposhtme për të plotësuar:

  1. Emër - emri i parametrit.
  2. Dorëshkrim – kodi që do të ekzekutohet sa herë që ndryshohet vlera e parametrit nga fusha e parametrit Referenced (në rastin tonë, kur zgjedhim midis testit1 dhe testit2).
  3. Përshkrim – përshkrim i shkurtër i parametrit.
  4. Lloji i zgjedhjes – lloji i objektit të kthyer nga skripti (në rastin tonë do të kthejmë kodin html).
  5. Parametri i referuar – emri i parametrit, kur vlera e të cilit ndryshohet, do të ekzekutohet kodi nga seksioni Script.

Krijimi i parametrave dinamikë në një punë të Jenkins, ose si ta bëni detyrën tuaj të përshtatshme për përdoruesit

Le të vazhdojmë drejtpërdrejt me plotësimin e fushës më të rëndësishme në këtë parametër. Na ofrohen dy lloje zbatimi për të zgjedhur: duke përdorur Skenari Groovy ose Scriptler Scriptler.
Ne zgjedhim të parën, pasi Scriptler është thjesht një shtojcë që ruan skriptet që keni shkruar më parë dhe ju lejon t'i përdorni ato në detyra të tjera pa përsëritur copy-pasting.

Kodi Groovy për të marrë të gjitha angazhimet nga depoja e zgjedhur:

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

Pa hyrë në detaje, ky kod merr emrin e mikroshërbimit (MICROSERVICE_NAME) si hyrje dhe dërgon një kërkesë te Bitbucket (metodë getCommitsForMicroservice) duke përdorur API-në e tij dhe merr mesazhin id dhe commit të të gjitha kryerjeve për një mikroshërbim të caktuar.
Siç u përmend më herët, ky kod duhet të kthejë html që do të shfaqet në faqe Ndërtoni me parametra në Jenkins, kështu që ne i mbështjellim të gjitha vlerat e marra nga Bitbucket në një listë dhe i shtojmë ato për t'i zgjedhur.

Pasi të kemi përfunduar të gjitha hapat, duhet të kemi një faqe kaq të bukur Ndërtoni me parametra.

Nëse keni zgjedhur mikroshërbimin test1:

Krijimi i parametrave dinamikë në një punë të Jenkins, ose si ta bëni detyrën tuaj të përshtatshme për përdoruesit

Nëse keni zgjedhur mikroshërbimin test2:

Krijimi i parametrave dinamikë në një punë të Jenkins, ose si ta bëni detyrën tuaj të përshtatshme për përdoruesit

Pajtohu se do të jetë shumë më i përshtatshëm për përdoruesin që të ndërveprojë me detyrën tuaj në këtë mënyrë sesa të kopjoni url-në çdo herë dhe të kërkoni ID-në e kërkuar të kryerjes.

PS Ky artikull ofron një shembull shumë të thjeshtuar, i cili mund të mos jetë i dobishëm në këtë formë, pasi asambletë kanë shumë më tepër parametra të ndryshëm, por qëllimi i këtij artikulli ishte të tregonte se si funksionon mjeti, jo të jepte një zgjidhje pune.

PSS Siç shkrova më herët, nëse ky artikull është i dobishëm, atëherë do të bëhet fjalë për artikullin tjetër konfigurimi dinamik i detyrave të Jenkins përmes kodit.

Burimi: www.habr.com

Shto një koment