I cannot seem to extract $GIT_COMMIT and $BRANCH_NAME from a Jenkins Workflow Checkout step.
I would like to be able to send this information through to my Gradle scripts in order to pass it onto external sources such as Static analysis etc.
Currently I try to run this:
checkout([$class: 'GitSCM', branches: [[name: '*/master']], userRemoteConfigs: [[credentialsId: '2b74a351-67d5-4d00-abd3-49842a984201', url: 'ssh://git@corporate.com:repo.git']]])
And I would like to achieve the following or something similar:
// Specified variables that can be reused
def branch = ${BRANCH_NAME}
def commit = ${GIT_COMMIT}
Or maybe this would work too:
print "BRANCH: ${BRANCH_NAME}, COMMIT: ${GIT_COMMIT}"
// or the following
print "BRANCH: ${env.BRANCH_NAME}, COMMIT: ${env.GIT_COMMIT}"
I did find the following issue which seems to be resolved but it doesn't work in version 1.15:
https://issues.jenkins-ci.org/browse/JENKINS-30252
Anyone have any ideas how to workaround this or if there's a variable I cannot find?
If you want to access the
BRANCH_NAME
from Jenkins environment variable as a shell script, use the below snippet.sh 'echo Branch Name: $BRANCH_NAME'
The response should be as below:
Branch Name: the_checkedout_branch
First of all,
is not valid Groovy, or at least not doing what you think. Perhaps you meant
which would just be a silly way of writing
Anyway environment variables are not currently accessible directly as Groovy variables in Pipeline (there is a proposal to allow it); you need to use the
env
global variable:From within an external process, such as a
sh
step, it is an actual environment variable, soworks (note that
'
means Groovy is not interpolating the variable).Now, JENKINS-30252 was referring to multibranch projects. If you created a standalone Pipeline job, this variable will not be set.
Anyway in your case your
checkout
step is always checking out themaster
branch. If you actually have a multibranch project, then yourJenkinsfile
should be usingwhich will check out a commit on the correct branch (always matching the revision of
Jenkinsfile
itself).As to the commit hash, pending JENKINS-26100 this is not available automatically, but you can use something like
to access it.
I have two Jenkins instances.
In both instances,
GIT_COMMIT
andBRANCH_NAME
environment variables are not defined.When I try to get them from the return value of
checkout()
call, each instance behaves differently.Jenkins Instance 1
Jenkins version: 2.46.1
"Pipeline: SCM Step" plugin version: 2.5
Trying to access the environment variable as explained in the
checkout
documentation fails.scmVars
returns NULL, and accessingscmVars.GIT_BRANCH
fails with exceptionjava.lang.NullPointerException: Cannot get property 'GIT_BRANCH' on null object
.So I had to do the following in order to get the branch:
Jenkins Instance 2
Jenkins version: 2.60.2
"Pipeline: SCM Step" plugin version: 2.6
In this instance, I could do the following with success:
So please check which approach works for your Jenkins instance and use it.