当前,我正在使用Jenkins管道和参数化构建。
我知道我可以开始一个管道阶段,在该阶段可以检查给定的参数是否为空,但是还有另一种方法可以检查参数化的版本是否真的被参数化了吗?
像我上台阶之前要走一步吗? 在进入阶段之前,我们可以检查一些条件的阶段。
答案 0 :(得分:0)
在声明性管道中,无法在“之前”执行任何操作。如果某些参数未通过验证,则您可以运行另一个触发“作业”的作业或尝试类似的操作,否则整个作业将被中止。但是您可以在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"
}
}
}
}
答案 1 :(得分:0)
还可以使用params.each
来检查是否有任何参数“选择”是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],
]
此修改后的版本将验证每个可用的构建参数,如果参数为ABORT
,则会引起BAD
:
# 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..."
}
}
}
}