我正在詹金斯(Jenkins)中建立一个管道,在这个管道中,我称为shellscript:name is undefined
现在,在本地计算机上的终端中尝试此操作后,我发现对于sh "helm upgrade --install $app --set myVar=$myVar"
的某些值,需要在命令行上将其引用。 (具体来说,我正在传递一个YAML列表,例如:myVar
)
现在事实证明,这并不像看起来那样简单。我的第一次尝试是:
"{foo,bar,baz}"
但是在日志中,我们看到最终运行的命令看起来像
sh "helm upgrade --install $app --set myVar='$myVar'"
令人沮丧的是,无法通过头盔正确解析。
所以我想,“双引号也可以”,我尝试:
sh helm upgrade --install appname --set myvar={foo,bar,baz}
但是,日志记录了同样的古老故事:
sh "helm upgrade --install appname --set myvar=\"$myVar\""
所以。我如何说服我的jenkins-pipeline以
运行命令sh helm upgrade --install appname --set myvar={foo,bar,baz}
而且,为什么这不能按预期工作?
答案 0 :(得分:4)
前段时间,我遇到了类似的问题,该问题的解决方案非常简单,但却非常直观。您必须使用双反斜杠转义双引号。看一下这个非常简单的示例:
node {
stage('Test') {
sh "echo \\\"Lorem ipsum dolor sit amet\\\""
}
}
这是控制台输出:
[Pipeline] node
Running on Jenkins in /var/jenkins_home/workspace/test-pipeline
[Pipeline] {
[Pipeline] stage
[Pipeline] { (Test)
[Pipeline] sh
[test-pipeline] Running shell script
+ echo "Lorem ipsum dolor sit amet"
"Lorem ipsum dolor sit amet"
[Pipeline] }
[Pipeline] // stage
[Pipeline] }
[Pipeline] // node
[Pipeline] End of Pipeline
Finished: SUCCESS