我有以下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阶段获取版本,当然我可以在主管道中定义,但是你可以看到我在其中一个阶段得到变量值,所以这对我不起作用。
有没有其他方法,我可以访问阶段之外的版本环境变量?
environment
阶段内的Fetch version
区块仅将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"
}
}
}
}
}
你也可以使用简写版本并为version
而不是env.version
赋值,但这是一个隐式绑定,并使其显式使你的意图更直接。值得一提的另一件事 - 当你想正确插入$version
变量时使用双引号。单引号将按原样打印文本。