Jenkins多分支構建
一.建立多分支pipeline
在實際中,需要多分支同時進行開發。如果每個分支都建立一個Jenkins專案,比較多餘。建立選擇 Multibranch Pipeline
1.設定程式碼倉庫地址,也就是要選擇分支的倉庫地址
2.設定分支掃描觸發策略
分支掃描是指Jenkins根據一定的策略去程式碼倉庫掃描分支,如果有新分支就建立一個以分支名命名的任務,如果發現有分支被刪除了,就刪除相應的Jenkins任務。
在"Scan Multibranch Pipeline Triggers"下就只有一一個可選項:Periodically if not otherwise run ( 沒有手動觸發,就定期掃描分支)。勾選此選項,設定掃描的間隔時長
讀者可根據專案建立分支的頻繁程度設定週期的長短。越頻繁建立分支,掃描週期應越短。當然我們也可以單擊任務頁面左側的"Scan Multibranch Pipeline Now"項,手動觸發Jenkins去掃描分支。
3.孤兒任務(Orphaned Item)處理策略
如果在程式碼倉庫中刪除了release分支,那麼在多分支任務頁面上,該分支在Jenkins上的任務也應該被刪除。至於什麼時候刪除,取決於下次分支掃描的時間。如果程式碼倉庫中的分支被刪除了,而Jenkins上的相應任務沒有被刪除,那麼這個任務就被稱為孤兒任務。
對於分支任務上的歷史記錄,儲存多長時間是可以設定的
引數含義:
Days to keep old items: 保留多少天
Max#of old items to keep:最多保留多少個孤兒任務
二.根據分支部署
git分支可以用於對程式碼進行物理隔離。對分支的管理有很多方法,比如主幹開發,釋出分支以及Gitflow法等。我們不討論它們的好壞,但不論使用哪種分支管理方法,都可能會涉及一個問題:如何根據不同的分支做不同的事情,比如根據不同的分支部署到不同的環境。
類似這樣的事情可以使用if-else來實現
stage("deploy to test"){ steps{ script { if (env.GIT_BRANCH == 'master') { echo "deploy to test env" } } } } stage("deploy to prod"){ steps{ script { if (env.GIT_BRANCH == 'release') { echo "deploy to prod" } } } }
但是這樣的程式碼不夠優雅,而且不是宣告式的。使用when指令可以讓pipeline看起來更優雅。
stage("deploy to test") {
when {
branch 'master'
}
steps{
echo "deploy to test"
}
}
stage("deploy to prod") {
when {
branch 'release'
}
steps {
echo "deploy to prod"
}
}
gitlab觸發與多分支
對於GitLab來說,並沒有Jenkins多分支pipeline的概念,所以GitLab只會觸發Jenkins進行分支索引 ( branch index ) ,Jenkins可根據索引結果決定是否執行構建。對於多分支pipeline,Jenkins GitLab外掛只監聽push事件,不監聽merge request事件。
而在Jenkins多分支pipeline專案的設定頁面中,是找不到GitLab配置項的。只能通過修改Jenkinsfile來實現,在triggers指令中加入gitlab配置。
triggers {
gitlab(triggerOnPush: true,
triggerOnMergeRequest: true,
branchFilterType: 'Al1',
secretToken: "abcdefghijklmnopqrstuvwxyz0123456789ABCDEF")
}
值得一提的是,筆者通過實驗發現,對於不同的分支使用不同的secretToken時,是以master分支的secretToken為準的。
Generic Webhook多分支
pipeline場景下的應用在多分支pipeline場景下,我們希望觸發某個分支的構建執行,Generic Trigger可以這麼傳參
triggers {
GenericTrigger(
genericVariables:[
[key: 'ref' ,value: '$.ref']
],
token: env.J0B_NAME,
regexpFilterText: '$ref',
regexpFilterExpression: 'refs/heads/' + env.BRANCH_NAME
)
}
本文版權歸作者所有,歡迎轉載,請務必新增原文連結。