Դինամիկ պարամետրերի ստեղծում Jenkins-ի աշխատանքում կամ ինչպես ձեր առաջադրանքը դարձնել հարմար օգտագործողի համար

Լավ օր, Հաբր!

Այսօր ես կցանկանայի կիսվել օգտագործման եղանակներից մեկով Active Choices Plugin կատարել առաջադրանքը Jenkins առավել միասնական և օգտագործողի համար հարմար:

Ներածություն

DevOps-ի նման հապավումն այլևս նորություն չէ ՏՏ համայնքի համար։ Շատերի համար «do DevOps» արտահայտությունը կապված է ինչ-որ կախարդական կոճակի հետ, երբ սեղմվում է, հավելվածի կոդը ավտոմատ կերպով վերածվում է տեղակայված և փորձարկված հավելվածի (ամեն ինչ իրականում ավելի բարդ է, բայց մենք վերացվում ենք բոլոր գործընթացներից):

Այսպիսով, մենք հրահանգ ստացանք ստեղծել այնպիսի կախարդական կոճակ, որպեսզի ադմինիստրատորները կարողանան տեղադրել հավելվածը մեկ սեղմումով։ Այս առաջադրանքի իրականացման տարբեր տեսակներ կան՝ ակնթարթային մեսենջերներից որևէ մեկի համար բոտ գրելուց մինչև առանձին հավելված մշակելը: Այնուամենայնիվ, այս ամենն ունի նույն նպատակը՝ հավելվածի կառուցումն ու տեղադրումը սկսելը հնարավորինս թափանցիկ և հարմարավետ դարձնել։

Մեր դեպքում մենք կօգտագործենք Jenkins.


Դինամիկ պարամետրերի ստեղծում Jenkins-ի աշխատանքում կամ ինչպես ձեր առաջադրանքը դարձնել հարմար օգտագործողի համար

Առաջադրանք

Ստեղծեք Jenkins-ի հարմար աշխատանք, որը կսկսի որոշակի տարբերակի ընտրված միկրոծառայության կառուցումը և (կամ) տեղակայումը:

Դինամիկ պարամետրերի ստեղծում Jenkins-ի աշխատանքում կամ ինչպես ձեր առաջադրանքը դարձնել հարմար օգտագործողի համար

Մուտքագրեք տվյալներ

Մենք ունենք մի քանի պահեստներ, որոնք պարունակում են տարբեր միկրոծառայությունների սկզբնական կոդը:

Պարամետրերի սահմանում

Հետևյալ պարամետրերը պետք է ընդունվեն որպես մեր աշխատանքի մուտքագրում.

  1. Պահեստի URL-ը միկրոսպասարկման կոդով, որը մենք ցանկանում ենք ստեղծել և գործարկել աշխատանքը գործարկելիս:
  2. Հանձնարարականի ID, որից տեղի կունենա կառուցումը:

ԻՆՉՊԵՍ ՈՐ ԿԱ

Այս առաջադրանքն իրականացնելու ամենահեշտ ձևը String տիպի երկու պարամետր ստեղծելն է:

Դինամիկ պարամետրերի ստեղծում Jenkins-ի աշխատանքում կամ ինչպես ձեր առաջադրանքը դարձնել հարմար օգտագործողի համար

Այս դեպքում օգտատերը պետք է ձեռքով մուտքագրի պահեստի ուղին և commit id-ը, ինչը, ինչպես տեսնում եք, այնքան էլ հարմար չէ:

Դինամիկ պարամետրերի ստեղծում Jenkins-ի աշխատանքում կամ ինչպես ձեր առաջադրանքը դարձնել հարմար օգտագործողի համար

ԻՆՉՊԵՍ ԼԻՆԵԼ

Հիմա եկեք փորձենք մեկ այլ տեսակի պարամետրեր՝ հաշվի առնելու դրա բոլոր առավելությունները:
Եկեք ստեղծենք առաջին պարամետրը Choice Parameter տիպով, երկրորդը՝ Active Choices Reactive Reference Parameter: Ընտրություն տեսակի պարամետրում մենք ընտրության դաշտում ձեռքով կավելացնենք այն պահեստների անվանումները, որտեղ պահվում է մեր միկրոծառայությունների կոդը:

Դինամիկ պարամետրերի ստեղծում Jenkins-ի աշխատանքում կամ ինչպես ձեր առաջադրանքը դարձնել հարմար օգտագործողի համար

Եթե ​​հանդիսատեսին դուր է գալիս այս հոդվածը, ապա հաջորդ հոդվածում ես նկարագրելու եմ Jenkins-ում առաջադրանքների կազմաձևման գործընթացը՝ օգտագործելով նկարագրությունը կոդի միջոցով (Կազմաձևումը որպես կոդ), այսինքն. մենք կարիք չենք ունենա ձեռքով մուտքագրել պահեստների անունները և ստեղծել պարամետրեր, ամեն ինչ տեղի կունենա ինքնաբերաբար (մեր կոդը կստանա պահեստների ցուցակը SCM-ից և կստեղծի պարամետր այս ցուցակով):

Երկրորդ պարամետրի արժեքները կլցվեն դինամիկ կերպով՝ կախված նրանից, թե ինչ արժեք է վերցնում առաջին պարամետրը (test1 կամ test2), քանի որ յուրաքանչյուր պահեստ ունի պարտավորությունների իր ցանկը:

Active Choices Reactive Reference Parameter ունի լրացման հետևյալ դաշտերը.

  1. Անուն - պարամետրի անվանումը.
  2. Ձեռագիր – կոդը, որը կկատարվի ամեն անգամ, երբ Referenced պարամետր դաշտից պարամետրի արժեքը փոխվի (մեր դեպքում, երբ մենք ընտրում ենք test1-ի և test2-ի միջև):
  3. Նկարագրություն - պարամետրի համառոտ նկարագրությունը.
  4. Ընտրության տեսակը – սկրիպտի կողմից վերադարձված օբյեկտի տեսակը (մեր դեպքում մենք կվերադարձնենք html կոդը):
  5. Հղված պարամետր – պարամետրի անվանումը, որի արժեքը փոխվելիս կկատարվի Script բաժնի կոդը:

Դինամիկ պարամետրերի ստեղծում Jenkins-ի աշխատանքում կամ ինչպես ձեր առաջադրանքը դարձնել հարմար օգտագործողի համար

Եկեք ուղղակիորեն անցնենք այս պարամետրի ամենակարևոր դաշտի լրացմանը: Մեզ առաջարկվում է կատարման երկու տեսակ՝ ընտրել Groovy Script կամ Սկրիպտլերի սցենար.
Մենք ընտրում ենք առաջինը, քանի որ Scriptler-ը պարզապես փլագին է, որը պահպանում է նախկինում գրած սկրիպտները և թույլ է տալիս դրանք օգտագործել այլ առաջադրանքներում՝ առանց նորից պատճենելու:

Groovy կոդը՝ ընտրված պահոցից բոլոր պարտավորությունները ստանալու համար.

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

Առանց մանրամասների մեջ մտնելու՝ այս կոդը որպես մուտքագրում ստանում է միկրոծառայության անունը (MICROSERVICE_NAME) և հարցում է ուղարկում դեպի Bitbucket (մեթոդ getCommitsForMicroservice) օգտագործելով իր API-ն և ստանում է տվյալ միկրոծառայության բոլոր պարտավորությունների id և commit հաղորդագրությունը:
Ինչպես նշվեց ավելի վաղ, այս կոդը պետք է վերադարձնի html, որը կցուցադրվի էջում Կառուցել պարամետրերով Jenkins-ում, ուստի Bitbucket-ից ստացված բոլոր արժեքները փաթաթում ենք ցուցակի մեջ և ավելացնում դրանք ընտրելու համար:

Բոլոր քայլերն ավարտելուց հետո մենք պետք է ստանանք այսպիսի գեղեցիկ էջ Կառուցել պարամետրերով.

Եթե ​​ընտրել եք test1 միկրոսերվիսը.

Դինամիկ պարամետրերի ստեղծում Jenkins-ի աշխատանքում կամ ինչպես ձեր առաջադրանքը դարձնել հարմար օգտագործողի համար

Եթե ​​ընտրել եք test2 միկրոսերվիսը.

Դինամիկ պարամետրերի ստեղծում Jenkins-ի աշխատանքում կամ ինչպես ձեր առաջադրանքը դարձնել հարմար օգտագործողի համար

Համաձայնեք, որ օգտատիրոջ համար շատ ավելի հարմար կլինի այս ձևով շփվել ձեր առաջադրանքի հետ, քան ամեն անգամ պատճենել url-ը և փնտրել անհրաժեշտ commit id-ը:

PS Այս հոդվածը տալիս է շատ պարզեցված օրինակ, որը կարող է այս ձևով գործնական կիրառություն չունենալ, քանի որ հավաքներն ունեն ավելի շատ տարբեր պարամետրեր, բայց այս հոդվածի նպատակն էր ցույց տալ, թե ինչպես է աշխատում գործիքը, այլ ոչ թե աշխատանքային լուծում տալ:

PSS Ինչպես ավելի վաղ գրել եմ, եթե այս հոդվածը օգտակար է, ապա հաջորդը կլինի դրա մասին Jenkins-ի առաջադրանքների դինամիկ կոնֆիգուրացիա կոդի միջոցով.

Source: www.habr.com

Добавить комментарий