28

我想使用我在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 吗?

编辑:根据马特的回答,我现在使用这个解决方案:

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

优点是,我不需要"在 shell 脚本中转义。

4

3 回答 3

33

您的代码使用的是文字字符串,因此您的 Jenkins 变量不会被插入到 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\""
}

此外,如果变量像您在上面所做的那样直接附加到字符串($ion i=),我们需要用一些花括号将其关闭:

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

这会让你得到你想要的行为。

于 2017-01-09T14:26:15.663 回答
25

扩展至 Matts 答案:对于多行 sh 脚本,请使用

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

代替

sh '''
  echo ${paramName}
'''
于 2017-08-29T13:51:12.890 回答
0

试试这个:

for (i in [ 'a', 'b', 'c' ]) {
    echo i
    sh '''
    echo "from shell i=$i"
    '''
}
于 2017-01-08T23:36:19.587 回答