Jenkins Pipeline运行报错java.lang.NoSuchMethodError 未找到DSL方法'$'
报错原因
报错来自两处Groovy语法误用:
- 插值语法使用位置错误:Groovy的
${}变量插值规则要求该语法必须写在双引号包裹的字符串内部才能生效,你在传递pyats_job_args参数时直接在value位置裸写${command},Pipeline解释器会把$识别为一个待调用的内置DSL步骤,全局找不到名为$的步骤方法就抛出了该错误。 - 存在隐性逻辑错误:定义
command变量时虽然外层用了双引号包裹,但内部的env.job_file、env.testbed_file等环境变量没有加插值标记,就算修复了上述语法错误,command存储的也只是写死的字面量文本,无法读取提前配置的参数值,执行结果不符合预期。
修复方案
- 传递
pyats_job_args参数时直接引用已经定义完成的command变量,去掉位置错误的${}包裹 - 给
command字符串内部的所有环境变量加上正确的插值标记,确保能正常读取预定义的参数值
修复后的完整可运行代码如下:
pipeline { agent none stages { stage ('INSTALL_IMAGE') { steps { script { def command = "${env.job_file} --testbed-file ${env.testbed_file} --image_file ${env.image_file} --mail_to ${env.mail_to}" build job: 'PYATS_JOB_EXECUTOR', parameters: [ string(name: 'branch_name', value: env.branch_name), string(name: 'pyats_job_args', value: command), ] } } } } }
内容的提问来源于stack exchange,提问作者Akshay J
相关产品推荐
相关产品推荐

