在 Jenkins 管道中使用 maven 版本插件提升版本时出现错误的替换错误



当我在 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}"。

  1. 首先是Groovy,它会给你一个糟糕的替换,因为它不知道任何名为parsedVersion.minorVersion的变量。您可以使用's 而不是"s 来防止 Groovy 尝试这样做或使用逃离$。然而,Groovy将$传递为$\$传递为$下一个实例。
  2. 其次是壳牌。同样,您可以选择使用'或逃跑。
  3. 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'

最新更新