簡體   English   中英

Jenkins Pipeline 檢查參數化構建是否真的參數化

[英]Jenkins Pipeline check if parameterized build is really parameterized

目前我正在使用 Jenkins 管道和參數化構建。

我知道我可以開始一個管道階段,在那里我可以檢查給定的參數是否為空,但是有沒有另一種方法來檢查參數化構建是否真的參數化了?

就像我進入階段之前的一步? 一個階段,我們可以在進入階段之前檢查一些條件。

在聲明式管道中,無法在“之前”運行某些東西。 您可以運行另一個觸發“作業”的作業或嘗試類似的操作,如果某些參數未通過驗證,則整個作業將被中止。 但是您可以在script塊中控制它。

def ex(param){
    currentBuild.result = 'ABORTED'
    error('BAD PARAM: ' + param)
}

pipeline {
    agent any

    parameters {
        choice(name: 'a', choices:"NO\nOK\nMaybe", description: "Tests?" )
        choice(name: 'b', choices:"NO\nOK\nMaybe", description: "Tests?" )
        choice(name: 'c', choices:"NO\nOK\nMaybe", description: "Tests?" )
        choice(name: 'd', choices:"NO\nOK\nMaybe", description: "Tests?" )
    }   

    stages { 
        stage("check params") {
            steps {
                script {
                    //make some crazy validation
                    if ("${params.a}" != "OK") {ex("a")}
                    if ("${params.b}" != "OK") {ex("b")}
                    if ("${params.c}" != "OK") {ex("c")}
                    if ("${params.d}" != "OK") {ex("d")}
                }
            }
        }
        stage("Next stage") {
            steps {
                echo "Run"
            }
        }
    }
}

還可以使用params.each來檢查任何參數“choices”是否為null或空字符串""或者值是否應該像“OK”等...

當參數從另一個作業傳遞時很有用,並且使用的變量或方法碰巧沒有可接受的值:

build job: "some-jobname",
        parameters: [
                [$class: 'StringParameterValue', name: 'a', value: thisMethodReturnsOK()],
                [$class: 'StringParameterValue', name: 'b', value: oopsThisMethodReturnsEmptySTRING()],
                [$class: 'StringParameterValue', name: 'c', value: oopsThisMethodReturnsNULL()],
                [$class: 'StringParameterValue', name: 'd', value: oopsThisVariableContainsUnacceptableVALUE],
                           ]

此修改后的版本將驗證每個可用的構建參數並在參數為BAD導致ABORT

# Job: "some-jobname"

def ex(param){
    currentBuild.result = 'ABORTED'
    error('BAD PARAM: ' + param)
}

pipeline {
    agent any

    testA = param.a
    testB = param.b
    testC = param.c
    testD = param.d

    stages { 
        stage("check params") {
            steps {
                script {
                    params.each {
                        if (it == null || it == "" || it != "OK")
                            ex(it)
                    }
                }
            }
        }
        stage("Next stage") {
            steps {
                echo "Run and use parameters passed to TestA etc..."
            }
        }
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM