Женкинсийн ажилд динамик параметрүүдийг үүсгэх, эсвэл даалгавраа хэрхэн ашиглахад хялбар болгох

Сайхан өдөр, Хабр!

Өнөөдөр би ашиглах аргуудын нэгийг хуваалцахыг хүсч байна Идэвхтэй сонголтуудын залгаас дотор даалгавраа хий Jenkins хамгийн нэгдсэн бөгөөд хэрэглэгчдэд ээлтэй.

Танилцуулга

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

Тиймээс админууд програмыг нэг товшилтоор байршуулах боломжтой ийм шидэт товчлуур хийх захиалга бидэнд ирсэн. Энэ даалгаврыг хэрэгжүүлэх янз бүрийн хэлбэрүүд байдаг: аль нэгэн шуурхай мессенжерт зориулж робот бичихээс эхлээд тусдаа програм боловсруулах хүртэл. Гэсэн хэдий ч энэ бүхэн ижил зорилготой - програмыг бүтээх, байршуулах ажлыг аль болох ил тод, хялбар болгох.

Манай тохиолдолд бид ашиглах болно Jenkins.


Женкинсийн ажилд динамик параметрүүдийг үүсгэх, эсвэл даалгавраа хэрхэн ашиглахад хялбар болгох

Зорилго

Тодорхой хувилбарын сонгосон микро үйлчилгээг бүтээх болон (эсвэл) байршуулах ажлыг эхлүүлэх тохиромжтой Женкинсийн ажлыг бий болго.

Женкинсийн ажилд динамик параметрүүдийг үүсгэх, эсвэл даалгавраа хэрхэн ашиглахад хялбар болгох

Оролтын мэдээлэл

Бидэнд янз бүрийн микро үйлчилгээний эх кодыг агуулсан хэд хэдэн репозитор байдаг.

Параметрүүдийг тодорхойлох

Дараахь параметрүүдийг манай ажлын орц болгон авах ёстой.

  1. Ажлыг ажиллуулж байх үед бидний барьж байгуулахыг хүсэж буй бичил үйлчилгээний код бүхий репозиторын URL.
  2. Бүтээлт хийгдэх амлалтын ID.

ЯГ БАЙНА

Энэ ажлыг гүйцэтгэх хамгийн хялбар арга бол String төрлийн хоёр параметрийг үүсгэх явдал юм.

Женкинсийн ажилд динамик параметрүүдийг үүсгэх, эсвэл даалгавраа хэрхэн ашиглахад хялбар болгох

Энэ тохиолдолд хэрэглэгч хадгалах газар руу орох зам болон id ID-г гараар оруулах шаардлагатай бөгөөд энэ нь тийм ч тохиромжтой биш юм.

Женкинсийн ажилд динамик параметрүүдийг үүсгэх, эсвэл даалгавраа хэрхэн ашиглахад хялбар болгох

БАЙХ БОЛОМЖТОЙ

Одоо түүний бүх давуу талыг авч үзэхийн тулд өөр төрлийн параметрүүдийг туршиж үзье.
Эхний параметрийг Сонголт параметр, хоёрдугаарт - Active Choices Reactive Reference Parameter төрлөөр үүсгэцгээе. Сонголт төрлөөр параметрийн хувьд бид Сонголт талбарт манай микро үйлчилгээний кодыг хадгалдаг агуулахуудын нэрийг гараар нэмнэ.

Женкинсийн ажилд динамик параметрүүдийг үүсгэх, эсвэл даалгавраа хэрхэн ашиглахад хялбар болгох

Хэрэв үзэгчдэд энэ нийтлэл таалагдсан бол дараагийн нийтлэлд би кодоор дамжуулан тайлбарыг ашиглан Женкинс дэх даалгавруудыг тохируулах үйл явцыг тайлбарлах болно (Тохиргоог код хэлбэрээр), өөрөөр хэлбэл. Бид агуулахын нэрийг гараар оруулж, параметр үүсгэх шаардлагагүй, бүх зүйл автоматаар хийгдэх болно (манай код SCM-ээс хадгалах сангийн жагсаалтыг хүлээн авч, энэ жагсаалттай параметр үүсгэх болно).

Хоёрдахь параметрийн утгууд нь эхний параметр ямар утгыг авахаас (тест1 эсвэл тест2) хамаарч динамикаар бөглөгдөнө, учир нь репозитор бүр өөрийн гэсэн үүргийн жагсаалттай байдаг.

Идэвхтэй сонголтууд Реактив лавлагаа параметр бөглөх дараах талбаруудтай:

  1. нэр - параметрийн нэр.
  2. Script – Referenced параметрийн талбарын параметрийн утгыг өөрчлөх болгонд гүйцэтгэх код (бидний хувьд test1 болон test2 хоёрын аль нэгийг сонгоход).
  3. Тодорхойлолт - параметрийн товч тайлбар.
  4. Сонголт төрөл – скриптээр буцаасан объектын төрөл (бидний тохиолдолд бид html кодыг буцаана).
  5. Ашигласан параметр – параметрийн нэр, утга нь өөрчлөгдөхөд Скрипт хэсгийн кодыг гүйцэтгэнэ.

Женкинсийн ажилд динамик параметрүүдийг үүсгэх, эсвэл даалгавраа хэрхэн ашиглахад хялбар болгох

Энэ параметрийн хамгийн чухал талбарыг бөглөхдөө шууд орцгооё. Бидэнд хоёр төрлийн хэрэгжилтийг санал болгож байна: ашиглах 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-г ашиглан тухайн бичил үйлчилгээний бүх амлалтын id болон commit мессежийг авдаг.
Өмнө дурьдсанчлан, энэ код нь хуудсан дээр гарч ирэх html-г буцаах ёстой Параметрээр бүтээх Jenkins-д байгаа тул бид Bitbucket-аас хүлээн авсан бүх утгыг жагсаалтад оруулаад сонгохдоо нэмнэ.

Бүх алхмуудыг дуусгасны дараа бид ийм сайхан хуудас авах ёстой Параметрээр бүтээх.

Хэрэв та test1 микро үйлчилгээг сонгосон бол:

Женкинсийн ажилд динамик параметрүүдийг үүсгэх, эсвэл даалгавраа хэрхэн ашиглахад хялбар болгох

Хэрэв та test2 микро үйлчилгээг сонгосон бол:

Женкинсийн ажилд динамик параметрүүдийг үүсгэх, эсвэл даалгавраа хэрхэн ашиглахад хялбар болгох

Хэрэглэгч таны даалгавартай ингэж харьцах нь url болгонд хуулж, шаардлагатай commit ID хайхаас хамаагүй илүү тохиромжтой гэдгийг хүлээн зөвшөөрч байна.

PS Энэхүү нийтлэл нь маш хялбаршуулсан жишээг өгсөн бөгөөд угсралт нь өөр өөр параметртэй байдаг тул энэ хэлбэрээр ашиглах боломжгүй байж магадгүй ч энэ нийтлэлийн зорилго нь ажлын шийдлийг өгөх бус уг хэрэгсэл хэрхэн ажилладагийг харуулах явдал байв.

PSS Өмнө нь бичсэнчлэн, хэрэв энэ нийтлэл хэрэгтэй бол дараагийнх нь тухай байх болно кодоор дамжуулан Женкинсийн даалгаврын динамик тохиргоо.

Эх сурвалж: www.habr.com

сэтгэгдэл нэмэх