Kupanga magawo osinthika mu ntchito ya Jenkins, kapena momwe mungapangire ntchito yanu kukhala yosavuta kugwiritsa ntchito

Tsiku labwino, Habr!

Lero ndikufuna kugawana nawo njira imodzi yogwiritsira ntchito Ntchito yowonjezera Yosankha Yogwira gwiritsani ntchito Jenkins ogwirizana kwambiri komanso osavuta kugwiritsa ntchito.

Mau oyamba

Chidule chotere monga DevOps sichinthu chatsopano kwa gulu la IT. Kwa anthu ambiri, mawu oti "chitani DevOps" amalumikizidwa ndi batani lamatsenga lamtundu wina, mukadina, khodi yogwiritsira ntchito imasandulika kukhala ntchito yoyesedwa ndikuyesedwa (zonse ndizovuta kwambiri, koma tikuchotsa njira zonse).

Chifukwa chake, tidalandira lamulo loti tipange batani lamatsenga kotero kuti olamulira azitha kugwiritsa ntchito pulogalamuyi ndikudina kamodzi. Pali mitundu yosiyanasiyana ya kukhazikitsidwa kwa ntchitoyi: kuyambira polemba bot kwa aliyense wa amithenga apompopompo mpaka kupanga pulogalamu ina. Komabe, zonsezi zili ndi cholinga chofanana - kupangitsa kuti ntchito yomanga ndi kutumiza ntchito ikhale yowonekera komanso yosavuta momwe mungathere.

M'malo athu tidzagwiritsa ntchito Jenkins.


Kupanga magawo osinthika mu ntchito ya Jenkins, kapena momwe mungapangire ntchito yanu kukhala yosavuta kugwiritsa ntchito

Cholinga

Pangani ntchito yabwino ya Jenkins yomwe idzayambitse kumanga ndi (kapena) kutumiza kwa microservice yosankhidwa ya mtundu wina.

Kupanga magawo osinthika mu ntchito ya Jenkins, kapena momwe mungapangire ntchito yanu kukhala yosavuta kugwiritsa ntchito

Lowetsani deta

Tili ndi nkhokwe zingapo zomwe zili ndi magwero a ma microservices osiyanasiyana.

Kufotokozera magawo

Magawo otsatirawa ayenera kulandiridwa ngati chothandizira pantchito yathu:

  1. Ulalo wa malo okhala ndi nambala ya microservice yomwe tikufuna kupanga ndikugwiritsa ntchito pogwira ntchitoyo.
  2. ID ya kudzipereka komwe kumangako kudzachitika.

NDIPO

Njira yosavuta yokwaniritsira ntchitoyi ndikupanga magawo awiri amtundu wa String.

Kupanga magawo osinthika mu ntchito ya Jenkins, kapena momwe mungapangire ntchito yanu kukhala yosavuta kugwiritsa ntchito

Pankhaniyi, wogwiritsa ntchito adzafunika kulowa pamanja njira yopita kumalo osungirako ndi id yodzipereka, yomwe, mukuwona, sizothandiza kwenikweni.

Kupanga magawo osinthika mu ntchito ya Jenkins, kapena momwe mungapangire ntchito yanu kukhala yosavuta kugwiritsa ntchito

NGATI KUKHALA

Tsopano tiyeni tiyese mtundu wina wa magawo kuti tiganizire zabwino zake zonse.
Tiyeni tipange gawo loyamba ndi mtundu wa Choice Parameter, yachiwiri - Active Choices Reactive Reference Parameter. Mugawo lomwe lili ndi mtundu wa Choice, tidzawonjezera pamanja gawo la Zosankha mayina a nkhokwe komwe ma code a microservices athu amasungidwa.

Kupanga magawo osinthika mu ntchito ya Jenkins, kapena momwe mungapangire ntchito yanu kukhala yosavuta kugwiritsa ntchito

Ngati omvera akukonda nkhaniyi, ndiye m'nkhani yotsatira ndidzafotokozera ndondomeko yokonzekera ntchito ku Jenkins, pogwiritsa ntchito kufotokozera kudzera mu code (Kukonzekera monga code), i.e. sitidzafunika kulowetsa pamanja mayina osungira ndikupanga magawo, chilichonse chizichitika zokha (code yathu ilandila mndandanda wazosungira kuchokera ku SCM ndikupanga magawo ndi mndandandawu).

Makhalidwe a gawo lachiwiri adzadzazidwa mwamphamvu, kutengera mtengo womwe parameter yoyamba imatenga (test1 kapena test2), chifukwa chosungira chilichonse chili ndi mndandanda wake wazomwe amachita.

Zosankha Zogwira Ntchito Reactive Reference Parameter ili ndi magawo otsatirawa oti mudzazidwe:

  1. dzina - dzina la parameter.
  2. script - kachidindo kamene kadzachitidwa nthawi zonse pamene mtengo wa parameter kuchokera ku Referenced parameter field wasinthidwa (kwa ife, tikasankha pakati pa test1 ndi test2).
  3. Kufotokozera - Kufotokozera mwachidule kwa parameter.
  4. Mtundu Wosankha - mtundu wa chinthu chobwezeredwa ndi script (kwa ife tidzabwezera html code).
  5. Zomwe zimatchulidwa - dzina la parameter, pamene mtengo wake wasinthidwa, code kuchokera ku gawo la Script idzachitidwa.

Kupanga magawo osinthika mu ntchito ya Jenkins, kapena momwe mungapangire ntchito yanu kukhala yosavuta kugwiritsa ntchito

Tiyeni tipitirire mwachindunji kudzaza gawo lofunika kwambiri pagawoli. Timapatsidwa mitundu iwiri ya kukhazikitsa kuti tisankhepo: kugwiritsa ntchito Zolemba pa Groovy kapena Scriptler Script.
Timasankha yoyamba, popeza Scriptler ndi pulogalamu yowonjezera yomwe imasunga zolemba zomwe mudalemba kale ndikukulolani kuti muzigwiritsa ntchito pazinthu zina popanda kusindikizanso.

Groovy code kuti mutenge zonse kuchokera kumalo osankhidwa:

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

Popanda kulowa mwatsatanetsatane, khodi iyi imalandira dzina la microservice (MICROSERVICE_NAME) monga cholowa ndikutumiza pempho kwa Bululi (njira getCommitsForMicroservice) pogwiritsa ntchito API yake, ndikupeza id ndi kutumiza uthenga wazinthu zonse za microservice yopatsidwa.
Monga tanenera kale, code iyi iyenera kubwezera html yomwe idzawonetsedwa patsamba Pangani ndi Parameters ku Jenkins, kotero timakulunga zonse zomwe talandira kuchokera ku Bitbucket pamndandanda ndikuwonjezera kuti tisankhe.

Tikamaliza masitepe onse, tiyenera kupeza tsamba lokongola Pangani ndi Parameters.

Ngati mwasankha test1 microservice:

Kupanga magawo osinthika mu ntchito ya Jenkins, kapena momwe mungapangire ntchito yanu kukhala yosavuta kugwiritsa ntchito

Ngati mwasankha test2 microservice:

Kupanga magawo osinthika mu ntchito ya Jenkins, kapena momwe mungapangire ntchito yanu kukhala yosavuta kugwiritsa ntchito

Vomerezani kuti zidzakhala zosavuta kuti wogwiritsa ntchito azilumikizana ndi ntchito yanu motere kuposa kukopera ulalo nthawi zonse ndikuyang'ana id yofunikira.

PS Nkhaniyi ikupereka chitsanzo chosavuta, chomwe sichingakhale chothandiza mu mawonekedwe awa, popeza misonkhano ili ndi magawo ambiri osiyanasiyana, koma cholinga cha nkhaniyi chinali kusonyeza momwe chidacho chimagwirira ntchito, osati kupereka yankho logwira ntchito.

PSS Monga ndidalemba kale, ngati nkhaniyi ili yothandiza, ndiye kuti yotsatira ikhala ya kusinthika kwamphamvu kwa ntchito za Jenkins kudzera pa code.

Source: www.habr.com

Kuwonjezera ndemanga