我的管道中的一个步骤将.tar上传到artifactory服务器。传入env.BUILD_NUMBER时,我得到一个错误的替换错误,但是当硬编码时,相同的命令有效。脚本通过jenkins用groovy编写,并在jenkins工作区中运行。Jenkins管道sh坏代换
sh 'curl -v --user user:password --data-binary ${buildDir}package${env.BUILD_NUMBER}.tar -X PUT "http://artifactory.mydomain.com/artifactory/release-packages/package${env.BUILD_NUMBER}.tar"'
返回错误:
[Pipeline] sh
[Package_Deploy_Pipeline] Running shell script
/var/lib/jenkins/workspace/[email protected]/durable-4c8b7958/script.sh: 2:
/var/lib/jenkins/workspace/[email protected]/durable-4c8b7958/script.sh: Bad substitution
[Pipeline] } //node
[Pipeline] Allocate node : End
[Pipeline] End of Pipeline
ERROR: script returned exit code 2
如果在一个版本号,换出${env.BUILD_NUMBER}
硬代码我没有得到任何错误,代码成功运行。
sh 'curl -v --user user:password --data-binary ${buildDir}package113.tar -X PUT "http://artifactory.mydomain.com/artifactory/release-packages/package113.tar"'
我用$ {} env.BUILD_NUMBER其他SH命令在同一个脚本中和在任何其他地方没有问题。
我的猜测是'$ {env。BUILD_NUMBER}'被其他实例中的shell实际看到之前正在被预处理步骤替代。 'sh'本身正确地把它当作错误来对待。 – chepner
在这行之前使用$ {env.BUILD_NUMBER}以完全相同的方式上传到Google存储,并且这不会给我带来任何问题。 编辑:我也做了一个虚拟变量,并将其设置为一个数字,然后传递给变量,并得到同样的问题。 –
你可能会在整个事件中使用错误的引号http://mrhaki.blogspot.com.au/2009/08/groovy-goodness-string-strings-strings.html。你也不需要引用curl的URL。因此,可能在整个事件中使用双引号将不会产生任何单引号 – KeepCalmAndCarryOn