如何在 Jenkins 管道中设置和获取 LINUX ENV 变量?
How to set and get LINUX ENV variables in Jenkins pipelines?
这可能是个愚蠢的问题,但我无法解决。我想设置并获取 LINUX (不是 Jenkins)ENV 变量。我知道如何处理 Jenkins 环境变量(例如 env.JENKINS_HOME
)但是 Linux ENV 变量似乎被关闭了。
当使用 sh "printenv"
时,这会按预期打印所有 Linux ENV 变量,但通过 export SOME_VAR=123
设置它们似乎不起作用。 printenv
没有显示。使用 System.getenv("SOME_VAR")
也不起作用。
例如:
stage('echo stuff') {
steps {
script {
sh "printenv"
sh "export SOME_VAR=123"
sh 'echo $SOME_VAR'
}
}
}
产生这个:
[Pipeline] stage
[Pipeline] { (echo stuff)
[Pipeline] script
[Pipeline] {
[Pipeline] sh
+ export SOME_VAR=123
+ SOME_VAR=123
[Pipeline] sh
+ echo
[Pipeline] }
我无法找到关于这个可能非常常见的问题的帮助,因为所有可用的内容都与 Jenkins 环境变量有关。
我认为问题在于,每个 sh
块都是它自己的 shell 会话。因此,如果您使用 sh "export SOME_VAR=123"
导出变量,则不会在下一行中设置它。你想像这样使用 shell 多行:
stage('echo stuff') {
steps {
script {
sh '''
export SOME_VAR=123
echo $SOME_VAR
'''
}
}
}
这将如您所愿。
这可能是个愚蠢的问题,但我无法解决。我想设置并获取 LINUX (不是 Jenkins)ENV 变量。我知道如何处理 Jenkins 环境变量(例如 env.JENKINS_HOME
)但是 Linux ENV 变量似乎被关闭了。
当使用 sh "printenv"
时,这会按预期打印所有 Linux ENV 变量,但通过 export SOME_VAR=123
设置它们似乎不起作用。 printenv
没有显示。使用 System.getenv("SOME_VAR")
也不起作用。
例如:
stage('echo stuff') {
steps {
script {
sh "printenv"
sh "export SOME_VAR=123"
sh 'echo $SOME_VAR'
}
}
}
产生这个:
[Pipeline] stage
[Pipeline] { (echo stuff)
[Pipeline] script
[Pipeline] {
[Pipeline] sh
+ export SOME_VAR=123
+ SOME_VAR=123
[Pipeline] sh
+ echo
[Pipeline] }
我无法找到关于这个可能非常常见的问题的帮助,因为所有可用的内容都与 Jenkins 环境变量有关。
我认为问题在于,每个 sh
块都是它自己的 shell 会话。因此,如果您使用 sh "export SOME_VAR=123"
导出变量,则不会在下一行中设置它。你想像这样使用 shell 多行:
stage('echo stuff') {
steps {
script {
sh '''
export SOME_VAR=123
echo $SOME_VAR
'''
}
}
}
这将如您所愿。