Jenkins 脚本化管道嵌套环境变量
Jenkins scripted pipeline nested environment variable
我正在使用 Jenkins 脚本管道,但无法理解如何将环境变量相互嵌套,这是一个 MWE:
// FROM https://jenkins.io/doc/pipeline/examples/#parallel-multiple-nodes
def labels = []
if (HOST == 'true') {
labels.add(<HOSTNAME>)
}
def builders = [:]
for (x in labels) {
def label = x
builders[label] = {
ansiColor('xterm') {
node(label) {
stage('cleanup') {
deleteDir()
}
stage('build') {
env.test = "TESTA"
env.intern = '''
TEST = "${env.test}"
'''
sh '''
echo $intern
printenv
'''
}
}
}
}
}
parallel builders
这里的想法是 env.test
包含值 TESTA
,它将 env.intern
设置为 TEST = TESTA
这就是我想要发生的事情。在此之后,代码只是打印出值。
遗憾的是结果是 TEST = "${env.test}"
.
如何在 Jenkins 脚本管道中使用嵌套字符串环境变量?
尝试以下操作:
env.intern = "TEST = ${env.test}"
按照您现在的设置,env.intern
的实际结果将是 "TEST= ${env.test}"
。只要在设置 env.intern
之前设置 env.test
就可以了。另外,值得注意的是,如果您更改了 env.test
的值,那么您需要重置 env.intern
的值,否则它将保留 env.test
的原始值。
此处的语法差异是 Groovy 中的文字字符串与内插字符串与 shell 步骤方法中的 shell 解释器。
"
: Groovy 中的内插字符串
'
:Groovy 中的文字字符串和 shell 解释器中的内插字符串
本质上,在管道执行的"
内插入一个Groovy变量,在管道执行的"
内和'
内插入一个环境变量在 shell 解释器中(并且在管道内也必须在 env
对象中访问,但是在 shell 步骤方法中是第一个 class 变量表达式)。
因此,我们可以固定 env.intern
的分配值:
env.intern = "TEST = ${env.test}"
其中 env.test
的分配值将在 Groovy 字符串中插入并分配给 intern
键处的 env
管道对象。然后 shell 解释器也可以在 shell 步骤方法中访问它,并且管道的其余部分已经正确并且将按预期运行。
我正在使用 Jenkins 脚本管道,但无法理解如何将环境变量相互嵌套,这是一个 MWE:
// FROM https://jenkins.io/doc/pipeline/examples/#parallel-multiple-nodes
def labels = []
if (HOST == 'true') {
labels.add(<HOSTNAME>)
}
def builders = [:]
for (x in labels) {
def label = x
builders[label] = {
ansiColor('xterm') {
node(label) {
stage('cleanup') {
deleteDir()
}
stage('build') {
env.test = "TESTA"
env.intern = '''
TEST = "${env.test}"
'''
sh '''
echo $intern
printenv
'''
}
}
}
}
}
parallel builders
这里的想法是 env.test
包含值 TESTA
,它将 env.intern
设置为 TEST = TESTA
这就是我想要发生的事情。在此之后,代码只是打印出值。
遗憾的是结果是 TEST = "${env.test}"
.
如何在 Jenkins 脚本管道中使用嵌套字符串环境变量?
尝试以下操作:
env.intern = "TEST = ${env.test}"
按照您现在的设置,env.intern
的实际结果将是 "TEST= ${env.test}"
。只要在设置 env.intern
之前设置 env.test
就可以了。另外,值得注意的是,如果您更改了 env.test
的值,那么您需要重置 env.intern
的值,否则它将保留 env.test
的原始值。
此处的语法差异是 Groovy 中的文字字符串与内插字符串与 shell 步骤方法中的 shell 解释器。
"
: Groovy 中的内插字符串
'
:Groovy 中的文字字符串和 shell 解释器中的内插字符串
本质上,在管道执行的"
内插入一个Groovy变量,在管道执行的"
内和'
内插入一个环境变量在 shell 解释器中(并且在管道内也必须在 env
对象中访问,但是在 shell 步骤方法中是第一个 class 变量表达式)。
因此,我们可以固定 env.intern
的分配值:
env.intern = "TEST = ${env.test}"
其中 env.test
的分配值将在 Groovy 字符串中插入并分配给 intern
键处的 env
管道对象。然后 shell 解释器也可以在 shell 步骤方法中访问它,并且管道的其余部分已经正确并且将按预期运行。