2017-01-08 4 views
6

Я хочу использовать переменную, которую я использую внутри своего сценария Jenkinsfile, а затем передать его значение в выполнение сценария оболочки (либо как переменная среды, либо параметр командной строки).Как передать переменные из Jenkinsfile в команду оболочки

Но следующий 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 в скот?

Edit: На основе Matt's ответа, я теперь использовать это решение:

for (i in [ 'a', 'b', 'c' ]) { 
    echo i 
    sh "i=${i}; " + 'echo "from shell i=$i"' 
} 

Преимущество заключается в том, что мне не нужно, чтобы избежать " в сценарии оболочки.

ответ

8

Вашего код использует символьную строку и, следовательно, ваша переменная Дженкинс не будет интерполировать внутри команды оболочки. Вы должны использовать ", чтобы интерполировать переменную внутри строк в sh. ' просто передаст литеральную строку. Поэтому нам нужно внести несколько изменений.

Первый изменить ' к ":

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

Это даст вам поведение, которое вы желаете.

2

попробовать это:

for (i in [ 'a', 'b', 'c' ]) { 
    echo i 
    sh ''' 
    echo "from shell i=$i" 
    ''' 
} 
+0

я не могу проверить, но и пытаются окружить вар как этот $ {I} – chenchuk

+2

Оба не будут работать. При проверке сильного синтаксиса различие между '' 'и' '' ''- это только строковая строка в сравнении с многострочной строкой. – Joe

+0

Я верю, что 'sh '" "' будет работать, т. Е. Тройные двойные кавычки вместо тройных одиночных кавычек –

3

Расширение Matts ответ: ШГ скрипты многострочные использовать

sh """ 
    echo ${paramName} 
""" 

вместо

sh '''...'''