2017-01-08 70 views
6

我想在我的Jenkinsfile脚本中使用我正在使用的变量,然后将其值传递给shell脚本执行(作为环境变量或命令行参数)。如何将变量从Jenkinsfile传递到shell命令

但以下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值传递给shell scipt?

编辑:基于Matt's答案,我现在用的这个解决方案:

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

的好处是,我不需要逃避shell脚本的"

回答

8

你的代码是用一个文字字符串,因此您的詹金斯变量不会在shell命令内插值。您需要使用"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\"" 
} 

此外,如果一个变量被直接追加像上面正在做的那样($ii=),我们需要用一些花括号关闭它:

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

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

而是我不能查,也尽量围绕VAR这样$ {I} – chenchuk

+2

两者都行不通。检查groovy语法,'''和'''''之间的区别仅仅是单行字符串对多行字符串。 – Joe

+0

我相信“sh”“”'会起作用,即三重双引号而不是三重单引号 –

3

扩展到马茨回答: 对于多行sh脚本使用

sh '''...''' 
相关问题