Jenkins Pipeline使用sshCommand定义环境变量报MissingPropertyException错误
错误产生原因
- 首要原因是变量作用域不匹配:在
pipeline代码块外部用def关键字定义的remote变量属于Groovy顶层脚本作用域,Jenkins声明式Pipeline的steps块运行在独立的沙箱执行上下文当中,默认无法直接访问顶层用def声明的普通变量,因此抛出了找不到remote属性的异常。 - 代码同时存在潜在的字符串插值错误:定义
remote参数时的host : '${HOST}'、执行命令时的command: 'export ENV1=${env.ENV1}'都使用了单引号包裹变量占位符,Groovy语法规则中单引号包裹的字符串不会解析内部的变量插值表达式,即使作用域问题修复后,也会出现变量无法正确替换的问题,需要改为双引号包裹才能正常解析占位符。
修复参考代码
可以将remote变量的定义移入script块内,同时调整字符串引号即可正常执行:
pipeline { agent any stages { stage('env var'){ steps { script { def remote = [name: 'something', host : "${HOST}", password: "${PASSWORD}"] sshCommand remote: remote, command: "export ENV1=${env.ENV1}" } } } } }
内容的提问来源于stack exchange,提问作者JamesHudson81
相关产品推荐
相关产品推荐

