Ошибка неверной замены при увеличении версии с помощью плагина maven version в конвейере Jenkins
Я получаю ошибку подстановки при запуске этой команды в моем конвейере jenkins
sh 'mvn build-helper:parse-version versions:set \
-DnewVersion=${parsedVersion.majorVersion}.${parsedVersion.minorVersion}.${parsedVersion.nextIncrementalVersion}-SNAPSHOT \
-DgenerateBackupPoms=false \
-DprocessAllModules \
-DgenerateBackupPoms=false'
Это сообщение об ошибке в данном случае -
[code] Запуск скрипта оболочки
/apps/jenkins/latest/workspace/ess-holani_master-3YNVBB6LFQA3QFK5NHYV57DW5HGSNALVGFJTJ4D6T72QVPJG4CDA/code@tmp/durable-374bc417/script.sh: parion {{parsion} {V.} {V..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-version version:set '-DnewVersion=${parsedVersion.majorVersion}.${parsedVersion.minorVersion}.${parsedVersion.nextIncrementalVersion}-SNAPSHOT' -DgenerateBackupPoms=falseMDoBodesAll =
Использование двойных кавычек также работает здесь -
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 ответ
Проблема здесь в том, что вы используете три уровня интерпретаторов и компиляторов, и все они используют один и тот же синтаксис для подстановки переменных в строках: "${myvar}".
- Во-первых, Groovy, который дал бы вам плохую замену, так как он не знает ни одной переменной с именем
parsedVersion.minorVersion
, Ты можешь использовать'
с вместо"
s, чтобы предотвратить Groovy, чтобы попытаться это или избежать$
с\
, Groovy однако пройдет\$
как$
а также\\\$
как\$
к следующему экземпляру. - Второе - это Shell. Опять же у вас есть возможность использовать
'
или убежать. - Maven и это тот, который вы хотели бы сделать замену
$
Я думаю, что вы могли бы пойти с меньшим количеством путаницы, если бы вы использовали '
вокруг вашей версии строки:
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'