当我在 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}-SNAPSHOT: 不良替换
脚本返回退出代码 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:parse-version versions: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"
我想了解为什么我们需要在此脚本中添加额外的"\\\"?
迈克尔作品建议的答案 .
我也试过这个
sh "mvn build-helper:parse-version versions:set
-DnewVersion='${parsedVersion.majorVersion}.${parsedVersion.minorVersion}.${parsedVersion.nextIncrementalVersion}-SNAPSHOT'
-DgenerateBackupPoms=false
-DprocessAllModules
-DgenerateBackupPoms=false"
我在最后的关闭之前删除了\。这也奏效了。
这里的问题是你使用了三层解释器和编译器,并且都使用相同的语法来替换字符串中的变量:"${myvar}"。
- 首先是Groovy,它会给你一个糟糕的替换,因为它不知道任何名为
parsedVersion.minorVersion
的变量。您可以使用'
s 而不是"
s 来防止 Groovy 尝试这样做或使用逃离
$
。然而,Groovy将$
传递为$
,\$
传递为$
下一个实例。 - 其次是壳牌。同样,您可以选择使用
'
或逃跑。 - Maven,这就是您要进行替换
$
我认为如果你在版本字符串周围使用'
,你可以减少混淆:
sh "mvn build-helper:parse-version versions:set
-DnewVersion='${parsedVersion.majorVersion}.${parsedVersion.minorVersion}.${parsedVersion.nextIncrementalVersion}-SNAPSHOT'
-DgenerateBackupPoms=false
-DprocessAllModules
-DgenerateBackupPoms=false"
编辑:或者这个使用'
s,所以我们需要转义'
s,但不需要在$
s上做任何转义:
sh 'mvn build-helper:parse-version versions:set
-DnewVersion='${parsedVersion.majorVersion}.${parsedVersion.minorVersion}.${parsedVersion.nextIncrementalVersion}-SNAPSHOT'
-DgenerateBackupPoms=false
-DprocessAllModules
-DgenerateBackupPoms=false'