一尘不染

如何将变量从Jenkinsfile传递到Shell命令

jenkins

我想在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脚本中转义。


阅读 2381

收藏
2020-07-25

共1个答案

一尘不染

您的代码使用文字字符串,因此您的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\""
}

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

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

这将使您获得想要的行为。

2020-07-25