I am building docker image for a service at hub.docker.com. During compilation, the commit hash of the source is passed as an argument to CMake (so that it can be embedded in the version information). According to Advanced options for Autobuild and Autotest, the commit hash is automatically available as
SOURCE_COMMIT environment variable.
In order to call cmake with that information, it is going as follows — I am not sure this labyrinth is the most straightforward way:
This takes care of actually passing the variable to docker build (taken from this example):
#!/bin/bash docker build --build-arg SOURCE_COMMIT=$SOURCE_COMMIT -f $DOCKERFILE_PATH -t $IMAGE_NAME .
The value is grabbed using those two lines:
ARG SOURCE_COMMIT # get it from the --build-arg ENV SOURCE_COMMIT $SOURCE_COMMIT # set shell variable (of the same name)
and finally is passed to cmake in
RUN cmake -DGIT_REVISION_HASH=$SOURCE_COMMIT # and so on ...
In summary, an environment variable of the builder shell is passed as build argument, then obtained and assigned to inner shell environment variable which is then expanded and passed as cmake argument.
Did I miss something or does it have to be this complex?