Paggawa ng mga dynamic na parameter sa isang Jenkins na trabaho, o kung paano gawing user-friendly ang iyong gawain

Magandang araw, Habr!

Ngayon nais kong ibahagi ang isa sa mga paraan ng paggamit Active Choices Plugin gawin ang gawain sa Jenkins ang pinaka-pinag-isa at user-friendly.

Pagpapakilala

Ang naturang pagdadaglat bilang DevOps ay hindi na bago para sa komunidad ng IT. Para sa maraming tao, ang pariralang "do DevOps" ay nauugnay sa ilang uri ng magic button, kapag na-click, ang application code ay awtomatikong nagiging isang deployed at nasubok na application (lahat ay talagang mas kumplikado, ngunit kami ay nag-abstract mula sa lahat ng mga proseso).

Kaya, nakatanggap kami ng utos na gumawa ng ganoong magic button upang mai-deploy ng mga administrator ang application sa isang click. Mayroong iba't ibang uri ng pagpapatupad ng gawaing ito: mula sa pagsulat ng bot para sa alinman sa mga instant messenger hanggang sa pagbuo ng hiwalay na application. Gayunpaman, ang lahat ng ito ay may parehong layunin - upang gawin ang pagsisimula ng pagbuo at pag-deploy ng application bilang transparent at maginhawa hangga't maaari.

Sa aming kaso gagamitin namin Jenkins.


Paggawa ng mga dynamic na parameter sa isang Jenkins na trabaho, o kung paano gawing user-friendly ang iyong gawain

Gawain

Gumawa ng maginhawang trabaho sa Jenkins na maglulunsad ng build at (o) deployment ng napiling microservice ng isang partikular na bersyon.

Paggawa ng mga dynamic na parameter sa isang Jenkins na trabaho, o kung paano gawing user-friendly ang iyong gawain

Input ang data

Mayroon kaming ilang mga repository na naglalaman ng source code ng iba't ibang microservice.

Pagtukoy ng mga parameter

Ang mga sumusunod na parameter ay dapat matanggap bilang input sa aming trabaho:

  1. Ang URL ng repository na may microservice code na gusto naming buuin at i-deploy kapag pinapatakbo ang trabaho.
  2. ID ng commit kung saan magaganap ang build.

AS IS

Ang pinakamadaling paraan upang magawa ang gawaing ito ay ang lumikha ng dalawang parameter ng uri ng String.

Paggawa ng mga dynamic na parameter sa isang Jenkins na trabaho, o kung paano gawing user-friendly ang iyong gawain

Sa kasong ito, kakailanganin ng user na manu-manong ipasok ang path sa repository at ang commit id, na, nakikita mo, ay hindi lubos na maginhawa.

Paggawa ng mga dynamic na parameter sa isang Jenkins na trabaho, o kung paano gawing user-friendly ang iyong gawain

AS TO BE

Ngayon subukan natin ang isa pang uri ng mga parameter upang isaalang-alang ang lahat ng mga pakinabang nito.
Gawin natin ang unang parameter na may uri ng Choice Parameter, ang pangalawa - Active Choices Reactive Reference Parameter. Sa parameter na may uri ng Pagpipilian, manu-mano naming idaragdag sa field na Mga Pagpipilian ang mga pangalan ng mga repositoryo kung saan nakaimbak ang code ng aming mga microservice.

Paggawa ng mga dynamic na parameter sa isang Jenkins na trabaho, o kung paano gawing user-friendly ang iyong gawain

Kung gusto ng madla ang artikulong ito, pagkatapos ay sa susunod na artikulo ay ilalarawan ko ang proseso ng pag-configure ng mga gawain sa Jenkins, gamit ang isang paglalarawan sa pamamagitan ng code (Configuration bilang code), i.e. hindi namin kakailanganing manu-manong ipasok ang mga pangalan ng repositoryo at lumikha ng mga parameter, ang lahat ay awtomatikong mangyayari (ang aming code ay makakatanggap ng isang listahan ng mga repositoryo mula sa SCM at lumikha ng isang parameter sa listahang ito).

Ang mga halaga ng pangalawang parameter ay dynamic na pupunan, depende sa kung anong halaga ang kinukuha ng unang parameter (test1 o test2), dahil ang bawat repository ay may sariling listahan ng mga commit.

Mga Aktibong Pagpipilian Reactive Reference Parameter may mga sumusunod na field na pupunan:

  1. Pangalan - pangalan ng parameter.
  2. Iskrip – code na isasagawa sa tuwing babaguhin ang halaga ng parameter mula sa field ng Referenced parameter (sa aming kaso, kapag pumili kami sa pagitan ng test1 at test2).
  3. paglalarawan - maikling paglalarawan ng parameter.
  4. Uri ng Pagpipilian – ang uri ng bagay na ibinalik ng script (sa aming kaso ay ibabalik namin ang html code).
  5. Tinutukoy na parameter – ang pangalan ng parameter, kapag ang halaga nito ay binago, ang code mula sa seksyon ng Script ay isasagawa.

Paggawa ng mga dynamic na parameter sa isang Jenkins na trabaho, o kung paano gawing user-friendly ang iyong gawain

Magpatuloy tayo nang direkta sa pagpuno sa pinakamahalagang field sa parameter na ito. Inaalok kami ng dalawang uri ng pagpapatupad na mapagpipilian: gamit Groovy Script o Scriptler Script.
Pinipili namin ang una, dahil ang Scriptler ay isang plugin lamang na nagse-save ng mga script na dati mong isinulat at nagbibigay-daan sa iyong gamitin ang mga ito sa iba pang mga gawain nang hindi muling nagkokopya.

Groovy code upang makuha ang lahat ng mga commit mula sa napiling repositoryo:

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

Nang hindi naglalagay ng mga detalye, natatanggap ng code na ito ang pangalan ng microservice (MICROSERVICE_NAME) bilang input at nagpapadala ng kahilingan sa Bitbucket (paraan getCommitsForMicroservice) gamit ang API nito, at nakukuha ang id at commit na mensahe ng lahat ng commit para sa isang partikular na microservice.
Tulad ng nabanggit kanina, ang code na ito ay dapat magbalik ng html na ipapakita sa pahina Bumuo gamit ang Mga Parameter sa Jenkins, kaya binabalot namin ang lahat ng natanggap na halaga mula sa Bitbucket sa isang listahan at idagdag ang mga ito upang piliin.

Matapos makumpleto ang lahat ng mga hakbang, dapat tayong makakuha ng napakagandang pahina Bumuo gamit ang Mga Parameter.

Kung pinili mo ang test1 microservice:

Paggawa ng mga dynamic na parameter sa isang Jenkins na trabaho, o kung paano gawing user-friendly ang iyong gawain

Kung pinili mo ang test2 microservice:

Paggawa ng mga dynamic na parameter sa isang Jenkins na trabaho, o kung paano gawing user-friendly ang iyong gawain

Sumang-ayon na magiging mas maginhawa para sa user na makipag-ugnayan sa iyong gawain sa ganitong paraan kaysa sa pagkopya ng url sa bawat oras at paghahanap ng kinakailangang commit id.

PS Ang artikulong ito ay nagbibigay ng isang napakasimpleng halimbawa, na maaaring hindi praktikal na gamitin sa form na ito, dahil ang mga pagtitipon ay may mas maraming iba't ibang mga parameter, ngunit ang layunin ng artikulong ito ay upang ipakita kung paano gumagana ang tool, hindi upang magbigay ng isang gumaganang solusyon.

PSS Tulad ng isinulat ko kanina, kung ang artikulong ito ay kapaki-pakinabang, kung gayon ang susunod ay tungkol sa dynamic na configuration ng mga gawain ni Jenkins sa pamamagitan ng code.

Pinagmulan: www.habr.com

Magdagdag ng komento