Возможно, есть несколько вариантов, но это зависит от того, как строится изображение.
Предполагается, что исходный код клонирован в CI, а из этого источника построено изображение (так что вы не клонируете исходный код в Dockerfile), вы можете использовать build-arg для «выпекания», которые фиксируются в образе в качестве переменной среды;
В вашем Dockerfile определите build-arg (ARG
) и присвойте его значение переменной среды (ENV
). Необходимо присвоить его ENV
, потому что аргументы сборки (по проекту) не сохраняются в самом образе (доступно только во время сборки).
Например:
FROM busybox:latest
ARG GIT_COMMIT=HEAD
ENV GIT_COMMIT=${GIT_COMMIT}
Я устанавливаю значение по умолчанию, чтобы переменная содержала нечто «полезное», если Dockerfile собран без передачи build-arg
Затем при построении изображения передайте коммит git как build arg
git clone https://github.com/me/my-repo.git && cd my-repo
export GIT_COMMIT=$(git rev-parse --short --verify HEAD)
docker build -t lab:${GIT_COMMIT} --build-arg GIT_COMMIT=${GIT_COMMIT} .
При запуске образа в качестве переменной среды доступен GIT_COMMIT
.
Если вы хотите передать ссылку в runtime (при запуске изображение) вместо этого вы можете передать ссылку при запуске изображения; например, чтобы передать дайджест образа, который вы запускаете;
docker pull lab:latest
export IMAGE_DIGEST=$(docker inspect --format '{{ (index .RepoDigests 0) }}' lab:latest)
docker run -it --rm -e IMAGE_DIGEST=${IMAGE_DIGEST} lab:latest