在 Jenkins 作業中建立動態參數,或如何讓您的任務變得用戶友好

再會, 哈伯!

今天就跟大家分享一個使用方法 主動選擇插件 做任務 詹金斯 最統一、最人性化。

介紹

對 IT 界來說,DevOps 這樣的縮寫已經不是什麼新鮮事了。 對於許多人來說,「do DevOps」這個短語與某種神奇的按鈕相關聯,當單擊時,應用程式程式碼會自動變成已部署和測試的應用程式(一切實際上更複雜,但我們正在從所有流程中抽象化)。

因此,我們收到了一份訂單,製作這樣一個神奇的按鈕,以便管理員可以一鍵部署應用程式。 此任務有多種實現方式:從為任何即時訊息程式編寫機器人到開發單獨的應用程式。 儘管如此,所有這些都有相同的目標 - 使應用程式的建置和部署開始盡可能透明和方便。

在我們的例子中,我們將使用 詹金斯.


在 Jenkins 作業中建立動態參數,或如何讓您的任務變得用戶友好

任務

建立一個方便的 Jenkins 作業,該作業將啟動特定版本的選定微服務的建置和(或)部署。

在 Jenkins 作業中建立動態參數,或如何讓您的任務變得用戶友好

輸入數據

我們有幾個包含各種微服務原始碼的儲存庫。

定義參數

應接收以下參數作為我們作業的輸入:

  1. 儲存庫的 URL,其中包含我們要在執行作業時建置和部署的微服務程式碼。
  2. 將進行建置的提交的 ID。

AS IS

完成此任務的最簡單方法是建立兩個 String 類型的參數。

在 Jenkins 作業中建立動態參數,或如何讓您的任務變得用戶友好

在這種情況下,使用者將需要手動輸入儲存庫的路徑和提交 ID,您會發現這並不完全方便。

在 Jenkins 作業中建立動態參數,或如何讓您的任務變得用戶友好

未來

現在讓我們嘗試另一種類型的參數來考慮它的所有優點。
讓我們建立類型為 Choice Parameter 的第一個參數,第二個參數 - Active Choices Reactive Reference Parameter。 在 Choice 類型的參數中,我們將在 Choices 欄位中手動新增儲存微服務程式碼的儲存庫的名稱。

在 Jenkins 作業中建立動態參數,或如何讓您的任務變得用戶友好

如果讀者喜歡這篇文章,那麼在下一篇文章中我將描述Jenkins中配置任務的過程,採用透過程式碼描述(Configuration as code)的方式,即我們不需要手動輸入儲存庫名稱並建立參數,一切都會自動發生(我們的程式碼將從 SCM 接收儲存庫清單並使用此清單建立參數)。

第二個參數的值將根據第一個參數的值(test1 或 test2)動態填充,因為每個儲存庫都有自己的提交清單。

主動選擇 反應參考參數 有以下欄位需要填寫:

  1. 姓名 – 參數名稱。
  2. 腳本 – 每次引用參數欄位中的參數值發生變更時將執行的程式碼(在我們的例子中,當我們在 test1 和 test2 之間進行選擇)。
  3. 產品描述 – 參數的簡要描述。
  4. 選擇類型 – 腳本傳回的物件類型(在我們的例子中,我們將傳回 html 程式碼)。
  5. 參考參數 – 參數的名稱,當其值變更時,將執行腳本部分的程式碼。

在 Jenkins 作業中建立動態參數,或如何讓您的任務變得用戶友好

讓我們直接填寫該參數中最重要的欄位。 我們提供兩種類型的實作可供選擇:使用 Groovy 腳本腳本編寫器腳本.
我們選擇第一個,因為 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) 作為輸入,並向 到位桶 (方法 getCommitsForMicroservice)使用其 API,並取得給定微服務的所有提交的 ID 和提交訊息。
正如前面提到的,這段程式碼應該會回傳將顯示在頁面上的 html 使用參數構建 在 Jenkins 中,因此我們將從 Bitbucket 接收到的所有值包裝在一個清單中,並將它們新增至 select。

完成所有步驟後,我們應該會得到一個如此漂亮的頁面 使用參數構建.

如果您選擇 test1 微服務:

在 Jenkins 作業中建立動態參數,或如何讓您的任務變得用戶友好

如果您選擇 test2 微服務:

在 Jenkins 作業中建立動態參數,或如何讓您的任務變得用戶友好

同意用戶以這種方式與你的任務互動會比每次複製 url 並查找所需的提交 id 方便得多。

聚苯乙烯 本文提供了一個非常簡化的範例,在這種形式下可能沒有實際用途,因為組件具有更多不同的參數,但本文的目的是展示該工具的工作原理,而不是提供可行的解決方案。

PSS 正如我之前寫的,如果這篇文章有用,那麼下一篇將是關於 透過程式碼動態配置 Jenkins 任務.

來源: www.habr.com

添加評論