Jenkins條件判斷


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}"
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM