构建 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