Jenkins條件判斷
Jenkins條件判斷又兩條關鍵指令:
input
、
when
前者可以進行卡點交互,關鍵步驟可以設置二次確認。
input語法
詳情請見官網文檔。官網文檔引用語法上可能有些問題,后面會有解釋。
https://www.jenkins.io/zh/doc/book/pipeline/syntax/#input
input會彈出一個彈窗,有“繼續”和“停止”兩個按鈕。其中“繼續”按鈕可以配置文本,點擊后繼續流水線;“停止”按鈕則會在此處終端流水線,不再進行任何步驟。
input配置項:
- message彈窗的內容
- id默認為stage名稱
- ok配置“繼續”按鈕的文本
- submitter可選的以逗號分隔的用戶列表或允許提交
input
的外部組名。默認允許任何用戶。 - submitterParameter環境變量的可選名稱。如果存在,用
submitter
名稱設置。(未驗證) - parameters定義參數,也可以定義下拉選項,進行條件選擇
stage("stage 2: deploy") {
input {
message "Should we continue?"
ok "Yes, we should."
parameters {
string(name: 'xxxxxxxxxxxxxxxxxxxxxxxxxx', defaultValue: 'Mr Jenkins', description: 'Who should I say hello to?')
}
}
steps {
sh 'echo select option: ${xxxxxxxxxxxxxxxxxxxxxxxxxx}'
sh "env"
}
}
注意:官方文檔引用語法echo 'select option: ${xxxxxxxxxxxxxxxxxxxxxxxxxx}'
經驗證是無效的,改成sh 'echo select option: ${xxxxxxxxxxxxxxxxxxxxxxxxxx}'
則能正常使用
顯示如下:
Paramiter配置多選
stage("stage 2: deploy") {
input {
message "Should we continue?"
ok "Yes, we should."
parameters {
choice(name: 'PERSON', choices: ['Mr Jenkins', 'Mr Pipeline'], description: 'Who should I say hello to?')
}
}
steps {
echo 'Test dingding notify'
sh 'echo select option: ${PERSON}'
sh "env"
}
}
效果圖如下
When語法
語法詳情參考官網
https://www.jenkins.io/zh/doc/book/pipeline/syntax/#when
when語句必須放在stage第一行,所有條件都滿足才會執行該語句。可以用它來配置特性分支合並到主干的流程。
參數如下
- branch語法:
when { branch 'master' }
注意,這只適用於多分支流水線。 - environment語法:
when { environment name: 'DEPLOY_TO', value: 'production' }
- expression語法:
when { expression { return params.DEBUG_BUILD } }
- not語法:
when { not { branch 'master' } }
- allOf語法:
when { allOf { branch 'master'; environment name: 'DEPLOY_TO', value: 'production' } }
並 - anyOf語法:
when { anyOf { branch 'master'; branch 'staging' } }
或
完整示例如下:
注意:Input的parameter聲明周期只在當前步驟,其它步驟如果要使用,需用腳本將其賦值到env全局變量上。
pipeline {
agent any
parameters {
string(name: 'testTag', defaultValue: 'Mr Jenkins', description: 'Who should I say hello to?')
}
stages {
stage("stage 1: select project") {
steps {
sh 'echo ${testTag}. Pleace select project'
}
}
stage("stage 2: deploy") {
input {
message "Should we continue?"
ok "Yes, we should."
parameters {
choice(name: 'PERSON', choices: ['Jenkins', 'Pipeline'], description: 'Who should I say hello to?')
}
}
steps {
echo 'Test dingding notify'
sh 'echo select option: ${PERSON}'
script {
env.PERSON = "${PERSON}"
}
sh 'env'
}
}
stage("stage 3: When Jenkins") {
when {
expression { return PERSON == 'Jenkins' }
}
steps {
sh 'echo ${PERSON}. exe'
}
}
stage("stage 4: When Pipeline") {
when { expression { return PERSON == 'Pipeline' } }
steps {
sh 'echo ${PERSON}. exe'
}
}
}
post {
always {
echo 'This will always run'
}
success {
echo 'successful'
}
failure {
echo 'failed'
}
}
}
附錄
問題1:WorkflowScript: 15: Missing required parameter: "message"
stage("stage 2: deploy") {
steps {
echo 'Test dingding notify'
input {
message "Should we continue?"
ok "Yes, we should."
submitter "alice,bob"
parameters {
string(name: 'PERSON', defaultValue: 'Mr Jenkins', description: 'Who should I say hello to?')
}
}
echo 'select option: ${PERSON}'
}
}
input報錯,說缺失關鍵參數message
。原因是input是一個step,與steps
同級。將input移出steps
即可。
問題2:groovy.lang.MissingPropertyException: No such property: PERSON for class: groovy.lang.Binding
見when的代碼示例。原因是input參數聲明周期只存在當前步驟,如果別的步驟想引用它的值,需添加script將變量賦值到全局上。
script {
env.PERSON = "${PERSON}"
}