我正在使用来自我的源和 git 数据的一些信息在构建之前计算我的 DLL 版本。我还想将该版本公开为图像的标签。
为此,我使用 powershell 将最终版本读取到文件中:
RUN $version = [System.Diagnostics.FileVersionInfo]::GetVersionInfo('C:\WebAPI\bin\WebAPI.dll').FileVersion; \
Set-Content -Path 'C:\VERSION' -Value $version
然后,在构建之后,我读取了该文件并使用 --label 参数重新构建:
# 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 按原样使用缓存。