我想在我的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脚本中的"
。
答案 0 :(得分:17)
您的代码使用文字字符串,因此您的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\""
}
此外,如果一个变量直接附加到字符串上,就像你上面那样($i
到i=
),我们需要用一些大括号将其关闭:
for (i in [ 'a', 'b', 'c' ]) {
echo i
sh "echo \"from shell i=${i}\""
}
这会让你得到你想要的行为。
答案 1 :(得分:12)
扩展到Matts答案: 对于多行sh脚本,请使用
sh """
echo ${paramName}
"""
而不是
sh '''...'''
答案 2 :(得分:2)
试试这个:
for (i in [ 'a', 'b', 'c' ]) {
echo i
sh '''
echo "from shell i=$i"
'''
}