Я только что проверил код ниже, и он работал.Запуск его в Docker не должен иметь никакого эффекта.Верхний уровень «агент никто» также не должен иметь никакого влияния, если он это делает, просто определите очень маленького агента с точки зрения ресурсов на верхнем уровне.
# Define the variable and set it to some value.
myVar = 12
# A function to use in the environment blocks below.
def getVar() {
return myVar
}
pipeline {
agent any
environment {
# Set the environment variable to the value of the Groovy variable.
MY_VAR = getVar()
}
stages {
stage("Test1") {
steps {
script {
# Change the value of the Groovy variable.
myVar = 13
}
# The environment variable won't change as long as we don't use an environment block to change it.
sh "echo ${MY_VAR}"
}
}
stage("Test2") {
environment {
# Updating the environment variable.
MY_VAR = getVar()
}
steps {
# And checking that it has been updated.
sh "echo ${MY_VAR}"
}
}
}
}
Для меня это печатает:
+ echo 12
12
[Pipeline] }
[Pipeline] // stage
[Pipeline] stage
[Pipeline] { (Test2)
[Pipeline] withEnv
[Pipeline] {
[Pipeline] sh
[Pipeline__all-branches__CI] Running shell script
+ echo 13
13
Таким образом, значение переменной сохраняется между этапами, и вы можете изменить его на любом этапе.