Jenkins Input Step如何展示YAML值为复选框及报错解决
问题解决:Jenkins Input Step从YAML生成复选框的错误修复
错误原因分析
你遇到的MissingPropertyException核心是代码语法错误导致的,同时存在DSL参数格式问题:
results.push语句的括号位置错误,使得service变量暴露在方法调用外部,Groovy无法识别该变量- Jenkins流水线DSL参数缺少必要的逗号分隔、括号不匹配,破坏了语法结构
- 描述字段末尾多了多余的括号
修正后的完整流水线代码
def inputResult = input( message: "Select a git tag", id: 'userinput', parameters: [[ $class: "CascadeChoiceParameter", choiceType: 'PT_CHECKBOX', description: "keys", name: 'selected_keys', script: [ $class: 'GroovyScript', fallbackScript: [ classpath: [], script: 'return ["could not find the keys"]' ], script: [ classpath: [], script: ''' def yaml = new groovy.yaml.YamlSlurper().parse(new File("output.yaml")) def results = [] yaml.services.each { service -> results.add("${service.name}:${service.value}") } return results ''' ] ] ]] ) // 打印用户选择结果验证流程 echo "Selected keys: ${inputResult.selected_keys}"
关键修正点说明
修复语法结构问题
- 给所有DSL参数(message、id、parameters等)添加必要的逗号分隔
- 移除description字段末尾多余的
) - 修正集合元素添加语句:将错误的
results.push(service.name + ":") + service.value)改为results.add("${service.name}:${service.value}"),用add更符合Groovy集合操作习惯 - 修正参数列表的括号匹配:将
}]改为]]
调整YAML读取逻辑
在CascadeChoiceParameter的Groovy脚本上下文里,直接使用Jenkins流水线的readYaml步骤存在兼容性限制,改用Groovy原生的YamlSlurper读取文件,确保能正确解析工作空间中的output.yaml。优化参数命名
将参数名get the keys改为selected_keys,避免空格带来的潜在问题,后续获取用户选择结果更便捷。
验证步骤
- 确保
output.yaml存在于Jenkins构建工作空间根目录,示例内容:
services: - name: "abc" value: "xyz" - name: "def" value: "uvw"
- 运行流水线,Input步骤会展示包含
abc:xyz、def:uvw的复选框选项 - 选择后流水线会打印用户选择的结果,确认流程正常执行
内容的提问来源于stack exchange,提问作者Dilip
相关产品推荐
相关产品推荐

