如何在 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
        '''
    }
  }
}

这将如您所愿。

可以找到更多信息Jenkins.io running-multiple-steps