构建 Docker 镜像并使用 github 标签名称对其进行标记

问题描述 投票:0回答:3

我已经创建了一个关于 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
处的正确值

docker github-actions docker-image git-tag
3个回答
9
投票

我们决定使用 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

0
投票

使用 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

0
投票

我如何完成此操作的示例:https://github.com/nsidc/noaadata-web-server-metrics/blob/main/.github/workflows/docker-image.yml

 

name: Docker Image CI

on:
  push:
    branches: [ "main" ]
    tags: ["v[0-9]+.[0-9]+.[0-9]*"]

    
    
jobs:

  build:

    runs-on: "ubuntu-latest"

    steps:
    - name: "Check out the repo"
      uses: "actions/checkout@v3"
    
    - name: "docker login"
      uses: "docker/login-action@v2"
      with:
        username: ${{secrets.DOCKER_USER}}
        password: ${{secrets.DOCKER_PASS}}
      
    - name: "Build, Tag, and push the Docker image - latest"
      if: ${{ github.ref_name == 'main' }}
      env:
        IMAGE_NAME: nsidc/noaadata-web-server-metrics
        IMAGE_TAG: latest
      run: |
        docker build -t $IMAGE_NAME:$IMAGE_TAG .
        docker push $IMAGE_NAME:$IMAGE_TAG
        
    - name: "Build, Tag, and push the Docker image"
      if: ${{ github.ref_name != 'main' }}
      env:
        IMAGE_NAME: nsidc/noaadata-web-server-metrics
        IMAGE_TAG: ${{ github.ref_name }}
      run: |
        docker build -t $IMAGE_NAME:$IMAGE_TAG .
        docker push $IMAGE_NAME:$IMAGE_TAG
© www.soinside.com 2019 - 2024. All rights reserved.