代码之家  ›  专栏  ›  技术社区  ›  Johnathan Kanarek

标记现有图像

  •  0
  • Johnathan Kanarek  · 技术社区  · 7 年前

    我正在计算我的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 回复  |  直到 7 年前
        1
  •  0
  •   funnydman    7 年前

    有几种方法可以做到。其中之一-添加最后一个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将使用缓存。

    推荐文章