从 Jenkins 管道的 shell 步骤中访问 Groovy 变量
Access a Groovy variable from within shell step in Jenkins pipeline
使用 Pipeline plugin in Jenkins 2.x,如何从 sh
步骤中访问在阶段级或节点级某处定义的 Groovy 变量?
简单示例:
node {
stage('Test Stage') {
some_var = 'Hello World' // this is Groovy
echo some_var // printing via Groovy works
sh 'echo $some_var' // printing in shell does not work
}
}
在 Jenkins 输出页面上给出以下内容:
[Pipeline] {
[Pipeline] stage
[Pipeline] { (Test Stage)
[Pipeline] echo
Hello World
[Pipeline] sh
[test] Running shell script
+ echo
[Pipeline] }
[Pipeline] // stage
[Pipeline] }
[Pipeline] // node
[Pipeline] End of Pipeline
Finished: SUCCESS
可以看到,sh
步骤中的 echo
打印了一个空字符串。
一种解决方法是通过
在环境范围内定义变量
env.some_var = 'Hello World'
并通过
打印
sh 'echo ${env.some_var}'
但是,这种方式滥用了此任务的环境范围。
要使用可模板化的字符串,将变量替换为字符串,请使用双引号。
sh "echo $some_var"
我添加@Pedro 的评论作为答案,因为我认为这很重要。
对于 sh 环境变量,我们必须使用
sh "echo $some_var"
我想在此讨论中添加另一个场景。
我在同一脚本中使用 shell 环境变量和 groovy 变量。
format='html'
for file in *.txt;
do mv -- "$file" "${file%.txt}.$format";
done
所以在这里,我所做的是仅对 shell 环境变量使用 \$,对 groovy 变量使用 $。
如果需要 bash 脚本,您需要执行如下操作:
在 sh 脚本可以访问的全局或局部(函数)级别设置此变量:
def stageOneWorkSpace = "/path/test1"
def stageTwoWorkSpace = "/path/test2"
在 shell 脚本中像下面这样调用它们
sh '''
echo ''' +stageOneWorkSpace+ '''
echo ''' +stageTwoWorkSpace+ '''
cp -r ''' +stageOneWorkSpace+'''/qa/folder1/* ''' +stageOneWorkSpace+'''/qa/folder2
'''
确保你用三个引号开始和结束 sh,比如 '''
使用 Pipeline plugin in Jenkins 2.x,如何从 sh
步骤中访问在阶段级或节点级某处定义的 Groovy 变量?
简单示例:
node {
stage('Test Stage') {
some_var = 'Hello World' // this is Groovy
echo some_var // printing via Groovy works
sh 'echo $some_var' // printing in shell does not work
}
}
在 Jenkins 输出页面上给出以下内容:
[Pipeline] {
[Pipeline] stage
[Pipeline] { (Test Stage)
[Pipeline] echo
Hello World
[Pipeline] sh
[test] Running shell script
+ echo
[Pipeline] }
[Pipeline] // stage
[Pipeline] }
[Pipeline] // node
[Pipeline] End of Pipeline
Finished: SUCCESS
可以看到,sh
步骤中的 echo
打印了一个空字符串。
一种解决方法是通过
在环境范围内定义变量env.some_var = 'Hello World'
并通过
打印sh 'echo ${env.some_var}'
但是,这种方式滥用了此任务的环境范围。
要使用可模板化的字符串,将变量替换为字符串,请使用双引号。
sh "echo $some_var"
我添加@Pedro 的评论作为答案,因为我认为这很重要。
对于 sh 环境变量,我们必须使用
sh "echo $some_var"
我想在此讨论中添加另一个场景。 我在同一脚本中使用 shell 环境变量和 groovy 变量。
format='html'
for file in *.txt;
do mv -- "$file" "${file%.txt}.$format";
done
所以在这里,我所做的是仅对 shell 环境变量使用 \$,对 groovy 变量使用 $。
如果需要 bash 脚本,您需要执行如下操作:
在 sh 脚本可以访问的全局或局部(函数)级别设置此变量:
def stageOneWorkSpace = "/path/test1"
def stageTwoWorkSpace = "/path/test2"
在 shell 脚本中像下面这样调用它们
sh '''
echo ''' +stageOneWorkSpace+ '''
echo ''' +stageTwoWorkSpace+ '''
cp -r ''' +stageOneWorkSpace+'''/qa/folder1/* ''' +stageOneWorkSpace+'''/qa/folder2
'''
确保你用三个引号开始和结束 sh,比如 '''