在我的jenkins管道中运行此命令时,我收到一个严重的替换错误
sh 'mvn build-helper:parse-version versions:set \
-DnewVersion=${parsedVersion.majorVersion}.${parsedVersion.minorVersion}.${parsedVersion.nextIncrementalVersion}-SNAPSHOT \
-DgenerateBackupPoms=false \
-DprocessAllModules \
-DgenerateBackupPoms=false'
在这种情况下,这是错误消息-
[代码]运行shell脚本
/apps/jenkins/latest/workspace/ess-holani_master-3YNVBB6LFQA3QFK5NHYV57DW5HGSNALVGFJTJ4D6T72QVPJG4CDA/code@tmp/durable-374bc417/script.sh: 第2行: -DnewVersion = $ {parsedVersion.majorVersion}。$ {parsedVersion.minorVersion}。$ {parsedVersion.nextIncrementalVersion}-快照: 错误的替换
脚本返回了退出代码1
但这可行->
sh 'mvn build-helper:parse-version versions:set \
-DnewVersion=\\\${parsedVersion.majorVersion}.\\\${parsedVersion.minorVersion}.\\\${parsedVersion.nextIncrementalVersion}-SNAPSHOT \
-DgenerateBackupPoms=false \
-DprocessAllModules \
-DgenerateBackupPoms=false'
此命令可以按预期提高我的pom版本。
运行上述命令时登录jenkins shell
[代码]运行shell脚本
mvn build-helper:分析版本:set'-DnewVersion = $ {parsedVersion.majorVersion}。$ {parsedVersion.minorVersion}。$ {parsedVersion.nextIncrementalVersion} -SNAPSHOT' -DgenerateBackupPoms = false -DprocessAllModules -DgenerateBackupPoms = false
在这里使用双引号也可以-
sh "mvn build-helper:parse-version versions:set \
-DnewVersion=\\\${parsedVersion.majorVersion}.\\\${parsedVersion.minorVersion}.\\\${parsedVersion.nextIncrementalVersion}-SNAPSHOT \
-DgenerateBackupPoms=false \
-DprocessAllModules \
-DgenerateBackupPoms=false"
我想了解为什么我们需要在此脚本中添加一个额外的'\\\'吗?
迈克尔·沃克斯(Michael Works)建议的答案。
我也尝试过
sh "mvn build-helper:parse-version versions:set \
-DnewVersion='\${parsedVersion.majorVersion}.\${parsedVersion.minorVersion}.\${parsedVersion.nextIncrementalVersion}-SNAPSHOT' \
-DgenerateBackupPoms=false \
-DprocessAllModules \
-DgenerateBackupPoms=false"
我在结尾处的\之前删除了\。这也起作用。
答案 0 :(得分:2)
这里的问题是,您正在使用三层解释器和编译器,并且它们都使用相同的语法来替换字符串中的变量:“ $ {myvar}”。
parsedVersion.minorVersion
的变量,因此会给您带来不好的替代。您可以使用'
而不是"
来防止Groovy尝试尝试使用$
来逃避\
。但是,Groovy会将\$
作为$
和\\\$
作为\$
传递给下一个实例。'
或转义。$
如果您在版本字符串中使用'
,我想可以减少混乱:
sh "mvn build-helper:parse-version versions:set \
-DnewVersion='\${parsedVersion.majorVersion}.\${parsedVersion.minorVersion}.\${parsedVersion.nextIncrementalVersion}-SNAPSHOT' \
-DgenerateBackupPoms=false \
-DprocessAllModules \
-DgenerateBackupPoms=false"
编辑:或者使用'
s,所以我们需要转义'
,而无需对$
s进行任何转义:
sh 'mvn build-helper:parse-version versions:set \
-DnewVersion=\'${parsedVersion.majorVersion}.${parsedVersion.minorVersion}.${parsedVersion.nextIncrementalVersion}-SNAPSHOT\' \
-DgenerateBackupPoms=false \
-DprocessAllModules \
-DgenerateBackupPoms=false'