如何在不同的Jenkins管道之间共享环境变量值?

时间:2020-02-07 10:50:31

标签: jenkins jenkins-declarative-pipeline

我有两条詹金斯管道:

  • 管道A:在一个阶段中,我定义了一个名为MAVEN_PROFILE的环境变量(用户可以从列表中选择一个值)
  • 管道B:我需要获取在管道A中设置的MAVEN_PROFILE环境变量值

我需要两个管道,因为出于处理原因,我无法在单个管道中完成。

我看到关于如何在单个管道中的各个阶段之间共享变量有一些答案,但这不是我的情况。

我想在不同管道之间共享环境变量值。

管道A

pipeline {
 agent any
...
 stages {
    stage('Profile Selection'){
       steps {
         script {
             env.MAVEN_PROFILE = input message: 'Choose the profile :',
             parameters: [choice(name: 'MAVEN_PROFILE', 
            choices: 'all\nserver\nclient', description: 'Profiles')]
         }
       }
    }
 stage(...){
       steps {
         script {
           bat "mvn deploy -P ${env.MAVEN_PROFILE}"
         }
       }
    }
... other stages
  }
}

管道B

pipeline {
 agent any
...
 stages {
... other stages
    stage(...){
       steps {
         script {
           bat "mvn release ... -P ${env.environmentVariableValueFromPipelineA}"
         }
       }
    }
  }
}

1 个答案:

答案 0 :(得分:1)

它们不在同一环境中运行,因此它们不能直接共享环境变量。最简单的方法可能是将这些值写入管道A中工作区中的文件,然后在管道B中将它们读回。诸如此类:

管道A:

sh "echo ${MAVEN_PROFILE} > .MAVEN_PROFILE" 

管道B:

def MAVEN_PROFILE = sh(script: 'cat .MAVEN_PROFILE', returnStdout: true).trim()