For what feels like the last 3-6 months, I’ve been trying to figure out how to know what the commit is for the Docker runtime in Peril. Roughly: every master commit on Peril triggers a Docker image on Docker Hub for the environment in which JavaScript is running. There’s a lag between creating the commit, having the image ready on Docker Hub, and Peril using the new image. There’s also space for these automated systems to go wrong, so I’d like to be able to be certain in logging.
I’ve thrown a lot of commits and time every few weeks at this, so now that I’ve figured it out, I’ll give you an idea of what I needed to do to make it work in a micro-post.
Step 1: You need a custom build step, to do this, you need to create a file hooks/build
in your repo:
#!/usr/bin/env sh
# This is so we can get the commit into the build log of a Dangerfile runner
# These come from https://docs.docker.com/docker-cloud/builds/advanced/
# For debugging all env vars
# printenv
# Convert the location "/Dockerfile" to "Dockerfile"
FILE=$(echo -n $BUILD_PATH | tail -c +2)
if [ -z "${DOCKER_TAG}" ]; then
docker build --build-arg=COMMIT=$(git rev-parse --short HEAD) --build-arg=BRANCH=$SOURCE_BRANCH -t $IMAGE_NAME -f $FILE .
else
docker build --build-arg=COMMIT=$(git rev-parse --short HEAD) --build-arg=BRANCH=$DOCKER_TAG -t $IMAGE_NAME -f $FILE .
fi
There’s a list of examples in this repo - though the build
one is too simple for our needs here. If you need something that’s not there, then remove the comment marker before
printenv
to the script to see
what env vars are available
(here’s an example build).
Step 2: Edit your Dockerfile
to take the additional arguments COMMIT
and BRANCH
from ARG
.
MAINTAINER Orta Therox
+ ARG BRANCH="master"
+ ARG COMMIT=""
+ LABEL branch=${BRANCH}
+ LABEL commit=${COMMIT}
ADD . /app
WORKDIR /app
+ # Now set it as an env var
+ ENV COMMIT_SHA=${COMMIT}
+ ENV COMMIT_BRANCH=${BRANCH}
Err, that should be everything. I mean, I did call it a micro-post. Trying to implement this has broken the Peril runner a bunch of times on staging, so I’m mainly just helping out other docker newbies.
Some links that helped me get there:
- Add git commit hash to ENV
- Feature request: Build args on docker hub
- Inject Git source commit metadata into the image
- Configure automated builds from GitHub
Remember folks, Ash says you should write as you learn, so write up those small wins.