在构建之前,我正在使用源和git数据中的一些信息来计算DLL版本。 我还想将该版本作为图像标签公开。
为此,我使用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按原样使用缓存。
答案 0 :(得分:0)
有几种方法可以做到这一点。其中之一-添加最后一个git commit的哈希字符串作为标记。
获取上一次提交的哈希值:
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
在这种情况下,docker将使用缓存。