构建 Docker Image 并使用 github 标记名称对其进行标记

Posted

技术标签:

【中文标题】构建 Docker Image 并使用 github 标记名称对其进行标记【英文标题】:Build Docker Image and tag it with github tag name 【发布时间】:2020-08-07 10:37:51 【问题描述】:

我已经创建了一个关于 repo 标签创建的 GitHub 操作。我能够成功地构建 Docker 映像并将其推送到 AWS,但是,我不知道如何使用 GitHub 标记的相同名称来标记映像。下面是我的 git 工作流文件

name: Build Docker Image and Push to AWS ECR
on:
  push:
    tags:
    - '*'


jobs:

  build:

     runs-on: ubuntu-latest

     steps:
         - name: Checkout
           uses: actions/checkout@v1

         - name: Configure AWS credentials
           uses: aws-actions/configure-aws-credentials@v1
           with:
               aws-access-key-id: $ secrets.AWS_ACCESS_KEY_ID 
               aws-secret-access-key: $ secrets.AWS_SECRET_ACCESS_KEY 
               aws-region: us-west-2

         - name: Login to Amazon ECR
           id: login-ecr
           uses: aws-actions/amazon-ecr-login@v1

         - name: Build, tag, and push image to Amazon ECR
           id: build-image
           env:
               ECR_REGISTRY: $ secrets.AWS_REGISTRY 
               ECR_REPOSITORY: repo_name
               IMAGE_TAG: latest
           run: |
               docker build -t $ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG .
               docker push $ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG

请帮我替换上面代码中IMAGE_TAG的正确值

【问题讨论】:

【参考方案1】:

我们决定使用 git commit sha 作为图像标签,因为它始终代表代码的唯一状态。

- name: Build, tag, and push image to Amazon ECR
  env:
    ECR_REGISTRY: $ steps.login-ecr.outputs.registry 
    ECR_REPOSITORY: reponame
    IMAGE_TAG: $ github.sha 
  run: |
    docker build -t $ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG .
    docker push $ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG

如果您需要或更喜欢使用提交标签,您只需使用以下方式从 ref 中提取它:

- name: Extract Git Tag
  run: echo "GIT_TAG=$GITHUB_REF/refs\/tags\//" >> $GITHUB_ENV
- name: Build, tag, and push image to Amazon ECR
  env:
    ECR_REGISTRY: $ steps.login-ecr.outputs.registry 
    ECR_REPOSITORY: reponame
    IMAGE_TAG: $ env.GIT_TAG 
  run: |
    docker build -t $ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG .
    docker push $ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG

【讨论】:

谢谢@DannyB 的回答。我尝试实施您的解决方案我收到以下错误:IMAGE_TAG: $GITHUB_REF/refs\/tags\// invalid argument "***/wholesale:$GITHUB_REF/refs\\/tags\\//"对于“-t,--tag”标志:无效的参考格式 不确定你做错了什么。它可以工作,可以在这里看到:github.com/DannyBen/actions-debug/blob/master/.github/workflows/… 我尝试将其直接分配给 IMAGE_TAG 值。然后我改变了,它奏效了。谢谢:) echo ::set-env 已被 GitHub 禁用,运行时出现此错误。Please upgrade to using Environment Files or opt into unsecure command execution by setting the ``ACTIONS_ALLOW_UNSECURE_COMMANDS`` environment variable to ``true``. For more information see: https://github.blog/changelog/2020-10-01-github-actions-deprecating-set-env-and-add-path-commands/ 谢谢@ashvyas - 我已经更新了答案以反映实现相同目标的新方法。【参考方案2】:

使用 GITHUB_REF_NAME 变量获取最新标签:

name: Bolivia Version - Develop

on:
  push:
    tags: # <---- only tags, important!!!
    - '*'

jobs:
  build-version:

    runs-on: ubuntu-latest

    steps:
    - name: Git checkout
      uses: actions/checkout@v2

    - name: Extract latest tag
      run: |
        GIT_TAG=$GITHUB_REF_NAME

【讨论】:

以上是关于构建 Docker Image 并使用 github 标记名称对其进行标记的主要内容,如果未能解决你的问题,请参考以下文章

Jenkins-05-Pipeline使用 Docker构建项目并构建进行推送到私有仓库 harbor

使用scratch构建最小化Go程序的docker image

使用nodejs构建Docker image最佳实践

docker之:使用Dockerfile来构建image

Build-Docker-Image-from-Zero: 从零构建Docker镜像

Build-Docker-Image-from-Zero: 从零构建Docker镜像