Как передать переменные из Jenkinsfile в команду shell
Я хочу использовать переменную, которую я использую внутри моей Jenkinsfile
script, а затем передать его значение в выполнение сценария оболочки (либо в качестве переменной среды или параметра командной строки).
а после Jenkinsfile
:
for (i in [ 'a', 'b', 'c' ]) {
echo i
sh 'echo "from shell i=$i"'
}
дает на выходе:
a
from shell i=
b
from shell i=
c
from shell i=
желаемый результат-это что-то вроде:
a
from shell i=a
b
from shell i=b
c
from shell i=c
любая идея, как передать значение i
к снаряду scipt?
Edit: на основе Мэтт!--22--> ответ, теперь я использую такое решение:
for (i in [ 'a', 'b', 'c' ]) {
echo i
sh "i=${i}; " + 'echo "from shell i=$i"'
}
преимущество в том, что мне не нужно избегать "
в shell-скрипт.
3 ответов
ваш код использует литеральную строку, и поэтому ваша переменная Дженкинса не будет интерполирована внутри команды оболочки. Вам нужно использовать "
чтобы интерполировать переменную внутри строк внутри sh
. '
просто передаст литеральную строку. Поэтому нам нужно внести некоторые изменения.
первое, чтобы изменить '
to "
:
for (i in [ 'a', 'b', 'c' ]) {
echo i
sh "echo "from shell i=$i""
}
однако теперь нам нужно избежать "
на внутри:
for (i in [ 'a', 'b', 'c' ]) {
echo i
sh "echo \"from shell i=$i\""
}
кроме того, если переменная добавляется непосредственно к строке, как вы делаете выше ($i
на i=
), нам нужно закрыть его с некоторыми фигурными скобками:
for (i in [ 'a', 'b', 'c' ]) {
echo i
sh "echo \"from shell i=${i}\""
}
это даст вам поведение, которое вы желаете.
расширение для ответа Matts: Для многострочных SH скриптов используйте
sh """
echo ${paramName}
"""
вместо
sh '''...'''