Mar*_*ohn 16 groovy jenkins jenkins-pipeline
I have a Jenkinsfile with some global variables and some stages.
can I update the global variable out from a stage?
An example:
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
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
是否ACC可以使用foo中的值更新变量,以便我可以ACC在下一阶段使用变量?
Szy*_*iak 27
您不能覆盖environment {}块中定义的环境变量。但是,您可能要使用一个技巧。您可以通过ACC两种方式引用环境变量:
env.ACCACCenv.ACC一旦在environment {}块中设置了值,就无法更改它的值,但ACC其行为如下:ACC未设置变量时,env.ACC将访问值(如果存在)。但是,ACC在任何阶段初始化变量时,在任何阶段都ACC引用此新设置的值。考虑以下示例:
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'
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
正如您在上面的示例中看到的那样,该规则的唯一例外是环境变量是否在envrionment {}块外部初始化。例如,env.BAR在此示例中,在中初始化了Stage 1,但是env.BAR可以在中更改的值Stage 2并Stage 3看到更改后的值。
| 归档时间: |
|
| 查看次数: |
10269 次 |
| 最近记录: |