Jenkins 自動上Tag
在軟體開發過程中,版本控制是至關重要的。為了更有效地管理代碼版本並追蹤特定的發布點或重要更改,我們經常需要在特定的分支上自動添加標籤(tag)。這種做法不僅有助於追蹤代碼的演進,還便於在不同版本間進行比對和回溯。
自動化標籤過程可以大大提高開發團隊的效率,減少人為錯誤,並確保版本標記的一致性。通過在持續集成/持續部署(CI/CD)流程中集成自動標籤功能,我們可以:
- 快速識別特定版本的代碼狀態
- 簡化版本發布和部署流程
- 提供清晰的版本歷史,便於代碼審查和問題追蹤
- 在需要時輕鬆回滾到特定版本
本文將介紹如何在 Jenkins Pipeline 中實現自動標籤功能,特別針對不同的分支(如測試分支和主分支)應用不同的標籤策略。通過這種方法,我們可以為軟體開發流程增添一層精確的版本控制,從而提高整個開發過程的可追蹤性和可管理性。
請先準備以下事前準備
- Jenkins Plug Install
Plug Name : Pipeline Utility Steps
(該插件能讓Jenkins 讀取json 文件 並解析取值)
2. 設定 Jenkins Credentials
3. 使用 Jenkins multibranch-pipeline
- Jenkins Plug Install
首頁-> 管理Jenkins -> Plugins
搜尋 Pipeline Utility Steps
並安裝 重啟Jenkins 。
2. 設定 Jenkins Credentials
首頁-> 管理Jenkins -> Credentials
設定 gitlab or github 帳號密碼,該範例使用 gitlab ,創建後會取得 ID 請記得該串ID 等下會用到,給予Jenkins 有權限拉取git。
3. 使用 Jenkins multibranch-pipeline
創建該模式的 pipeline 後 , 先在專案內新增一個檔案 jenkinsfile
及package.json
,這兩個檔案的用途分別會在以下進行說明。
// package.json
// 用於記錄版本號碼,讓jekins 自動讀取 並打上tag
{
"version": "0.0.9",
}
// jenkinsfile
// 該腳本內容:會先判斷 當前目錄是否有package.json 並撈取裡面的version
// 判斷分支 若是 test or master 時 將會自動帶入 版本號-分支
// 將創建的 credentialsId全局參數 設定剛剛在Jenkins創建的ID
def credentialsId = "08306b20-9025-449e-a5a0-0c7ec6f76005"
pipeline {
agent any
stages{
stage('auto tag'){
steps{
script{
// 定義函數
def createAndPushTag = { version, branch ->
withCredentials([usernamePassword(credentialsId: "${credentialsId}", passwordVariable: 'GIT_PASSWORD', usernameVariable: 'GIT_USERNAME')]) {
sh """
git config user.email '[email protected]'
git config user.name 'Jenkins'
git tag -a v${version}-${branch} -m 'Version ${version}-${branch}'
git push https://${GIT_USERNAME}:${GIT_PASSWORD}@\${GIT_URL#https://} v${version}-${branch}
"""
}
}
if (fileExists('package.json')) {
def packageJson = readJSON file: 'package.json'
def version = packageJson.version
// 判斷分支,如果是以下分支 就讀取package.json 並打上tag
switch(env.BRANCH_NAME) {
case 'test':
createAndPushTag(version, 'test')
break
case 'master':
createAndPushTag(version, 'master')
break
default:
echo "No tagging for branch ${env.BRANCH_NAME}"
}
}
}
}
}
}
}