从 Jenkinsfile 的另一个阶段调用环境变量
Call environment variable from another stage in Jenkinsfile
我有以下 Jenkins 文件。
pipeline {
agent any
stages {
stage('Generate script') {
steps {
script {
sh 'sh generate_version.sh new_version.log'
}
}
}
stage('Fetch version') {
environment {
version = sh(returnStdout: true, script: '''sh grep version: ''').trim()
}
steps {
script {
sh 'echo "do something: $version"'
}
}
}
stage('use the version') {
steps {
script {
sh 'echo $version'
}
}
}
}
}
我无法在第 3 阶段获取版本,当然我可以在主管道中定义,但如您所见,我在其中一个阶段获取变量值,因此这不适用于我。
有没有其他方法,我可以在舞台外访问 version 环境变量?
Fetch version
阶段内的 environment
块将 env.version
变量的范围限制在这个阶段。但是,如果你想在一个阶段在环境变量中存储一个值,并在下一阶段访问这个变量,你必须在 script
块内分配它,例如:
pipeline {
agent any
stages {
stage('Generate script') {
steps {
script {
sh 'sh generate_version.sh new_version.log'
}
}
}
stage('Fetch version') {
steps {
script {
// here we create `env.version` variable that can be access in the later stages
env.version = sh(returnStdout: true, script: '''sh grep version: ''').trim()
sh 'echo "do something: $version"'
}
}
}
stage('use the version') {
steps {
script {
sh "echo $version"
}
}
}
}
}
您还可以使用 shorthand 版本并将值分配给 version
而不是 env.version
,但这是一个隐式绑定,使其显式化会使您的意图更加明确直截了当。另一件值得一提的事情——当你想正确插入 $version
变量时使用双引号。单引号将按原样打印文本。
我有以下 Jenkins 文件。
pipeline {
agent any
stages {
stage('Generate script') {
steps {
script {
sh 'sh generate_version.sh new_version.log'
}
}
}
stage('Fetch version') {
environment {
version = sh(returnStdout: true, script: '''sh grep version: ''').trim()
}
steps {
script {
sh 'echo "do something: $version"'
}
}
}
stage('use the version') {
steps {
script {
sh 'echo $version'
}
}
}
}
}
我无法在第 3 阶段获取版本,当然我可以在主管道中定义,但如您所见,我在其中一个阶段获取变量值,因此这不适用于我。
有没有其他方法,我可以在舞台外访问 version 环境变量?
Fetch version
阶段内的 environment
块将 env.version
变量的范围限制在这个阶段。但是,如果你想在一个阶段在环境变量中存储一个值,并在下一阶段访问这个变量,你必须在 script
块内分配它,例如:
pipeline {
agent any
stages {
stage('Generate script') {
steps {
script {
sh 'sh generate_version.sh new_version.log'
}
}
}
stage('Fetch version') {
steps {
script {
// here we create `env.version` variable that can be access in the later stages
env.version = sh(returnStdout: true, script: '''sh grep version: ''').trim()
sh 'echo "do something: $version"'
}
}
}
stage('use the version') {
steps {
script {
sh "echo $version"
}
}
}
}
}
您还可以使用 shorthand 版本并将值分配给 version
而不是 env.version
,但这是一个隐式绑定,使其显式化会使您的意图更加明确直截了当。另一件值得一提的事情——当你想正确插入 $version
变量时使用双引号。单引号将按原样打印文本。