如何将变量从 Jenkinsfile 传递到 shell 命令
How to pass variables from Jenkinsfile to shell command
我想使用我在 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 脚本中转义 "
。
试试这个:
for (i in [ 'a', 'b', 'c' ]) {
echo i
sh '''
echo "from shell i=$i"
'''
}
您的代码使用的是文字字符串,因此您的 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}\""
}
这会让你得到你想要的行为。
Matts 答案的扩展:
对于多行 sh 脚本,使用
sh """
echo ${paramName}
"""
而不是
sh '''
echo ${paramName}
'''
我想使用我在 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 脚本中转义 "
。
试试这个:
for (i in [ 'a', 'b', 'c' ]) {
echo i
sh '''
echo "from shell i=$i"
'''
}
您的代码使用的是文字字符串,因此您的 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}\""
}
这会让你得到你想要的行为。
Matts 答案的扩展: 对于多行 sh 脚本,使用
sh """
echo ${paramName}
"""
而不是
sh '''
echo ${paramName}
'''