Jenkins声明式Pipeline运行shell命令出现Jenkinsfile校验失败问题咨询
问题产生原因
- Groovy字符串预插值冲突
你当前使用"""双引号包裹的多行字符串属于Groovy的GString类型,Jenkins在校验时会优先解析字符串内的${}占位符为Groovy作用域变量。如果${PATH}、${WORKSPACE}、${helmReleaseName}等变量你没有在Pipeline中提前定义为Groovy变量,或者你希望这些变量交给后续的shell进程解析,都会触发校验错误。 - 多余转义符导致语法错误
Groovy多行字符串中不需要对双引号"做转义,你代码中的\"属于冗余转义,会被Jenkins识别为非法语法直接触发校验失败。 $0取值逻辑不符合Jenkins sh执行规则
Jenkins的sh块会将脚本内容写入临时文件执行,$0指向的是临时文件的路径而非Jenkinsfile所在的工作目录,$(dirname $0)拿到的路径是无效的,不过这个问题属于运行时错误,不会直接触发Jenkinsfile静态校验失败。
修复示例
如果所有变量都希望交给shell进程解析,直接改用单引号多行字符串即可:
sh script: ''' export PATH="${PATH}:${WORKSPACE}" source "${WORKSPACE}/shellscript.sh" helm uninstall ${helmReleaseName} --namespace ${kubenamespace} '''
如果helmReleaseName、kubenamespace是你在Pipeline中提前定义的Groovy变量,需要Groovy预插值,就保留双引号,给shell侧变量的$加转义:
sh script: """ export PATH="\${PATH}:\${WORKSPACE}" source "\${WORKSPACE}/shellscript.sh" helm uninstall ${helmReleaseName} --namespace ${kubenamespace} """
内容的提问来源于stack exchange,提问作者mac
相关产品推荐
相关产品推荐

