首页 文章

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

提问于
浏览
1

我在jenkins管道中运行此命令时出现错误的替换错误

sh 'mvn build-helper:parse-version versions:set \
-DnewVersion=${parsedVersion.majorVersion}.${parsedVersion.minorVersion}.${parsedVersion.nextIncrementalVersion}-SNAPSHOT \
-DgenerateBackupPoms=false \
-DprocessAllModules \
-DgenerateBackupPoms=false'

在这种情况下,这是错误消息 -

[code]运行shell脚本/apps/jenkins/latest/workspace/ess-holani_master-3YNVBB6LFQA3QFK5NHYV57DW5HGSNALVGFJTJ4D6T72QVPJG4CDA/code@tmp/durable-374bc417/script.sh:line 2:-DnewVersion = $ . $ . $ -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

[code]运行shell脚本mvn build-helper:parse-version versions:set'-DnewVersion = $ . $ . $ -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"

我在最后关闭之前删除了\ . 这也有效 .

1 回答

  • 2

    这里的问题是你使用三层解释器和编译器,并且在字符串中对变量替换使用相同的语法:“$ ” .

    • 首先是Groovy,它会给你一个糟糕的替换,因为它不知道任何名为 parsedVersion.minorVersion 的变量 . 您可以使用 ' 而不是 " 来阻止Groovy尝试或使用 \ 转义 $ . 然而,Groovy将 \$ 作为 $\\\$ 作为 \$ 传递给下一个实例 .

    • 其次是壳牌 . 您可以选择使用 ' 或进行转义 .

    • Maven和's the one which you' d喜欢做替换 $

    如果您在版本字符串周围使用 ' ,我认为您可以减少混淆:

    sh "mvn build-helper:parse-version versions:set \
      -DnewVersion='\${parsedVersion.majorVersion}.\${parsedVersion.minorVersion}.\${parsedVersion.nextIncrementalVersion}-SNAPSHOT' \
      -DgenerateBackupPoms=false \
      -DprocessAllModules \
      -DgenerateBackupPoms=false"
    

    编辑:或者这个使用 ' s所以我们需要逃避 ' 但是不需要在 $ 上进行任何转义:

    sh 'mvn build-helper:parse-version versions:set \
      -DnewVersion=\'${parsedVersion.majorVersion}.${parsedVersion.minorVersion}.${parsedVersion.nextIncrementalVersion}-SNAPSHOT\' \
      -DgenerateBackupPoms=false \
      -DprocessAllModules \
      -DgenerateBackupPoms=false'
    

相关问题