如何在不同的 Jenkins 管道之间共享环境变量值?
How to share environment variable value across different Jenkins Pipelines?
我有两个 Jenkins 管道:
- 管道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}"
}
}
}
}
}
他们运行不在同一个环境中,所以他们不能直接共享环境变量。最简单的方法可能是将这些值写入管道 A 工作区中的文件,然后在管道 B 中将它们读回。像这样:
管道 A:
sh "echo ${MAVEN_PROFILE} > .MAVEN_PROFILE"
管道 B:
def MAVEN_PROFILE = sh(script: 'cat .MAVEN_PROFILE', returnStdout: true).trim()
我有两个 Jenkins 管道:
- 管道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}"
}
}
}
}
}
他们运行不在同一个环境中,所以他们不能直接共享环境变量。最简单的方法可能是将这些值写入管道 A 工作区中的文件,然后在管道 B 中将它们读回。像这样:
管道 A:
sh "echo ${MAVEN_PROFILE} > .MAVEN_PROFILE"
管道 B:
def MAVEN_PROFILE = sh(script: 'cat .MAVEN_PROFILE', returnStdout: true).trim()