#docker #jenkins #groovy #jenkins-pipeline
Вопрос:
В моем запуске docker я хотел бы передать секрет в качестве переменной env. И это работает просто отлично. Однако у меня также есть вторая переменная «foo», которую я хотел бы отобразить внутри моего контейнера. Это не работает. Как я могу заставить переменную «foo» расширяться внутри тройных одинарных кавычек?
stages {
stage('test') {
steps {
script {
def foo = "bar"
sh '''
docker run
--rm
--env secret=$ENV_SECRET
python:3.8.12 /bin/bash -c
"echo $foo"
'''
}
}
}
}
Комментарии:
1. Секреты должны обрабатываться специально в конвейерах Дженкинса! Смотрите
environment { ... credentials('...') } }
.
Ответ №1:
Синтаксис для интерполяции строк с переменными Groovy в Groovy включает "
. Если ваша ENV_SECRET
переменная окружения связана с withCredentials
блоком, то вы хотите интерполировать ее в интерпретаторе оболочки. Поэтому мы можем обновить ваш метод шага оболочки с помощью:
sh """
docker run
--rm
--env secret=$ENV_SECRET
python:3.8.12 /bin/bash -c
'echo $foo'
"""
Вместо этого в вашем синтаксисе были бы интерполированы переменные оболочки. Обратите внимание, что оба будут интерполировать переменные среды, но с разными интерпретаторами.
Комментарии:
1. Ссылка: Groovy, Синтаксис, строка в тройных двойных кавычках
2. Выполнение этого таким образом генерирует предупреждение в Jenkins Следующие шаги, которые были обнаружены, могут иметь небезопасную интерполяцию чувствительных переменных (нажмите здесь для объяснения):
3. Просто убегайте
$
для каждого секрета.""" ... secret=$ENV_SECRET ..."""
4. @Kinder9211 Если ваша
ENV_SECRET
переменная окружения связана сwithCredentials
блоком, то вы хотите интерполировать ее в интерпретаторе оболочки. В этой ситуации даггетт полностью прав, и я обновлю ответ.5. Да, это было то, что я искал, потому что объяснение, данное Дженкинсом, заключало его в одинарные кавычки 🙂