Paghimo dinamikong mga parameter sa usa ka trabaho sa Jenkins, o kung giunsa paghimo ang imong buluhaton nga user-friendly

Maayong adlaw, Si Habr!

Karon gusto nakong ipaambit ang usa sa mga paagi sa paggamit Active Choices Plugin buhata ang buluhaton sa Jenkins ang labing hiniusang ug user-friendly.

Pasiuna

Ang ingon nga abbreviation sama sa DevOps dili na bag-o alang sa komunidad sa IT. Alang sa daghang mga tawo, ang hugpong sa mga pulong nga "buhata ang DevOps" gilangkit sa usa ka matang sa buton sa salamangka, kung gi-klik, ang code sa aplikasyon awtomatiko nga nahimo nga usa ka gi-deploy ug gisulayan nga aplikasyon (ang tanan sa tinuud mas komplikado, apan kami nag-abstract gikan sa tanan nga mga proseso).

Mao nga, nakadawat kami usa ka mando nga maghimo usa ka buton nga salamangka aron ang mga administrador maka-deploy sa aplikasyon sa usa ka pag-klik. Adunay lain-laing mga matang sa pagpatuman niini nga buluhaton: gikan sa pagsulat sa usa ka bot alang sa bisan unsa sa mga instant messenger ngadto sa pagpalambo sa usa ka bulag nga aplikasyon. Bisan pa, kining tanan adunay parehas nga katuyoan - aron mahimo ang pagsugod sa pagtukod ug pag-deploy sa aplikasyon nga transparent ug dali kutob sa mahimo.

Sa among kaso among gamiton Jenkins.


Paghimo dinamikong mga parameter sa usa ka trabaho sa Jenkins, o kung giunsa paghimo ang imong buluhaton nga user-friendly

Tumong

Paghimo og usa ka kombenyente nga trabaho sa Jenkins nga maglunsad sa pagtukod ug (o) pag-deploy sa pinili nga microservice sa usa ka bersyon.

Paghimo dinamikong mga parameter sa usa ka trabaho sa Jenkins, o kung giunsa paghimo ang imong buluhaton nga user-friendly

Input data

Kami adunay daghang mga repository nga adunay gigikanan nga code sa lainlaing mga microservice.

Pagtino sa mga parameter

Ang mosunod nga mga parameter kinahanglang madawat isip input sa atong trabaho:

  1. Ang URL sa repository nga adunay microservice code nga gusto namong tukuron ug i-deploy sa dihang magpadagan sa trabaho.
  2. ID sa commit diin ang pagtukod mahitabo.

AS IS

Ang labing kadali nga paagi aron matuman kini nga buluhaton mao ang paghimo og duha nga mga parameter sa tipo nga String.

Paghimo dinamikong mga parameter sa usa ka trabaho sa Jenkins, o kung giunsa paghimo ang imong buluhaton nga user-friendly

Sa kini nga kaso, ang user kinahanglan nga mano-mano nga mosulod sa agianan sa repository ug ang commit id, nga, nakita nimo, dili hingpit nga kombenyente.

Paghimo dinamikong mga parameter sa usa ka trabaho sa Jenkins, o kung giunsa paghimo ang imong buluhaton nga user-friendly

AS TO BE

Karon atong sulayan ang laing matang sa mga parameter aron makonsiderar ang tanan nga mga bentaha niini.
Himoon nato ang unang parametro nga adunay tipo nga Choice Parameter, ang ikaduha - Active Choices Reactive Reference Parameter. Sa parameter nga adunay klase nga Pagpili, mano-mano namon nga idugang sa natad sa Mga Pagpili ang mga ngalan sa mga repository diin gitipigan ang code sa among mga microservice.

Paghimo dinamikong mga parameter sa usa ka trabaho sa Jenkins, o kung giunsa paghimo ang imong buluhaton nga user-friendly

Kung ang mamiminaw ganahan niini nga artikulo, unya sa sunod nga artikulo akong ihulagway ang proseso sa pag-configure sa mga buluhaton sa Jenkins, gamit ang usa ka paghulagway pinaagi sa code (Configuration as code), i.e. dili na nato kinahanglan nga manu-mano ang pagsulod sa mga ngalan sa repository ug paghimo og mga parameter, ang tanan awtomatikong mahitabo (ang atong code makadawat og lista sa mga repository gikan sa SCM ug maghimo og parameter niini nga lista).

Ang mga kantidad sa ikaduha nga parameter mapuno sa dinamikong paagi, depende sa kung unsang kantidad ang gikuha sa una nga parameter (test1 o test2), tungod kay ang matag repository adunay kaugalingon nga lista sa mga commit.

Aktibo nga mga Pagpili Reaktibo nga Reference Parameter adunay mosunod nga mga field nga pun-an:

  1. ngalan - ngalan sa parameter.
  2. Script – code nga ipatuman sa matag higayon nga ang bili sa parametro gikan sa Referenced parameter field mausab (sa among kaso, kung mopili kami tali sa test1 ug test2).
  3. Description - mubo nga paghulagway sa parameter.
  4. Matang sa Pagpili – ang matang sa butang nga gibalik sa script (sa among kaso atong ibalik ang html code).
  5. Gi-refer nga parameter - ang ngalan sa parameter, kung ang bili niini mausab, ang code gikan sa seksyon sa Script ipatuman.

Paghimo dinamikong mga parameter sa usa ka trabaho sa Jenkins, o kung giunsa paghimo ang imong buluhaton nga user-friendly

Magpadayon kita direkta sa pagpuno sa labing hinungdanon nga natad sa kini nga parameter. Gitanyagan kami og duha ka matang sa pagpatuman nga mapilian: paggamit Groovy Script o Scriptler Script.
Gipili namo ang una, tungod kay ang Scriptler usa ra ka plugin nga nagtipig sa mga script nga imong gisulat kaniadto ug gitugotan ka nga magamit kini sa ubang mga buluhaton nga wala’y pagkopya pag-usab.

Groovy code aron makuha ang tanang commit gikan sa pinili nga repository:

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

Sa walay pag-adto sa mga detalye, kini nga code makadawat sa microservice nga ngalan (MICROSERVICE_NAME) isip input ug magpadala og hangyo sa Bitbucket (pamaagi getCommitsForMicroservice) gamit ang API niini, ug makuha ang id ug commit nga mensahe sa tanang commit para sa gihatag nga microservice.
Sama sa gihisgutan sa sayo pa, kini nga code kinahanglan nga ibalik ang html nga ipakita sa panid Pagtukod gamit ang mga Parameter sa Jenkins, mao nga giputos namon ang tanan nga nadawat nga mga kantidad gikan sa Bitbucket sa usa ka lista ug idugang kini aron mapili.

Pagkahuman sa tanan nga mga lakang, kinahanglan nga makakuha kami usa ka matahum nga panid Pagtukod gamit ang mga Parameter.

Kung gipili nimo ang test1 microservice:

Paghimo dinamikong mga parameter sa usa ka trabaho sa Jenkins, o kung giunsa paghimo ang imong buluhaton nga user-friendly

Kung gipili nimo ang test2 microservice:

Paghimo dinamikong mga parameter sa usa ka trabaho sa Jenkins, o kung giunsa paghimo ang imong buluhaton nga user-friendly

Uyon nga mas sayon ​​​​alang sa user nga makig-uban sa imong buluhaton niining paagiha kay sa pagkopya sa url matag higayon ug pagpangita sa gikinahanglan nga commit id.

PS Kini nga artikulo naghatag usa ka gipayano nga pananglitan, nga mahimo’g dili praktikal nga gamit sa kini nga porma, tungod kay ang mga asembliya adunay daghang lainlain nga mga parameter, apan ang katuyoan sa kini nga artikulo mao ang pagpakita kung giunsa ang himan molihok, dili aron maghatag usa ka solusyon nga nagtrabaho.

PSS Sama sa akong gisulat sa sayo pa, kung kini nga artikulo mapuslanon, nan ang sunod nga bahin mao ang dinamikong pag-configure sa mga buluhaton ni Jenkins pinaagi sa code.

Source: www.habr.com

Idugang sa usa ka comment