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"""