标记现有图像

时间:2019-01-15 11:32:57

标签: windows docker caching build labeling

在构建之前,我正在使用源和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按原样使用缓存。

1 个答案:

答案 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将使用缓存。