[英]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.