Jenkins声明式流水线报java.lang.NoSuchMethodError错误,如何解决?
问题原因与修复方案
你遇到的这个错误根源在于在Groovy逻辑代码里错误使用了Shell风格的变量插值语法。
具体问题分析
在你的script块的if判断中,你写了if (${params.isRelease}),这里的${}语法是Shell或者Groovy字符串插值时的用法,但在布尔判断的条件表达式里直接使用${},会被Jenkins的DSL解析器误认为是要调用名为$的方法,而Jenkins流水线中并没有这个DSL方法,所以才会抛出java.lang.NoSuchMethodError: No such DSL method '$' found among steps的错误。
修正后的代码
只需要去掉${}的包裹,直接引用参数变量即可:
pipeline { agent { label 'test' } parameters { booleanParam(defaultValue: false, description: 'This is a Release build', name: 'isRelease') } stages { stage('Build') { steps { script { if (params.isRelease) { echo("This is a release") } } } } } }
补充说明
如果是在字符串中需要插入参数值,这时候才需要用${}插值,比如:
echo("This is a release build: ${params.isRelease}")
这种场景下${}是正确的用法,但在条件判断、变量赋值等逻辑代码中,直接使用变量名即可。
内容的提问来源于stack exchange,提问作者papanito
相关产品推荐
相关产品推荐

