J'ai un Jenkinsfile
avec des variables globales et des étapes. puis-je mettre à jour la variable globale à partir d'une étape?
Un exemple:
pipeline {
agent any
environment {
PASSWD = "${sh(returnStdout: true, script: 'python -u do_some_something.py')}"
ACC = "HI"
}
stage('stage1') {
when { expression { params.UPDATE_JOB == false } }
steps{
script {
def foo= sh( returnStdout: true, script: 'python -u do_something.py ')
env.ACC = foo
println foo
print("pw")
println env.PASSWD
}
}
}
}
Est-il possible de mettre à jour la variable ACC
avec la valeur de foo afin que je puisse utiliser la variable ACC
à l'étape suivante?
Vous ne pouvez pas remplacer la variable d’environnement définie dans environment {}
bloc. Cependant, il y a une astuce que vous pouvez utiliser. Vous pouvez faire référence à la variable d’environnement ACC
de deux manières:
env.ACC
ACC
La valeur de env.ACC
_ ne peut pas être modifié une fois défini dans environment {}
block, mais ACC
se comporte de la manière suivante: lorsque la variable ACC
n’est pas définie, la valeur de env.ACC
est accessible (s'il existe bien sûr). Mais lorsque ACC
variable est initialisée à un stade quelconque, ACC
fait référence à cette valeur nouvellement définie à un stade quelconque. Considérons l'exemple suivant:
pipeline {
agent any
environment {
FOO = "initial FOO env value"
}
stages {
stage("Stage 1") {
steps {
script {
echo "FOO is '${FOO}'" // prints: FOO is 'initial FOO env value'
env.BAR = "bar"
}
}
}
stage("Stage 2") {
steps {
echo "env.BAR is '${BAR}'" // prints: env.BAR is 'bar'
echo "FOO is '${FOO}'" // prints: FOO is 'initial FOO env value'
echo "env.FOO is '${env.FOO}'" // prints: env.FOO is 'initial FOO env value'
script {
FOO = "test2"
env.BAR = "bar2"
}
}
}
stage("Stage 3") {
steps {
echo "FOO is '${FOO}'" // prints: FOO is 'test2'
echo "env.FOO is '${env.FOO}'" // prints: env.FOO is 'initial FOO env value'
echo "env.BAR is '${BAR}'" // prints: env.BAR is 'bar2'
script {
FOO = "test3"
}
echo "FOO is '${FOO}'" // prints: FOO is 'test3'
}
}
}
}
Et comme vous pouvez le voir dans l'exemple ci-dessus, la seule exception à la règle est si la variable d'environnement est initialisée en dehors de envrionment {}
bloc. Par exemple, env.BAR
dans cet exemple a été initialisé dans Stage 1
, mais la valeur de env.BAR
pourrait être changé dans Stage 2
et Stage 3
voit la valeur modifiée.