Дженкинс тапсырмасында динамикалық параметрлерді жасау немесе тапсырмаңызды пайдаланушыға қалай ыңғайлы ету керек

Қайырлы күн, Хабар!

Бүгін мен қолданудың бір жолымен бөліскім келеді Белсенді таңдаулар плагині ішіндегі тапсырманы орындаңыз Дженкинс ең біртұтас және пайдаланушыға ыңғайлы.

Кіріспе

DevOps сияқты аббревиатура IT қауымдастығы үшін енді жаңа нәрсе емес. Көптеген адамдар үшін «DevOps жасау» тіркесі қандай да бір сиқырлы түймемен байланысты, оны басқан кезде қолданба коды автоматты түрде орналастырылған және тексерілген қолданбаға айналады (бәрі іс жүзінде күрделірек, бірақ біз барлық процестерден абстракция жасаймыз).

Осылайша, әкімшілер қолданбаны бір рет басу арқылы орналастыра алатындай сиқырлы түймені жасауға тапсырыс алдық. Бұл тапсырманы жүзеге асырудың әртүрлі түрлері бар: кез келген жедел хабаршылар үшін бот жазудан жеке қосымшаны әзірлеуге дейін. Осыған қарамастан, мұның бәрі бір мақсатқа ие - қосымшаны құру мен орналастыруды мүмкіндігінше ашық және ыңғайлы ету.

Біздің жағдайда біз қолданамыз Дженкинс.


Дженкинс тапсырмасында динамикалық параметрлерді жасау немесе тапсырмаңызды пайдаланушыға қалай ыңғайлы ету керек

Мақсаты

Белгілі бір нұсқаның таңдалған микросервисін құрастыруды және (немесе) орналастыруды іске қосатын ыңғайлы Дженкинс жұмысын жасаңыз.

Дженкинс тапсырмасында динамикалық параметрлерді жасау немесе тапсырмаңызды пайдаланушыға қалай ыңғайлы ету керек

Деректерді енгізу

Бізде әртүрлі микросервистердің бастапқы кодын қамтитын бірнеше репозиторийлер бар.

Параметрлерді анықтау

Біздің жұмысымызға кіріс ретінде келесі параметрлерді алу керек:

  1. Тапсырманы орындау кезінде құрастырғымыз және енгізгіміз келетін микросервис коды бар репозиторийдің URL мекенжайы.
  2. Құрылым орындалатын міндеттеменің идентификаторы.

СОЛ СИЯҚТЫ

Бұл тапсырманы орындаудың ең оңай жолы - String түріндегі екі параметрді жасау.

Дженкинс тапсырмасында динамикалық параметрлерді жасау немесе тапсырмаңызды пайдаланушыға қалай ыңғайлы ету керек

Бұл жағдайда пайдаланушыға репозиторийге жолды және орындау идентификаторын қолмен енгізу қажет болады, бұл мүлдем ыңғайлы емес.

Дженкинс тапсырмасында динамикалық параметрлерді жасау немесе тапсырмаңызды пайдаланушыға қалай ыңғайлы ету керек

БОЛҒАНДАЙ

Енді оның барлық артықшылықтарын қарастыру үшін параметрлердің басқа түрін қолданып көрейік.
Бірінші параметрді Choice Parameter түрімен, екіншісі - Active Choices Reactive Reference Parameter түрімен жасайық. Таңдау түрі бар параметрде таңдаулар өрісіне микросервистердің коды сақталатын репозитарийлердің атауларын қолмен қосамыз.

Дженкинс тапсырмасында динамикалық параметрлерді жасау немесе тапсырмаңызды пайдаланушыға қалай ыңғайлы ету керек

Егер аудитория бұл мақаланы ұнатса, келесі мақалада мен код арқылы сипаттаманы (Код ретінде конфигурациялау) пайдалана отырып, Дженкинстегі тапсырмаларды конфигурациялау процесін сипаттаймын, яғни. бізге репозиторий атауларын қолмен енгізу және параметрлерді жасау қажет емес, бәрі автоматты түрде орындалады (біздің код SCM репозиторийлерінің тізімін алады және осы тізіммен параметр жасайды).

Екінші параметрдің мәндері бірінші параметр қандай мән алатынына байланысты (test1 немесе test2) динамикалық түрде толтырылады, өйткені әрбір репозиторийдің өз міндеттемелер тізімі бар.

Белсенді таңдаулар Реактивті сілтеме параметрі толтыру үшін келесі өрістер бар:

  1. Толық аты-жөніңіз – параметр атауы.
  2. сценарий – Referenced параметр өрісіндегі параметр мәні өзгерген сайын орындалатын код (біздің жағдайда, test1 және test2 арасында таңдаған кезде).
  3. сипаттамасы – параметрдің қысқаша сипаттамасы.
  4. Таңдау түрі – сценариймен қайтарылған нысан түрі (біздің жағдайда html кодын қайтарамыз).
  5. Сілтеме берілген параметр – мәні өзгертілген параметрдің атауы, Script бөліміндегі код орындалады.

Дженкинс тапсырмасында динамикалық параметрлерді жасау немесе тапсырмаңызды пайдаланушыға қалай ыңғайлы ету керек

Осы параметрдегі ең маңызды өрісті толтыруға тікелей көшейік. Бізге таңдау үшін іске асырудың екі түрі ұсынылады: пайдалану Groovy сценарийі немесе Скрипттер сценарийі.
Біз біріншісін таңдаймыз, өйткені Scriptler — сіз бұрын жазған сценарийлерді сақтайтын және оларды қайтадан көшіру-қоюсыз басқа тапсырмаларда пайдалануға мүмкіндік беретін плагин.

Таңдалған репозиторийден барлық тапсырмаларды алу үшін керемет код:

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) алады және келесіге сұрау жібереді. Битбука (әдіс getCommitsForMicroservice) оның API интерфейсін пайдаланады және берілген микросервис үшін барлық міндеттемелердің идентификаторы мен міндеттеме хабарын алады.
Бұрын айтылғандай, бұл код бетте көрсетілетін html қайтаруы керек Параметрлермен құрастыру Дженкинсте, сондықтан біз Bitbucket-тен алынған барлық мәндерді тізімге орап, таңдау үшін қосамыз.

Барлық қадамдарды орындағаннан кейін біз осындай әдемі бетті алуымыз керек Параметрлермен құрастыру.

test1 микросервисін таңдасаңыз:

Дженкинс тапсырмасында динамикалық параметрлерді жасау немесе тапсырмаңызды пайдаланушыға қалай ыңғайлы ету керек

test2 микросервисін таңдасаңыз:

Дженкинс тапсырмасында динамикалық параметрлерді жасау немесе тапсырмаңызды пайдаланушыға қалай ыңғайлы ету керек

Әр жолы URL мекенжайын көшіріп, талап етілетін идентификаторды іздегеннен гөрі, пайдаланушыға тапсырмаңызбен осылай әрекеттесу әлдеқайда ыңғайлы болатынымен келісесіз.

PS Бұл мақалада өте жеңілдетілген мысал келтірілген, ол осы пішінде практикалық қолданылмауы мүмкін, өйткені жинақтардың басқа да көптеген параметрлері бар, бірақ бұл мақаланың мақсаты жұмыс шешімін қамтамасыз ету емес, құралдың қалай жұмыс істейтінін көрсету болды.

PSS Бұрын жазғанымдай, егер бұл мақала пайдалы болса, келесі мақала туралы болады код арқылы Дженкинс тапсырмаларының динамикалық конфигурациясы.

Ақпарат көзі: www.habr.com

пікір қалдыру