在来自 Jenkins/groovy 的 shellscript 参数周围添加引号
adding quotes around shellscript parameter from Jenkins/groovy
我正在 Jenkins 中构建一个管道,在这个管道中,我调用了一个 shellscript:sh "helm upgrade --install $app --set myVar=$myVar"
现在,在我本地计算机的终端中尝试此操作后,我发现对于 myVar
的某些值,需要在命令行中引用它。 (具体来说,我传递的是 YAML 列表,例如:"{foo,bar,baz}"
)
现在看来这并不像看起来那么简单。我的第一次尝试是:
sh "helm upgrade --install $app --set myVar='$myVar'"
但在日志中,我们看到最终 运行 的命令看起来像
sh helm upgrade --install appname --set myvar={foo,bar,baz}
令人沮丧的是,helm 没有以正确的方式解析它。
所以我心想,"double quotes would work too",然后我尝试:
sh "helm upgrade --install appname --set myvar=\"$myVar\""
但是,唉,日志讲述了同样的故事:
sh helm upgrade --install appname --set myvar={foo,bar,baz}
所以。我如何说服我的 jenkins-pipeline 运行 命令作为
sh "helm upgrade --install appname --set myvar="{foo,bar,baz}"
另外,为什么这不能按预期工作?
我 运行 前段时间遇到过类似的问题,这个问题的解决方案非常简单,但非常违反直觉。您必须使用三重反斜杠转义双引号。看看这个非常简单的例子:
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
我正在 Jenkins 中构建一个管道,在这个管道中,我调用了一个 shellscript:sh "helm upgrade --install $app --set myVar=$myVar"
现在,在我本地计算机的终端中尝试此操作后,我发现对于 myVar
的某些值,需要在命令行中引用它。 (具体来说,我传递的是 YAML 列表,例如:"{foo,bar,baz}"
)
现在看来这并不像看起来那么简单。我的第一次尝试是:
sh "helm upgrade --install $app --set myVar='$myVar'"
但在日志中,我们看到最终 运行 的命令看起来像
sh helm upgrade --install appname --set myvar={foo,bar,baz}
令人沮丧的是,helm 没有以正确的方式解析它。
所以我心想,"double quotes would work too",然后我尝试:
sh "helm upgrade --install appname --set myvar=\"$myVar\""
但是,唉,日志讲述了同样的故事:
sh helm upgrade --install appname --set myvar={foo,bar,baz}
所以。我如何说服我的 jenkins-pipeline 运行 命令作为
sh "helm upgrade --install appname --set myvar="{foo,bar,baz}"
另外,为什么这不能按预期工作?
我 运行 前段时间遇到过类似的问题,这个问题的解决方案非常简单,但非常违反直觉。您必须使用三重反斜杠转义双引号。看看这个非常简单的例子:
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