Jenkins:未设置时绕过 Shell 变量验证

问题描述 投票:0回答:1

我有条件地设置 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 $ 验证?)

shell jenkins jenkins-pipeline jenkins-groovy
1个回答
0
投票

声明性管道中不允许参数定义条件:

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
    
}
© www.soinside.com 2019 - 2024. All rights reserved.