Ke hana ʻana i nā ʻāpana ikaika i kahi hana Jenkins, a i ʻole pehea e hoʻohana ai i kāu hana

He lā maikaʻi, Habr!

I kēia lā makemake wau e kaʻana like i kekahi o nā ala e hoʻohana ai Pākuʻi Active Choices hana i ka hana ma ʻO Jenkins ka lokahi a me ka hoohana.

Hōʻike

ʻO ia ka pōkole e like me DevOps ʻaʻole ia he mea hou no ke kaiāulu IT. No nā poʻe he nui, pili ka huaʻōlelo "do DevOps" i kekahi ʻano o ka pihi magic, ke kaomi ʻia, huli koke ke code noi i kahi noi i hoʻonohonoho ʻia a hoʻāʻo ʻia (ʻoi aku ka paʻakikī o nā mea a pau, akā ke hele nei mākou mai nā kaʻina hana a pau).

No laila, ua loaʻa iā mākou kahi kauoha e hana i kahi pihi kilokilo i hiki i nā luna hoʻokele ke kau i ka noi me hoʻokahi kaomi. Aia nā ʻano like ʻole o ka hoʻokō ʻana i kēia hana: mai ke kākau ʻana i ka bot no kekahi o nā ʻelele koke i ka hoʻomohala ʻana i kahi noi ʻokoʻa. Eia nō naʻe, he pahuhopu like kēia a pau - e hoʻomaka i ke kūkulu ʻana a me ka hoʻolaha ʻana o ka noi e like me ka maopopo a me ka maʻalahi.

I kā mākou hihia e hoʻohana mākou ʻO Jenkins.


Ke hana ʻana i nā ʻāpana ikaika i kahi hana Jenkins, a i ʻole pehea e hoʻohana ai i kāu hana

Nń Pahuhopu

E hana i kahi hana Jenkins maʻalahi e hoʻomaka i ke kūkulu ʻana a (a i ʻole) hoʻonohonoho ʻia o ka microservice i koho ʻia o kekahi mana.

Ke hana ʻana i nā ʻāpana ikaika i kahi hana Jenkins, a i ʻole pehea e hoʻohana ai i kāu hana

ʻikepili hoʻokomo

Loaʻa iā mākou kekahi mau waihona i loaʻa ka code kumu o nā microservices like ʻole.

Ka wehewehe ʻana i nā ʻāpana

Pono e loaʻa nā ʻāpana aʻe i mea hoʻokomo i kā mākou hana:

  1. ʻO ka URL o ka waihona me ka microservice code a mākou e makemake ai e kūkulu a kau i ka wā e holo ai ka hana.
  2. ID o ka commit mai kahi e kūkulu ʻia ai.

E like me ka mea

ʻO ke ala maʻalahi e hoʻokō ai i kēia hana, ʻo ia ka hana ʻana i ʻelua mau ʻāpana o ke ʻano String.

Ke hana ʻana i nā ʻāpana ikaika i kahi hana Jenkins, a i ʻole pehea e hoʻohana ai i kāu hana

I kēia hihia, pono ka mea hoʻohana e hoʻokomo lima i ke ala i ka waihona a me ka commit id, kahi āu e ʻike ai, ʻaʻole kūpono loa.

Ke hana ʻana i nā ʻāpana ikaika i kahi hana Jenkins, a i ʻole pehea e hoʻohana ai i kāu hana

EIA

I kēia manawa, e hoʻāʻo kākou i kekahi ʻano ʻāpana e noʻonoʻo i kona mau pono āpau.
E hana kākou i ka palena mua me ke ʻano koho koho, ka lua - Active Choices Reactive Reference Parameter. Ma ka palena me ke ʻano koho, e hoʻohui lima mākou i ka papa koho i nā inoa o nā repositories kahi i mālama ʻia ai ke code o kā mākou microservices.

Ke hana ʻana i nā ʻāpana ikaika i kahi hana Jenkins, a i ʻole pehea e hoʻohana ai i kāu hana

Inā makemake ka poʻe i kēia ʻatikala, a laila ma ka ʻatikala aʻe e wehewehe wau i ke kaʻina hana o ka hoʻonohonoho ʻana i nā hana ma Jenkins, me ka hoʻohana ʻana i kahi wehewehe ma o ke code (Configuration as code), i.e. ʻAʻole pono mākou e hoʻokomo lima i nā inoa waihona a hana i nā ʻāpana, e hana aunoa nā mea āpau (e loaʻa i kā mākou code kahi papa inoa o nā repositories mai SCM a hana i kahi ʻāpana me kēia papa inoa).

E hoʻopiha piha ʻia nā koina o ka ʻāpana lua, e pili ana i ka waiwai o ka mea mua (test1 a i ʻole test2), no ka mea, aia kēlā me kēia waihona i kāna papa inoa ponoʻī.

Nā Koho Kūlohelohe Reactive Reference Parameter Loaʻa iā ia nā kahua e hoʻopiha ai:

  1. inoa - inoa ʻāpana.
  2. kōmi'ōkuhi - code e hoʻokō ʻia i kēlā me kēia manawa ke hoʻololi ʻia ke kumukūʻai o ka pākuʻi mai ke kahua ʻo Referenced parameter (i kā mākou hihia, ke koho mākou ma waena o ka test1 a me ka test2).
  3. Description - wehewehe pōkole o ka ʻāpana.
  4. ʻAno koho - ke ʻano o ka mea i hoʻihoʻi ʻia e ka palapala (i kā mākou hihia e hoʻihoʻi mākou i ka code html).
  5. Hoʻohālikelike ʻia - ka inoa o ka palena, ke hoʻololi ʻia ka waiwai, e hoʻokō ʻia ke code mai ka ʻāpana Script.

Ke hana ʻana i nā ʻāpana ikaika i kahi hana Jenkins, a i ʻole pehea e hoʻohana ai i kāu hana

E hoʻomau pololei kākou i ka hoʻopiha ʻana i ke kahua koʻikoʻi ma kēia ʻāpana. Hāʻawi ʻia mākou i ʻelua ʻano hoʻokō e koho ai: hoʻohana Palapala Groovy ai ole ia, Scriptler Script.
Koho mākou i ka mea mua, no ka mea, he plugin wale nō ʻo Scriptler e mālama ai i nā palapala āu i kākau mua ai a hiki iā ʻoe ke hoʻohana iā lākou i nā hana ʻē aʻe me ka ʻole o ka kope kope ʻana.

Groovy code e kiʻi i nā hana āpau mai ka waihona i koho ʻia:

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

Me ka hele ʻole ʻana i nā kikoʻī, loaʻa kēia code i ka inoa microservice (MICROSERVICE_NAME) i mea hoʻokomo a hoʻouna i kahi noi i Bitbucket (ʻano getCommitsForMicroservice) me ka hoʻohana ʻana i kāna API, a loaʻa i ka id a me ka hoʻokō memo o nā hana āpau no kahi microservice i hāʻawi ʻia.
E like me ka mea i ʻōlelo mua ʻia, pono e hoʻihoʻi kēia code i ka html e hōʻike ʻia ma ka ʻaoʻao Kūkulu me nā ʻāpana ma Jenkins, no laila mākou e hoʻopili i nā waiwai i loaʻa mai Bitbucket i kahi papa inoa a hoʻohui iā lākou e koho.

Ma hope o ka pau ʻana o nā ʻanuʻu a pau, pono mākou e loaʻa i kahi ʻaoʻao nani Kūkulu me nā ʻāpana.

Inā ʻoe i koho i ka lawelawe microservice test1:

Ke hana ʻana i nā ʻāpana ikaika i kahi hana Jenkins, a i ʻole pehea e hoʻohana ai i kāu hana

Inā ʻoe i koho i ka lawelawe microservice test2:

Ke hana ʻana i nā ʻāpana ikaika i kahi hana Jenkins, a i ʻole pehea e hoʻohana ai i kāu hana

E ʻae ʻoi aku ka maʻalahi o ka mea hoʻohana e launa pū me kāu hana ma kēia ʻano ma mua o ke kope ʻana i ka url i kēlā me kēia manawa a ʻimi i ka id commit pono.

PS Hāʻawi kēia ʻatikala i kahi hiʻohiʻona maʻalahi loa, ʻaʻole hiki ke hoʻohana pono i kēia ʻano, no ka mea he nui nā ʻāpana like ʻole o nā hui, akā ʻo ke kumu o kēia ʻatikala e hōʻike i ke ʻano o ka hana ʻana o ka hāmeʻa, ʻaʻole e hāʻawi i kahi hopena hana.

PSS E like me kaʻu i kākau mua ai, inā pono kēia ʻatikala, a laila e pili ana ka mea aʻe hoʻonohonoho ikaika o nā hana Jenkins ma o ke code.

Source: www.habr.com

Pākuʻi i ka manaʻo hoʻopuka