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