动态编程创建JobDSL参数时出现booleanParam方法签名不匹配错误
问题根因
报错由两个问题共同导致:
- JobDSL提供的
booleanParam方法不支持Map格式的命名参数传参,仅支持3种位置参数调用方式:booleanParam(java.lang.String 参数名)booleanParam(java.lang.String 参数名, boolean 默认值)booleanParam(java.lang.String 参数名, boolean 默认值, java.lang.String 描述)
你模板中使用的name:、defaultValue:等key的Map传参写法不符合方法要求,触发参数类型不匹配报错。
- 模板渲染后的参数值
env1.tfvars没有被字符串引号包裹,会被Groovy识别为未定义变量而非字符串,属于语法错误。
解决方案
1. 修改DSL模板参数定义行
将dslTemplates/infra.groovy中的booleanParam调用从命名参数写法改为位置参数写法:
// 修改前 booleanParam(name: "<%= "${it}" %>", defaultValue: true, description: "<%= "${it}" %>" ) // 修改后 booleanParam("<%= it %>", true, "<%= it %>")
修改后渲染出来的代码会变成符合要求的格式:
booleanParam("env1.tfvars", true, "env1.tfvars") booleanParam("env2.tfvars", true, "env2.tfvars")
2. 可选:优化参数名合法性
如果getTFConfigs返回的文件路径包含/等Jenkins参数名不支持的特殊字符,可以在getTFConfigs方法中对返回的文件名做格式化处理,避免后续参数调用报错:
// 在getTFConfigs的push逻辑中添加字符替换 entryName = entry.getName().replaceAll('[^a-zA-Z0-9_\\-\\.]', '_') zipMembers.push("${entryName}")
验证
修改完成后重新运行Seed任务,即可正常生成带环境复选框参数的Jenkins任务。
内容的提问来源于stack exchange,提问作者Dave Augustus
相关产品推荐
相关产品推荐

