Эҷоди параметрҳои динамикӣ дар кори Ҷенкинс ё чӣ гуна вазифаи худро барои корбар осон кардан

Рӯзи нағз, Хабр!

Имрӯз ман мехоҳам яке аз роҳҳои истифодаро мубодила кунам Васлкунаки интихобҳои фаъол вазифаро дар Ҷенкинс ягонатарин ва барои истифодабарандагон осонтарин.

Муқаддима

Чунин ихтисора ба монанди DevOps дигар барои ҷомеаи IT чизи нав нест. Барои бисёр одамон, ибораи "Do DevOps" бо як навъ тугмаи ҷодугарӣ алоқаманд аст, вақте ки пахш кунед, рамзи барнома ба таври худкор ба як барномаи ҷойгиршуда ва озмудашуда табдил меёбад (ҳама чиз воқеан мураккабтар аст, аммо мо аз ҳама равандҳо абстракт мекунем).

Ҳамин тавр, мо фармоиш гирифтем, ки чунин тугмаи ҷодугарӣ созем, то маъмурон тавонанд барномаро бо як клик ҷойгир кунанд. Намудҳои гуногуни амалисозии ин вазифа вуҷуд доранд: аз навиштани бот барои ҳар як паёмнависии фаврӣ то таҳияи барномаи алоҳида. Бо вуҷуди ин, ҳамаи ин як ҳадаф дорад - то ҳадди имкон шаффоф ва қулай оғоз кардани сохтан ва ҷойгиркунии барнома.

Дар ҳолати мо мо истифода хоҳем кард Ҷенкинс.


Эҷоди параметрҳои динамикӣ дар кори Ҷенкинс ё чӣ гуна вазифаи худро барои корбар осон кардан

Мақсад

Кори мувофиқи Ҷенкинс эҷод кунед, ки сохтан ва (ё) ҷойгиркунии микросервиси интихобшудаи версияи муайянро оғоз мекунад.

Эҷоди параметрҳои динамикӣ дар кори Ҷенкинс ё чӣ гуна вазифаи худро барои корбар осон кардан

Маълумоти воридшавӣ

Мо якчанд репозиторий дорем, ки дорои рамзи сарчашмаи хидматҳои гуногун.

Муайян кардани параметрҳо

Параметрҳои зерин бояд ҳамчун вуруд ба кори мо қабул карда шаванд:

  1. URL-и анбор бо рамзи микросервис, ки мо мехоҳем ҳангоми иҷро кардани кор сохта ва ҷойгир кунем.
  2. ID-и ӯҳдадорие, ки сохтмон аз он сурат мегирад.

ЧИ ГУНА АСТ

Роҳи осонтарини иҷрои ин вазифа эҷоди ду параметри навъи String мебошад.

Эҷоди параметрҳои динамикӣ дар кори Ҷенкинс ё чӣ гуна вазифаи худро барои корбар осон кардан

Дар ин ҳолат, ба корбар лозим меояд, ки ба таври дастӣ роҳ ба анбор ва ID-ро ворид кунад, ки шумо мебинед, он комилан қулай нест.

Эҷоди параметрҳои динамикӣ дар кори Ҷенкинс ё чӣ гуна вазифаи худро барои корбар осон кардан

ТО КИ БОШАД

Акнун биёед як намуди дигари параметрҳоро санҷем, то ҳамаи бартариҳои онро баррасӣ кунем.
Биёед параметри якумро бо навъи Интихоби Параметр, дуюм - Параметри истинодҳои реактивии интихобҳо эҷод кунем. Дар параметр бо навъи Интихоб, мо ба таври дастӣ дар майдони Интихобҳо номҳои анборҳоеро, ки дар он рамзи хидматрасонии микросервисҳои мо нигоҳ дошта мешавад, илова мекунем.

Эҷоди параметрҳои динамикӣ дар кори Ҷенкинс ё чӣ гуна вазифаи худро барои корбар осон кардан

Агар ба шунавандагон ин мақола маъқул бошад, пас дар мақолаи навбатӣ ман раванди конфигуратсияи вазифаҳоро дар Ҷенкинс бо истифода аз тавсиф тавассути код тавсиф мекунам (Танзимот ҳамчун код), яъне. ба мо лозим нест, ки номҳои анборро дастӣ ворид кунем ва параметрҳоро эҷод кунем, ҳама чиз ба таври худкор рӯй медиҳад (коди мо рӯйхати анборҳоро аз SCM мегирад ва бо ин рӯйхат параметр эҷод мекунад).

Қиматҳои параметри дуюм вобаста ба кадом арзише, ки параметри аввалро мегирад (test1 ё test2) ба таври динамикӣ пур карда мешаванд, зеро ҳар як анбор рӯйхати ӯҳдадориҳои худро дорад.

Интихоби фаъол Параметри истинод реактивӣ дорои майдонҳои зерин барои пур кардан:

  1. ном - номи параметр.
  2. барномаи саҳнавӣ – код, ки ҳар боре, ки арзиши параметр аз майдони параметри истинодшуда иваз карда мешавад (дар ҳолати мо, вақте ки мо байни test1 ва test2 интихоб мекунем) иҷро карда мешавад.
  3. Тавсифи – тавсифи мухтасари параметр.
  4. Навъи интихоб – намуди объекте, ки аз ҷониби скрипт бармегардад (дар ҳолати мо мо рамзи html-ро бармегардонем).
  5. Параметри истинодшуда – номи параметр, ки арзиши он иваз карда мешавад, рамзи бахши Script иҷро мешавад.

Эҷоди параметрҳои динамикӣ дар кори Ҷенкинс ё чӣ гуна вазифаи худро барои корбар осон кардан

Биёед бевосита ба пур кардани майдони муҳимтарин дар ин параметр идома диҳем. Мо ду намуди татбиқро барои интихоб пешниҳод мекунем: истифода Скрипти Groovy ё Скрипти Scriptler.
Мо аввалинро интихоб мекунем, зеро 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-и худ ва идентификатсия ва паёми супоридани ҳама ӯҳдадориҳоро барои хидмати хурди додашуда мегирад.
Тавре ки қаблан зикр гардид, ин код бояд html-ро баргардонад, ки дар саҳифа намоиш дода мешавад Бо параметрҳо созед дар Ҷенкинс, аз ин рӯ мо ҳама арзишҳои аз Bitbucket гирифташударо дар рӯйхат ҷамъ мекунем ва онҳоро барои интихоб илова мекунем.

Пас аз анҷом додани ҳамаи қадамҳо, мо бояд чунин саҳифаи зебо ба даст орем Бо параметрҳо созед.

Агар шумо microservice test1-ро интихоб кунед:

Эҷоди параметрҳои динамикӣ дар кори Ҷенкинс ё чӣ гуна вазифаи худро барои корбар осон кардан

Агар шумо microservice test2-ро интихоб кунед:

Эҷоди параметрҳои динамикӣ дар кори Ҷенкинс ё чӣ гуна вазифаи худро барои корбар осон кардан

Розӣ шавед, ки барои корбар муомила кардан бо вазифаи шумо ба ин тарз хеле қулайтар аст, назар ба нусхабардории URL-и ҳар дафъа ва ҷустуҷӯи ID-и ӯҳдадориҳо.

PS Ин мақола як мисоли хеле соддашударо пешниҳод мекунад, ки метавонад дар ин шакл истифодаи амалӣ набошад, зеро маҷлисҳо параметрҳои бештари гуногун доранд, аммо ҳадафи ин мақола нишон додани чӣ гуна кор кардани асбоб буд, на пешниҳоди ҳалли корӣ.

PSS Тавре ки ман қаблан навишта будам, агар ин мақола муфид бошад, пас мақолаи навбатӣ дар бораи он хоҳад буд конфигуратсияи динамикии вазифаҳои Ҷенкинс тавассути код.

Манбаъ: will.com

Илова Эзоҳ