Afirandina parametreyên dînamîkî di karekî Jenkins de, an meriv çawa peywira xwe bikarhêner-heval dike

Roj baş, Habr!

Îro ez dixwazim yek ji awayên karanîna parve bikim Pêveka Hilbijartinên Çalak di nav de peywirê bikin Jenkins ya herî yekgirtî û bikarhêner-heval.

Pîrozbahiyê

Kurtenivîsek wekî DevOps êdî ji bo civaka IT-ê ne tiştek nû ye. Ji bo pir kesan, peyva "DevOps bike" bi cûreyek bişkojka sêrbaziyê ve girêdayî ye, dema ku tê klîk kirin, koda serîlêdanê bixweber vediguhere serîlêdanek veqetandî û ceribandin (bi rastî her tişt tevlihevtir e, lê em ji hemî pêvajoyan qut dibin).

Ji ber vê yekê, me fermanek stend ku em bişkojek wusa sêrbaz çêbikin da ku rêvebir karibin bi yek klîk serîlêdanê bicîh bikin. Cûreyên cîbecîkirina vê peywirê hene: ji nivîsandina botekê ji bo yek ji peyamnêrên tavilê bigire heya pêşxistina serîlêdanek cihêreng. Digel vê yekê, ev hemî heman armanc e - ku destpêkirina çêkirin û bicîhkirina serîlêdanê bi qasî ku gengaz be zelal û hêsantir bike.

Di rewşa me de em ê bikar bînin Jenkins.


Afirandina parametreyên dînamîkî di karekî Jenkins de, an meriv çawa peywira xwe bikarhêner-heval dike

Armanc

Karûbarek Jenkins a hêsan biafirînin ku dê dest bi çêkirin û (an) bicîhkirina mîkroxizmeta hilbijartî ya guhertoyek diyar bike.

Afirandina parametreyên dînamîkî di karekî Jenkins de, an meriv çawa peywira xwe bikarhêner-heval dike

Daneyên têketinê

Gelek depoyên me hene ku koda çavkaniyê ya mîkroxizmetên cihêreng vedihewîne.

Diyarkirina parametreyan

Pêdivî ye ku pîvanên jêrîn wekî têketina karê me werin wergirtin:

  1. URL-a depoyê bi koda mîkroxizmetê ya ku em dixwazin dema xebatê dimeşînin ava bikin û bi cih bikin.
  2. Nasnameya komîteya ku dê avahî jê çêbibe.

WEK

Rêya herî hêsan a pêkanîna vî karî ev e ku meriv du pîvanên celebê String biafirîne.

Afirandina parametreyên dînamîkî di karekî Jenkins de, an meriv çawa peywira xwe bikarhêner-heval dike

Di vê rewşê de, bikarhêner dê hewce bike ku bi destan bikeve riya depoyê û id-ê ku, hûn dibînin, bi tevahî ne rehet e.

Afirandina parametreyên dînamîkî di karekî Jenkins de, an meriv çawa peywira xwe bikarhêner-heval dike

AS TO BE

Naha em werin celebek din a parametreyan biceribîne da ku hemî avantajên wê bifikirin.
Werin em pîvana yekem bi celebê Parametreya Hilbijartinê biafirînin, ya duyemîn - Vebijarkên Çalak Parametreya Reaktîf a Reaktîf. Di parametreya bi tîpa Hilbijartinê de, em ê bi destan navên depoyên ku koda mîkroxizmetên me lê têne hilanîn li qada Hilbijartinan zêde bikin.

Afirandina parametreyên dînamîkî di karekî Jenkins de, an meriv çawa peywira xwe bikarhêner-heval dike

Ger temaşevan ji vê gotarê hez bike, wê hingê di gotara din de ez ê pêvajoya mîhengkirina peywiran li Jenkins vebêjim, bi karanîna ravekek bi kodê (Vesazkirina wekî kod), ango. em ê ne hewce ne ku bi destan navên depoyan binivîsin û pîvanan biafirînin, her tişt dê bixweber çêbibe (koda me dê navnîşek depoyan ji SCM bistîne û bi vê navnîşê re pîvanek biafirîne).

Nirxên parametreya duyemîn dê bi rengek dînamîkî were dagirtin, li gorî kîjan nirxê pîvana yekem digire (test1 an test2), ji ber ku her depo navnîşa xwe ya peywiran heye.

Vebijarkên Çalak Parametreya Reaktîf Referansê qadên jêrîn hene ku tijî bikin:

  1. Nav - navê parametre.
  2. Nivîs - koda ku dê her carê ku nirxa pîvana ji qada parametreya Referanskirî tê guheztin (di rewşa me de, gava ku em di navbera test1 û test2 de hilbijêrin) were darve kirin.
  3. Terîf - kurte danasîna parametreyê.
  4. Tîpa Hilbijartinê - celebê tiştê ku ji hêla skrîptê ve hatî vegerandin (di doza me de em ê koda html-ê vegerînin).
  5. Parametreya referanskirî - navê pîvanê, dema ku nirxa wê were guheztin, koda ji beşa Skrîptê dê were darve kirin.

Afirandina parametreyên dînamîkî di karekî Jenkins de, an meriv çawa peywira xwe bikarhêner-heval dike

Ka em rasterast bi dagirtina qada herî girîng a di vê parametreyê de bimeşin. Ji me re du celeb pêkanîn têne pêşkêş kirin ku ji wan hilbijêrin: bikar anîn Groovy Script an Scriptler Script.
Em ya yekem hildibijêrin, ji ber ku Scriptler tenê pêvekek e ku nivîsarên ku we berê nivîsandine hildibijêre û dihêle hûn wan di karên din de bêyî kopî-pastkirinê dîsa bikar bînin.

Koda Groovy ji bo wergirtina hemî peywiran ji depoya hilbijartî:

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

Bêyî ku bikeve nav hûrguliyan, ev kod navê mîkroxizmetê (MICROSERVICE_NAME) wekî têketinê distîne û daxwazek ji Bitbucket (awa getCommitsForMicroservice) API-ya xwe bikar tîne, û ji bo mîkroxizmetek diyar peyama nasname û peywirê ya hemî peywiran digire.
Wekî ku berê behs kir, divê ev kod html-ya ku dê li ser rûpelê were xuyang kirin vegerîne Bi Parametreyan ava bikin li Jenkins, ji ber vê yekê em hemî nirxên wergirtî yên ji Bitbucket di navnîşek de dixin û wan lê zêde dikin ku hilbijêrin.

Piştî temamkirina hemî gavan, divê em rûpelek wusa xweş bistînin Bi Parametreyan ava bikin.

Ger we microservice test1 hilbijart:

Afirandina parametreyên dînamîkî di karekî Jenkins de, an meriv çawa peywira xwe bikarhêner-heval dike

Ger we microservice test2 hilbijart:

Afirandina parametreyên dînamîkî di karekî Jenkins de, an meriv çawa peywira xwe bikarhêner-heval dike

Bipejirînin ku ew ê ji bikarhêner re pir hêsantir be ku bi vî rengî bi peywira we re têkilî daynin ji kopîkirina url-ê her carê û lêgerîna li nasnameya commit-a pêwîst.

PS Ev gotar mînakek pir hêsan peyda dike, ku dibe ku di vê formê de ne bikêrhatî be, ji ber ku meclîs xwedan gelek pîvanên cûdatir in, lê mebesta vê gotarê ew bû ku nîşan bide ka amûr çawa dixebite, ne ku çareseriyek xebatê peyda bike.

PSS Wekî ku min berê jî nivîsî, heke ev gotar bikêr be, wê hingê ya din dê li ser be veavakirina dînamîkî ya karên Jenkins bi kodê.

Source: www.habr.com

Add a comment