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

yhived7q  于 2022-11-01  发布在  Jenkins
关注(0)|答案(4)|浏览(374)

我想使用一个在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脚本吗?

**编辑:**根据Matt's的答案,我现在使用以下解决方案:

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

这样做的好处是,我不需要在shell脚本中转义"

i7uaboj4

i7uaboj41#

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

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

f87krz0w

f87krz0w2#

延伸至Matts回答:对于多行sh脚本,请使用

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

而不是

sh '''
  echo ${paramName}
'''
sy5wg1nm

sy5wg1nm3#

请尝试以下操作:

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

waxmsbnn4#

对于多行,这也应该起作用:

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

相关问题