【发布时间】:2021-01-07 15:22:39
【问题描述】:
我有这个代码:
#!groovy
pipeline {
agent any
environment {
def SUPER_VAR = sh(returnStdout: true, script: """openssl rand -base64 12""").trim()
SUPER_VALUE = sh(returnStdout: true, script: """echo ${SUPER_VAR}""").trim()
SUPER_DUPER_VALUE = sh(returnStdout: true, script: """echo ${SUPER_VAR}""").trim()
}
stages {
stage("initialise") {
steps {
script {
sh "echo SUPER_VAR \${SUB_VAR}"
sh "echo SUPER_VALUE \${SUPER_VALUE}"
sh "echo SUPER_DUPER_VALUE \${SUPER_DUPER_VALUE}"
sh "env"
}
}
}
}
}
我想要的输出是,每次我调用/创建一个新变量时,值都是一样的:
[Pipeline] { (initialise)
[Pipeline] script
[Pipeline] {
[Pipeline] sh
+ echo SUPER_VAR
SUPER_VAR
[Pipeline] sh
+ echo SUPER_VALUE FSDYe8VNL3VTvASj
SUPER_VALUE FSDYe8VNL3VTvASj
[Pipeline] sh
+ echo SUPER_DUPER_VALUE FSDYe8VNL3VTvASj
SUPER_DUPER_VALUE FSDYe8VNL3VTvASj
[Pipeline] sh
在詹金斯中发生的事情是这样的:
[Pipeline] { (initialise)
[Pipeline] script
[Pipeline] {
[Pipeline] sh
+ echo SUPER_VAR
SUPER_VAR
[Pipeline] sh
+ echo SUPER_VALUE FSDYe8VNL3VTvASj
SUPER_VALUE FSDYe8VNL3VTvASj
[Pipeline] sh
+ echo SUPER_DUPER_VALUE NSmVwW9xz6IPG5AO
SUPER_DUPER_VALUE NSmVwW9xz6IPG5AO
[Pipeline] sh
每次我基于SUPER_VAR 创建一个var 时,似乎脚本再次运行,我得到不同的输出。
如何将脚本的输出注册到全局变量中,以便以后可以用于全局创建新变量?
【问题讨论】:
-
全局初始化变量是默认行为。在
environment指令中移动初始化是使它们成为env映射中的键值对的原因。删除environment指令并将变量放在管道中,您应该一切顺利。 -
????我有很多阶段,@MattSchuchard 当您说“在管道中放置变量”时,您是指在每个阶段定义变量吗?
标签: bash jenkins groovy jenkins-pipeline