Reputation: 9189
How can I get Jenkins to extract a value from the console output that is generated by a command in a Jenkinsfile?
Specifically, how can I get Jenkins to extract the commit hash from the results of the checkout scm
command in the following very simple Jenkinsfile?
Jenkinsfile
node {
// Clean workspace before doing anything
deleteDir()
try {
stage ('Clone') {
checkout scm
}
} catch (err) {
currentBuild.result = 'FAILED'
throw err
}
}
Output of checkout scm
command:
The Jenkins log prints the following as a result of running the checkout scm
command in the above simplified Jenkinsfile:
Cloning the remote Git repository
Cloning with configured refspecs honoured and without tags
Cloning repository http://<bitbucket-ip-on-lan>:7990/scm/JSP/jenkinsfile-simple-repo.git
> git init /var/jenkins_home/workspace/le-repo_sample-issue-branch-2WOFDGRDQWR367VAM7O26H2DKPTRVPDKRTGNRIS4AQNNFP7QIX2Q # timeout=10
Fetching upstream changes from http://<bitbucket-ip-on-lan>:7990/scm/JSP/jenkinsfile-simple-repo.git
> git --version # timeout=10
using GIT_ASKPASS to set credentials
> git fetch --no-tags --progress http://<bitbucket-ip-on-lan>:7990/scm/JSP/jenkinsfile-simple-repo.git +refs/heads/sample-issue-branch:refs/remotes/origin/sample-issue-branch
> git config remote.origin.url http://<bitbucket-ip-on-lan>:7990/scm/JSP/jenkinsfile-simple-repo.git # timeout=10
> git config --add remote.origin.fetch +refs/heads/sample-issue-branch:refs/remotes/origin/sample-issue-branch # timeout=10
> git config remote.origin.url http://<bitbucket-ip-on-lan>:7990/scm/JSP/jenkinsfile-simple-repo.git # timeout=10
Fetching without tags
Fetching upstream changes from http://<bitbucket-ip-on-lan>:7990/scm/JSP/jenkinsfile-simple-repo.git
using GIT_ASKPASS to set credentials
> git fetch --no-tags --progress http://<bitbucket-ip-on-lan>:7990/scm/JSP/jenkinsfile-simple-repo.git +refs/heads/sample-issue-branch:refs/remotes/origin/sample-issue-branch
Checking out Revision 77cf12f42136efc77fecbcd1f761a54254278cb3 (sample-issue-branch)
> git config core.sparsecheckout # timeout=10
> git checkout -f 77cf12f42136efc77fecbcd1f761a54254278cb3
Commit message: "add whitespace"
> git rev-list --no-walk e975fb4391677bc09f2056b3e8a6be62eda0b222 # timeout=10
[Bitbucket] Notifying commit build result
Restated Question:
Specifically, what do we add to the Jenkinsfile in order for the log to additionally print out the following at the end:
Commit hash is: 77cf12f42136efc77fecbcd1f761a54254278cb3
This is obviously over simplified. The printed output in real life will go into a variable and be passed as an argument into a script. But for this question, what specific syntax will enable Jenkins to extract the commit hash?
Upvotes: 0
Views: 1766
Reputation: 4956
If you need commit hash in particular, the checkout step's documentation mentions an easy way to get it (rather than parse console output etc):
This step returns a Map of any variables the SCM plugin would set in a Freestyle job, so if your SCM is git, you can do:
def scmVars = checkout scm def commitHash = scmVars.GIT_COMMIT // or def commitHash = checkout(scm).GIT_COMMIT
Once you have it in a variable it's just a matter of echoing it to see it in the log.
echo "Commit hash is: ${commitHash}"
Upvotes: 2