DevOps課程-Jenkins 9

Multi-Branch Pipeline

ZONGRU Li
Jan 19, 2022

前面學到針對單一Branch製作pipeline

那麼考量到同時針對多個BranchesPipeline的需求處理

比如說我們可能有main,feature-1,bugfix-1等三個Branches

也許我們只是希望同時對三個BranchesTest流程

但是僅僅針對main Branch做部署

並且隨著後面增加feature-2,feature-3…Branches出來都只跑Test流程

就需要使用到Multi-Branch Pipeline

接著做Multi-Branch Pipeline使用練習

首先先確認目前demo使用的github Repo狀態:

只有main Branch沒有Jenkinsfile

為了展示Multi-Branch Pipeline的使用

我在其中兩個Branches新增Jenkinsfile-mbp

(亦即Multi-Branch Pipeline用Jenkinsfile)

內容都一致如下:

唯獨jenkins-jobs這個Branch不新增!

然後開始建立Multi-Branch Pipeline:

先展開Branch SourceAdd source按鈕

github複製url位置:

以上儲存後就設置好了!

上面只是一個掃描動作,確認Branch內有沒有對應的Jenkinsfile-mbp檔存在

回到最上層儀表板:

裡面會看到成功定義的屬於這個Multi-Branch Pipeline的Branches

因為jenkins-jobs內沒有Jenkinsfile-mbp檔,所以就沒有了

另外其實在一般的pipeline Job內其實也能夠定義多個Branches

但是在一般的pipeline Job內其實有很多plugin沒辦法生效

(一般的pipeline Job像Jenkins env-vars.html裡面的變數就沒辦法用!)

想使用個BRANCH_NAME都沒辦法...

並且Multi-Branch Pipeline也比較容易觀看Git Repo裡面各個Branches對應

接著考慮一般狀況,通常Git flow上像是feature Branch或是bugfix Branch

一般都會是由main Branch分出來的

也就是會有跟main Branch一致的Jenkinsfile(供Multi-Branch Pipeline用)

我們可以針對上面作條件判斷,比如說只針對main Branch才部署

其他feature Branch或是bugfix Branch只做Test的Stage

比如下圖是剛剛建立得到的Multi-Branch Pipeline

我先把上圖中的jenkins-job-pipeline當作feature Branch來看

我同時調整兩個Branch上面的Jenkinsfile-mbp檔,改為如下:

同時調整main & jenkins-job-pipeline Branches內的該檔:

然後commit
然後commit

假裝jenkins-job-pipeline Branch上面Jenkins-mbp內容就是main分出去的!

然後執行!

這邊看到整個Multi-Branch Pipeline這個JobLog:

各別Branch log要回到:

如上圖說明,因為我在pipelineJenkinsfile-mbp內有寫條件

細看log看到:

只有遇到main Branch才能跑完全部stage,否則只跑test stage

另外在Multi-Branch Pipeline內我只想針對單個Branch跑pipeline Job可以:

結果:

有#3出現

回頭看看main的那一個:

所以只要main Branch上面要使用的Jenkinsfile寫好條件

就可以從main Branch分出新的其他Branch

(通常如feature Branch,bugfix Branch...etc)

並且仍可以跟main要做的pipeline出區別

參考課程reference

--

--

ZONGRU Li
ZONGRU Li

Written by ZONGRU Li

2022/11/17 開源部分個人筆記給LINE "Java程式語言討論區"社群,希望能對社群的技術學習做一點點貢獻.(掩面....記得退訂閱!

No responses yet