Дженкинс жумушунда динамикалык параметрлерди түзүү же тапшырмаңызды колдонуучуга кантип ыңгайлуу кылуу керек

Кайырдуу күн, Хабр!

Бүгүн мен колдонуунун жолдорунун бири менен бөлүшкүм келет Active Choices Plugin тапшырманы аткарыңыз Jenkins эң бирдиктүү жана колдонуучуга ыңгайлуу.

тааныштыруу

DevOps сыяктуу аббревиатура IT коомчулугу үчүн жаңы нерсе эмес. Көптөгөн адамдар үчүн "DevOps жаса" деген сөз айкашы кандайдыр бир сыйкырдуу баскыч менен байланышкан, басылганда, колдонмо коду автоматтык түрдө орнотулган жана текшерилген тиркемеге айланат (чындыгында баары татаал, бирок биз бардык процесстерден абстракциялап жатабыз).

Ошентип, биз администраторлор тиркемени бир чыкылдатуу менен жайгаштырышы үчүн ушундай сыйкырдуу баскычты жасоого буйрук алдык. Бул тапшырманы ишке ашыруунун ар кандай түрлөрү бар: тез мессенджерлердин бирине бот жазуудан өзүнчө тиркемени иштеп чыгууга чейин. Ошого карабастан, мунун баары бир максатты көздөйт - тиркемени курууну жана жайылтууну мүмкүн болушунча ачык жана ыңгайлуу кылуу.

Биздин учурда биз колдонобуз Jenkins.


Дженкинс жумушунда динамикалык параметрлерди түзүү же тапшырмаңызды колдонуучуга кантип ыңгайлуу кылуу керек

маселе

Белгилүү бир версиянын тандалган микросервисин курууну жана (же) жайылтууну ишке ашыра турган ыңгайлуу Дженкинс жумушун түзүңүз.

Дженкинс жумушунда динамикалык параметрлерди түзүү же тапшырмаңызды колдонуучуга кантип ыңгайлуу кылуу керек

Маалыматтарды киргизүү

Бизде ар кандай микросервистердин баштапкы кодун камтыган бир нече репозиторийлер бар.

Параметрлерди аныктоо

Төмөнкү параметрлер биздин жумушка киргизүү катары кабыл алынышы керек:

  1. Биз куруп, жумушту иштетип жатканда жайылгыбыз келген микросервис коду менен репозиторийдин URL дареги.
  2. Куруу боло турган милдеттенменин идентификатору.

БОЛГОНДОЙ

Бул тапшырманы аткаруунун эң оңой жолу - String түрүндөгү эки параметрди түзүү.

Дженкинс жумушунда динамикалык параметрлерди түзүү же тапшырмаңызды колдонуучуга кантип ыңгайлуу кылуу керек

Бул учурда, колдонуучуга репозиторийге жолду жана идентификаторду кол менен киргизүү керек болот, бул сиз көрүп тургандай, таптакыр ыңгайлуу эмес.

Дженкинс жумушунда динамикалык параметрлерди түзүү же тапшырмаңызды колдонуучуга кантип ыңгайлуу кылуу керек

БОЛГОНУНДА

Эми анын бардык артыкчылыктарын карап чыгуу үчүн параметрлердин дагы бир түрүн карап көрөлү.
Биринчи параметрди тандоо параметри түрү менен түзөлү, экинчиси - Active Choices Reactive Reference Parameter. Тандоо түрү менен параметрде биз Тандоо талаасына биздин микросервистердин коду сакталган репозиторийлердин аттарын кол менен кошобуз.

Дженкинс жумушунда динамикалык параметрлерди түзүү же тапшырмаңызды колдонуучуга кантип ыңгайлуу кылуу керек

Эгерде аудитория бул макаланы жактырса, анда кийинки макалада мен Дженкинстеги тапшырмаларды конфигурациялоо процессин сүрөттөп берем, код аркылуу сыпаттаманы (Код катары конфигурациялоо), б.а. бизге репозиторийлердин аттарын кол менен киргизүүнүн жана параметрлерди түзүүнүн кереги жок, баары автоматтык түрдө ишке ашат (биздин код SCMден репозиторийлердин тизмесин алат жана бул тизме менен параметр түзөт).

Экинчи параметрдин маанилери биринчи параметр кандай мааниге ээ болгонуна жараша (test1 же test2) динамикалык түрдө толтурулат, анткени ар бир репозиторийде өз милдеттенмелеринин тизмеси бар.

Активдүү тандоолор Реактивдүү маалымдама параметри толтуруу үчүн төмөнкү талаалар бар:

  1. ысым - параметр аты.
  2. кол шрифти – Шилтеме берилген параметр талаасындагы параметрдин мааниси өзгөргөн сайын аткарыла турган код (биздин учурда, биз test1 менен test2ди тандаганда).
  3. баяндоо – параметрдин кыскача баяндамасы.
  4. Тандоо түрү – скрипт тарабынан кайтарылган объекттин түрү (биздин учурда html кодун кайтарып беребиз).
  5. Шилтемеленген параметр – параметрдин аталышы, анын мааниси өзгөргөндө, Скрипт бөлүмүндөгү код аткарылат.

Дженкинс жумушунда динамикалык параметрлерди түзүү же тапшырмаңызды колдонуучуга кантип ыңгайлуу кылуу керек

Келгиле, бул параметрдеги эң маанилүү талааны толтурууга түздөн-түз киришели. Бизге тандоо үчүн ишке ашыруунун эки түрү сунушталат: колдонуу Groovy Script же Scriptler Script.
Биринчисин тандайбыз, анткени 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) алат жана төмөнкүгө сурам жөнөтөт Bitbucket (ыкма getCommitsForMicroservice) анын API'син колдонуп, берилген микросервис үчүн бардык милдеттенмелердин id жана commit билдирүүсүн алат.
Жогоруда айтылгандай, бул код баракта көрсөтүлө турган html кайтарышы керек Параметрлер менен куруу Дженкинсте, ошондуктан биз Bitbucketтен алынган бардык маанилерди тизмеге ороп, аларды тандоо үчүн кошобуз.

Бардык кадамдарды аткаргандан кийин, биз ушундай кооз баракты алышыбыз керек Параметрлер менен куруу.

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

Дженкинс жумушунда динамикалык параметрлерди түзүү же тапшырмаңызды колдонуучуга кантип ыңгайлуу кылуу керек

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

Дженкинс жумушунда динамикалык параметрлерди түзүү же тапшырмаңызды колдонуучуга кантип ыңгайлуу кылуу керек

Колдонуучуга url'ди ар бир жолу көчүрүп алып, талап кылынган идентификаторду издөөгө караганда, сиздин тапшырмаңыз менен ушундай жол менен иштешүү алда канча ыңгайлуу болот деп макул болуңуз.

PS Бул макалада абдан жөнөкөйлөштүрүлгөн мисал келтирилген, ал бул формада практикалык колдонулбашы мүмкүн, анткени ассамблеялар дагы көптөгөн ар кандай параметрлерге ээ, бирок бул макаланын максаты жумушчу чечимди камсыз кылуу эмес, куралдын кантип иштээрин көрсөтүү болгон.

PSS Мен мурда жазгандай, бул макала пайдалуу болсо, анда кийинки макала жөнүндө болот код аркылуу Дженкинс тапшырмаларынын динамикалык конфигурациясы.

Source: www.habr.com

Комментарий кошуу