【问题标题】:Jenkins CascadeChoiceParameter causes MissingPropertyException: No such propertyJenkins CascadeChoiceParameter 导致 MissingPropertyException:没有这样的属性
【发布时间】:2022-12-18 10:56:13
【问题描述】:

我的 Jenkinsfile 中有(在这个简化示例中)两个动态参数,第一个是 ChoiceParameter,第二个是 CascadeChoiceParameter,具体取决于第一个。

下面的代码在我的 Jenkinsfile 中显示了这两个参数 CATEGORYUSER

properties([
    parameters([
        [
            $class: 'ChoiceParameter',
            choiceType: 'PT_SINGLE_SELECT',
            name: 'CATEGORY',
            script: [
                $class: 'GroovyScript',
                script: [ classpath: [], sandbox: true, script: 
                    """
                    return ['one', 'two']
                    """
                ]
            ]
        ],

        [
            $class: 'CascadeChoiceParameter',
            choiceType: 'PT_SINGLE_SELECT',
            referencedParameters: 'CATEGORY',
            name: 'USER',
            script: [
                $class: 'GroovyScript',
                script: [ classpath: [], sandbox: true, script:
                    """
                    if ( CATEGORY.equals( 'one' ) ) {
                        return ['user for category one']
                    } else {
                        return ['user for category two']
                    }
                    """
                ]
            ]
        ],

    ])
])

它们确实有效(也就是说,第二个 USER 根据第一个 CATEGORY 更改),但也在 Jenkins 日志中产生以下异常:

Error executing script for dynamic parameter
groovy.lang.MissingPropertyException: No such property: CATEGORY for class: groovy.lang.Binding
    at groovy.lang.Binding.getVariable(Binding.java:63)
    [...]
Caused: java.lang.RuntimeException: Failed to evaluate script: No such property: CATEGORY for class: groovy.lang.Binding
    at org.biouno.unochoice.model.GroovyScript.eval(GroovyScript.java:197)
    at org.biouno.unochoice.util.ScriptCallback.call(ScriptCallback.java:96)
    [...]

我试图修改第二个 groovy 脚本的 IF 语句

if ( CATEGORY.equals( 'one' ) ) {

if ( "${CATEGORY}".equals( 'one' ) ) {

这消除了异常,但(使用 Logger)显示“${CATEGORY}”始终计算为 "one",永远不会计算为 "two",即使在 Jenkins UI 中更改了 ChoiceParameter“CATEGORY”的下拉值之后也是如此。

我必须如何访问 Groovy 脚本中的参数 CATEGORY 才能使其正常工作而不抛出异常?

【问题讨论】:

    标签: jenkins jenkins-pipeline pipeline jenkins-groovy


    【解决方案1】:

    以下似乎对我来说很好用。也许尝试更新插件。

    properties([
        parameters([
            [
                $class: 'ChoiceParameter',
                choiceType: 'PT_SINGLE_SELECT',
                name: 'CATEGORY',
                script: [
                    $class: 'GroovyScript',
                    script: [ classpath: [], sandbox: true, script: 
                        """
                        return ['one', 'two']
                        """
                    ]
                ]
            ],
    
            [
                $class: 'CascadeChoiceParameter',
                choiceType: 'PT_SINGLE_SELECT',
                referencedParameters: 'CATEGORY',
                name: 'USER',
                script: [
                    $class: 'GroovyScript',
                    script: [ classpath: [], sandbox: true, script:
                        """
                        if ( CATEGORY.equals( 'one' ) ) {
                            return ['user for category one']
                        } else {
                            return ['user for category two']
                        }
                        """
                    ]
                ]
            ],
    
        ])
    ])
    
    pipeline {
        agent any
        stages {
               
            stage('Hello') {
    
                steps {
                                 
                    echo 'Hello World'
                    println "Category: " + CATEGORY
                    println "User: " + USER
                }
            }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2019-02-10
      • 2014-08-15
      • 2019-03-16
      • 1970-01-01
      • 2018-07-16
      • 2020-02-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-28
      相关资源
      最近更新 更多