【发布时间】:2022-12-18 10:56:13
【问题描述】:
我的 Jenkinsfile 中有(在这个简化示例中)两个动态参数,第一个是 ChoiceParameter,第二个是 CascadeChoiceParameter,具体取决于第一个。
下面的代码在我的 Jenkinsfile 中显示了这两个参数 CATEGORY 和 USER:
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