【问题标题】:Adding a Git tag and version info to Docker image during Github Actions build在 Github Actions 构建期间将 Git 标记和版本信息添加到 Docker 映像
【发布时间】:2022-12-06 18:00:41
【问题描述】:

我正在使用 Github Actions 进行持续交付并为我的应用程序构建 Docker 映像。

如何在我的 Docker 镜像中添加版本信息

  • 发布标签
  • 提交散列
  • 提交消息

【问题讨论】:

    标签: docker github-actions


    【解决方案1】:

    您可以通过几个步骤的组合来做到这一点

    • 从Github标签读取发布版本
    • 使用构建参数将此信息和其他信息传递给 Docker
    • 将构建参数写入 Dockerfile 中的文件

    动作 YAML

          # https://*.com/a/58178121/315168
          - name: Scrape build info
            run: echo "RELEASE_VERSION=${GITHUB_REF#refs/*/}" >> $GITHUB_ENV
          - name: Build and push
            uses: docker/build-push-action@v3
            with:
              context: .
              push: true
              tags: ${{ steps.meta.outputs.tags }}
              labels: ${{ steps.meta.outputs.labels }}
              # https://*.com/questions/67051284/how-to-set-a-dockerfile-arg-in-github-actions
              # https://*.com/a/63619526/315168
              build-args: |
                GIT_VERSION_TAG=${{ env.RELEASE_VERSION }}
                GIT_COMMIT_MESSAGE=${{ github.event.head_commit.message }}
                GIT_VERSION_HASH=${{ github.sha }}
    

    然后在Dockerfile

    # Passed from Github Actions
    ARG GIT_VERSION_TAG=unspecified
    ARG GIT_COMMIT_MESSAGE=unspecified
    ARG GIT_VERSION_HASH=unspecified
    
    WORKDIR /usr/src/myapp
    
    # You can read these files for the information in your application
    RUN echo $GIT_VERSION_TAG > GIT_VERSION_TAG.txt
    RUN echo $GIT_COMMIT_MESSAGE > GIT_COMMIT_MESSAGE.txt
    RUN echo $GIT_VERSION_HASH > GIT_VERSION_HASH.txt
    

    【讨论】:

      【解决方案2】:

      要在 Github Actions 构建期间将 Git 标签和版本信息添加到 Docker 映像,您可以在构建脚本中使用 git 命令获取当前 Git 标签和提交哈希,然后使用 DOCKER_BUILDKIT 功能将此信息作为Docker 镜像中的标签。

      这是如何完成此操作的示例:

      获取当前的 Git 标签和提交哈希

      GIT_TAG=$(git describe --tags --always)
      GIT_HASH=$(git rev-parse HEAD)
      

      构建 Docker 镜像,包括 Git 标签和提交哈希作为标签

      DOCKER_BUILDKIT=1 docker build 
        --label "com.example.git-tag=$GIT_TAG" 
        --label "com.example.git-hash=$GIT_HASH" 
        -t my-image:latest .
      

      git describe 命令将输出当前提交可访问的最新 Git 标记,后跟自该标记以来的提交数和缩写的提交哈希。然后可以使用 --label 标志将此信息作为标签包含在 Docker 映像中。

      您还可以使用 DOCKER_BUILDKIT 功能来启用 buildkit,它为构建 Docker 映像提供改进的性能和附加功能。

      Docker镜像构建完成后,可以使用docker inspect命令查看镜像中添加的标签,验证是否包含Git tag和commit hash。

      $ docker inspect my-image:latest
      
      [
        ...
        "Labels": {
          "com.example.git-tag": "v1.0.0",
          "com.example.git-hash": "7b5ebc3c3dd3e2f3f6f3d3c3e3f3d3c3e3f3d3c3"
        }
      ]
      

      这只是您如何在 Github Actions 构建期间将 Git 标记和版本信息添加到 Docker 映像的一个示例。还有许多其他方法可以实现这一点,具体步骤将取决于您的具体用例以及您使用的工具和技术。

      【讨论】: