0

我正在使用来自我的源和 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 按原样使用缓存。

4

1 回答 1

0

有几种方法可以做到这一点。其中之一 - 添加最后一个 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

在这种情况下,docker 将使用缓存。

于 2019-01-15T12:08:15.060 回答