groovy script-sh с переменной
упускаю что-то очевидное. как передать переменную из скрипта groovy в команду оболочки? это в контексте файла Jenkinsfile, если это имеет значение для синтаксиса.
def COLOR
node('nodename'){
stage ('color') {
COLOR = "green"
echo "color is $COLOR"
sh '''COLOR=${COLOR}
echo $COLOR'''
}
}
Я ожидаю увидеть печать бит оболочки green
, но я получаю следующее:
[Pipeline] echo
color is green
[Pipeline] sh
[job] Running shell script
+ COLOR=
+ echo
Я должен использовать тройное цитирование на sh
из-за содержания, которое будет идти туда, как только я это исправлю.
2 ответов
вы должны использовать двойные кавычки вместо одиночных, чтобы заменить выражения в строке:
def COLOR
node('nodename'){
stage ('color') {
COLOR = "green"
echo "color is $COLOR"
sh """COLOR=${COLOR}
echo $COLOR"""
}
}
Если по какой-то причине необходимо использовать одинарные кавычки, попробуйте объединить с помощью +
:
sh '''COLOR=''' + COLOR + '''
echo ''' + COLOR
Если код здесь предназначен для присвоения значения переменной groovy ("зеленый") цвету переменной среды и echo $COLOR
предназначен для печати переменной оболочки,$
должен быть экранирован, чтобы оболочка могла прочитать его, например:
sh """COLOR=${COLOR}
echo $COLOR"""