Ошибка неверной замены при увеличении версии с помощью плагина maven version в конвейере Jenkins - PullRequest
0 голосов
/ 19 сентября 2018

Я получаю неверную ошибку замещения при запуске этой команды в моем конвейере jenkins

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

В данном случае это сообщение об ошибке -

[code] Запуск оболочкиподлинник.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 при запуске вышеуказанной команды

[code] Запуск сценария оболочки

mvn build-helper: версии parse-версии: set '-DnewVersion = $ {parsedVersion.majorVersion}. $ {parsedVersion.minorVersion}. $ {parsedVersion.nextIncrementalVersion} -SNAPSHOT' -DgenerateBackupPoms = false -DprocessAllModules -Deneg1024 *

Здесь также работают двойные кавычки -

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 Ответ

0 голосов
/ 19 сентября 2018

Проблема здесь в том, что вы используете три уровня интерпретаторов и компиляторов и все используете один и тот же синтаксис для подстановки переменных в строках: "$ {myvar}".

  1. Сначала Groovy,который дал бы вам плохую замену, так как он не знает ни одной переменной с именем parsedVersion.minorVersion.Вы можете использовать ' с вместо " с, чтобы помешать Groovy это сделать или избежать $ с \.Однако Groovy передаст \$ как $ и \\\$ как \$ следующему экземпляру.
  2. Во-вторых, есть Shell.Опять же, у вас есть возможность использовать ' или убежать.
  3. Maven, и это тот, который вы хотели бы сделать замену $

Я думаю, вы могли бысделайте меньше путаницы, если вы будете использовать ' вокруг строки вашей версии:

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

EDIT: или этот, используя ' s, поэтому нам нужно экранировать ' s, но нене нужно совершать побег на $ s:

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