I'm trying to set an env variable globally in my
pipeline {} with a concatenation of build details like this
#!groovy
pipeline {
agent {
label "linux"
}
parameters {
string(name: "releaseName", defaultValue: "RM_TEST", description: "Ivy release spec")
}
tools {
jdk 'jdk1.8.0_102'
maven 'maven-3.2.5'
}
environment {
BUILD_REVISION = "${params.releaseName}.${env.BRANCH_NAME}.${currentBuild.startTimeInMillis}.${env.BUILD_ID}"
RELEASE_NAME = "${params.releaseName}"
}
stages {
stage("dummy") {
steps {
sh "echo \"${params.releaseName}.${env.BRANCH_NAME}.${currentBuild.startTimeInMillis}.${env.BUILD_ID}\""
sh "env | sort"
}
}
}
}
and it seems to be silently failing. The
echo command prints the value as expected, but the
env does not include a
BUILD_REVISION variable (the
RELEASE_NAME env variable is shown in the output of
env. I also tried setting the
BUILD_REVISION in an
environment{} block within the stage, and also tried using a string property of
currentBuild. Nothing seems to work.
It seems to work using withEnv
steps {
sh "echo \"${params.releaseName}.${env.BRANCH_NAME}.${currentBuild.startTimeInMillis}.${env.BUILD_ID}\""
withEnv(["BUILD_REVISION=${params.releaseName}.${env.BRANCH_NAME}.${currentBuild.startTimeInMillis}.${env.BUILD_ID}"]) {
sh "env | sort"
}
}
But I'll need to use the variable in multiple stages so I'd prefer it to be in a global
environment{} block.