Jenkins參數化建置與上下游專案

介紹 Jenkins 參數化建置的設定方式

參數化建置

假設我目前有兩個 Jenkins Job,第一個 Job 執行成功後,才執行第二個 Job

第一個 Job 我們假設叫做【job01】;第二個 Job 我們把它叫做【job02】;這兩個專案都透過參數化建置與 Git Parameter 來控制檔案來源為哪一個 Branch,這邊先定義變數名稱為 Branch

在版控來源指定分支就可以將參數帶過來用了

執行也很簡單,透過Build with parameter就可以選擇 branch

透過參數化建置其他專案

這樣執行 Job1 之後,就會自動觸發 Job2

透過上面的方式,Job02 被觸發的原因是因為 Job01 我們有設定建置後動作,觸發其他專案的參數化建置,其實並不是上下游專案的設定

上下游專案 從上游專案設定

建立 Job03、Job04 兩個任務,其中 Job03 設定建置後動作:建置其他專案

這樣子回到 Job03 就會看到他的下游專案為 Job04

而回到 Job04,也會看到它的上游專案為 Job03

上下游專案 從下游專案設定

也可以直接在下游專案中設定build after other project are built

效果是一樣的

拉拉作伙ㄟ阿娜?

比較妙的是,如果我上游、下游專案都設定,那會發生甚麼事情?
答案是實際的任務仍舊觸發一次,但是 Log 紀錄會顯示兩次

那如果加上參數化建置呢?

答案是,任務觸發兩次



透過任務的上下游設置,會觸發一次;而透過參數化建置其他專案,也會觸發一次;這兩者是分開計算的
所以如果是需要傳遞參數的場合,不要再設定任務的上下游依賴關係,避免多次觸發執行

補充:觸發另一個任務並傳遞參數範例


如圖,新增 Git Parameter 還有字串參數, Git Parameter 之前有去抓 GIT 資料所以有清單可以選,但下方範例我註解掉了,想要實際練習的人請自行修改一下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
// Job 1
node {
// stage('git') {
// checkout([$class: 'GitSCM', branches: [[name: '$Branch']], doGenerateSubmoduleConfigurations: false, extensions: [], submoduleCfg: [], userRemoteConfigs: [[credentialsId: 'credentials-id', url: 'xxx@git.fake.net:myProject/myProject.git']]])
// }

stage('echo parameter') {
echo "${Branch}"
echo "${Greeting}"
}

stage('Trigger Job 2') {
build wait: false, job: 'pipeline_job_2', parameters: [
gitParameter(name: 'Branch', value: Branch),
string(name: 'Greeting', value: Greeting),
]
}
}

// Job 2
node {
stage('echo parameter') {
echo "${Branch}"
echo "${Greeting}"
}
}

第二個任務的設定也要新增一樣的參數

執行一下 pipeline,看看他有沒有正確傳遞參數跟觸發下一個任務

看起來是正確的

因為其他類型的參數好像要一個一個試,我沒有用到就懶了,這邊列出三個應該夠用了

類型 範例
Secret build job:'pipeline_job_2', parameters: [ credentials('parameter-name', 'credentials-id') ]
Git Parameter build job:'pipeline_job_2', parameters: [ gitParameter(name: 'Branch', value: Branch) ]
字串參數 build job:'pipeline_job_2', parameters: [ string(name: 'Greeting', value: Greeting) ]