Пометить существующее изображение
Я рассчитываю свою версию DLL перед сборкой, используя некоторую информацию из моего источника и данных git. Я хочу также представить эту версию в качестве метки изображения.
Для этого я использую PowerShell, чтобы прочитать окончательную версию в файл:
RUN $version = [System.Diagnostics.FileVersionInfo]::GetVersionInfo('C:\WebAPI\bin\WebAPI.dll').FileVersion; \
Set-Content -Path 'C:\VERSION' -Value $version
Затем, после сборки, я читаю этот файл и перестраиваю с помощью --label argumet:
# Read version from image
$id = $(docker create my_image)
docker cp "${id}:C:\VERSION" version.txt
docker rm -v $id
$version = Get-Content -Path version.txt
# Rebuid with version label
docker build -t my_image --cache-from my_image --label version=$version .
Это работает, но ужасно, и msbuild никогда не кэшируется и занимает слишком много времени, чтобы перестроить все это только для этого ярлыка.
Я ищу другие идеи, как пометить версию, рассчитанную внутри сборки, или идею, как заставить Docker использовать кеш как есть.
1 ответ
Есть несколько способов, как это сделать. Один из них - добавить в качестве тега строку хэша последнего коммита git.
Получить хэш последнего коммита:
git rev-parse HEAD
Оставьте только 12 символов:
git rev-parse HEAD | cut -c 1-12
Построить это:
docker build <path> -t my_image:$(git rev-parse HEAD | cut -c 1-12)
После этого вы получите что-то вроде этого:
Successfully built 69a5823a74e6
Successfully tagged my_image:196957476da0
В этом случае докер будет использовать кеш.