再會, 哈伯!
今天就跟大家分享一個使用方法
介紹
對 IT 界來說,DevOps 這樣的縮寫已經不是什麼新鮮事了。 對於許多人來說,「do DevOps」這個短語與某種神奇的按鈕相關聯,當單擊時,應用程式程式碼會自動變成已部署和測試的應用程式(一切實際上更複雜,但我們正在從所有流程中抽象化)。
因此,我們收到了一份訂單,製作這樣一個神奇的按鈕,以便管理員可以一鍵部署應用程式。 此任務有多種實現方式:從為任何即時訊息程式編寫機器人到開發單獨的應用程式。 儘管如此,所有這些都有相同的目標 - 使應用程式的建置和部署開始盡可能透明和方便。
在我們的例子中,我們將使用 詹金斯.
任務
建立一個方便的 Jenkins 作業,該作業將啟動特定版本的選定微服務的建置和(或)部署。
輸入數據
我們有幾個包含各種微服務原始碼的儲存庫。
定義參數
應接收以下參數作為我們作業的輸入:
- 儲存庫的 URL,其中包含我們要在執行作業時建置和部署的微服務程式碼。
- 將進行建置的提交的 ID。
AS IS
完成此任務的最簡單方法是建立兩個 String 類型的參數。
在這種情況下,使用者將需要手動輸入儲存庫的路徑和提交 ID,您會發現這並不完全方便。
未來
現在讓我們嘗試另一種類型的參數來考慮它的所有優點。
讓我們建立類型為 Choice Parameter 的第一個參數,第二個參數 - Active Choices Reactive Reference Parameter。 在 Choice 類型的參數中,我們將在 Choices 欄位中手動新增儲存微服務程式碼的儲存庫的名稱。
如果讀者喜歡這篇文章,那麼在下一篇文章中我將描述Jenkins中配置任務的過程,採用透過程式碼描述(Configuration as code)的方式,即我們不需要手動輸入儲存庫名稱並建立參數,一切都會自動發生(我們的程式碼將從 SCM 接收儲存庫清單並使用此清單建立參數)。
第二個參數的值將根據第一個參數的值(test1 或 test2)動態填充,因為每個儲存庫都有自己的提交清單。
主動選擇 反應參考參數 有以下欄位需要填寫:
- 姓名 – 參數名稱。
- 腳本 – 每次引用參數欄位中的參數值發生變更時將執行的程式碼(在我們的例子中,當我們在 test1 和 test2 之間進行選擇)。
- 產品描述 – 參數的簡要描述。
- 選擇類型 – 腳本傳回的物件類型(在我們的例子中,我們將傳回 html 程式碼)。
- 參考參數 – 參數的名稱,當其值變更時,將執行腳本部分的程式碼。
讓我們直接填寫該參數中最重要的欄位。 我們提供兩種類型的實作可供選擇:使用 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 微服務:
如果您選擇 test2 微服務:
同意用戶以這種方式與你的任務互動會比每次複製 url 並查找所需的提交 id 方便得多。
聚苯乙烯 本文提供了一個非常簡化的範例,在這種形式下可能沒有實際用途,因為組件具有更多不同的參數,但本文的目的是展示該工具的工作原理,而不是提供可行的解決方案。
PSS 正如我之前寫的,如果這篇文章有用,那麼下一篇將是關於 透過程式碼動態配置 Jenkins 任務.
來源: www.habr.com