我有条件地设置 Jenkins 参数以根据上游 ${SHOW_OPTION} 条件 YES 或 NO 读取 USER_INPUT_VALUE。
if ("$SHOW_OPTION" == ("NO")) {
properties([ //No USER INPUT passed
])
else
{
properties([
parameters([ string(name: 'USER_INPUT_VALUE', defaultValue: 'mydefault']")
])
}
稍后 Jenikinsfile 调用一个 shell 脚本作为 ONE Liner,它分配一个 shell 变量,如下所示,当 SHOW_OPTION 为 NO 时,我分配硬编码值,否则实际 USER 值,
if [ ${SHOW_OPTION} == "NO" ]; then TARGET='"NO_USER_VALUE"'; else TARGET=$USER_INPUT_VALUE; fi;
但是当 SHOW_OPTION 为 NO 时,构建会抱怨
groovy.lang.MissingPropertyException: No such property: USER_INPUT_VALUE for class: groovy.lang.Binding
为什么脚本在这里验证其他部分,因为它不适用。有没有办法在 shell 脚本中跳过此验证。
注意:当我在常规 shell 上运行一个衬里时,我没有看到任何问题(使用 echo $ 验证?)
声明性管道中不允许参数定义条件:
pipeline {
agent any
if ("$SHOW_OPTION" == "NO") {
println "no parameters"
}else{
properties(
[
parameters([
string(defaultValue: 'mydefault', name: 'USER_INPUT_VALUE')
])
]
)
}
println params.USER_INPUT_VALUE;
}
根据您的代码示例,您正在使用脚本化管道:
https://stackoverflow.com/a/53750165/3957754
这项工作符合预期
def SHOW_OPTION= "true";
node {
if ("$SHOW_OPTION" == "NO") {
println "no parameters"
}else{
properties(
[
parameters([
string(defaultValue: 'mydefault', name: 'USER_INPUT_VALUE')
])
]
)
}
println params.USER_INPUT_VALUE
}