Add git commit to docker image tag in Azure pipeline
Problem
I have Azure devops pipeline to build docker image from source. I want the docker image have the source code revision info like git commit hash.
I tried to use Build.SourceVersion
as a docker image tag,
The latest version control change that is included in this build.
- Git: The commit ID.
- TFVC: the changeset.
This variable is agent-scoped, and can be used as an environment variable in a script and as a parameter in a build task, but not as part of the build number or as a version control tag.
I set my docker image tag in Docker task as:
$(Build.SourceBranch)-$(Build.BuildId)-$(Build.SourceVersion)
Then I trigger a build, I hope it can generate tag like this:
master-8219-59af41e
However it generate tag like this (missing commit):
master-8219-
When I trigger a build, I notice there is a Commit field.
I didn’t input anything and it should be the latest commit.
However it seems Azure pipeline didn’t pass the latest commit
to Build.SourceVersion
.
Solution
To solve this issue. I use Azure pipeline environment var to pass the commit hash to docker image tag. The trick is create a Bash Script task to set environment var.
The Bash Script content as following:
GIT_COMMIT=$(git rev-parse --short HEAD)
echo "GIT_COMMIT: ${GIT_COMMIT}"
#
# set env variable to allow next task to consume
#
echo "##vso[task.setvariable variable=GIT_COMMIT]${GIT_COMMIT}"
Now in next Azure pipeline task Push Docker Image,
it use access var GIT_COMMIT
through $(GIT_COMMIT).
Now trigger manual build you will get docker image tag with git commit. e.g.
master-8219-59af41e
Reference
- Pass variable in Azure devops pipelines
- Azure pipelines: Define variables
- Azure pipelines: Use predefined variables
Feedback
Was this page helpful?
Glad to hear it!
Sorry to hear that.