如何用GitHub Action向多个ECR仓库分别推送前端/后端/Nginx镜像?
实现多镜像分推至不同AWS ECR仓库
完全可以实现这个需求。你提到的AWS ECR Action支持多次调用,只要每次调用时指定不同的镜像构建上下文、ECR仓库名称等参数,就能分别处理frontend、backend和nginx三类镜像。
以下是完整的GitHub Actions工作流示例,你可以直接参考修改:
name: Build and Push Multi-Images to ECR on: push: branches: [ main ] # 触发分支可按需修改 jobs: build-and-push: runs-on: ubuntu-latest permissions: id-token: write contents: read steps: - name: Checkout code uses: actions/checkout@v4 # 配置AWS凭证,仅需执行一次 - name: Configure AWS credentials uses: aws-actions/configure-aws-credentials@v4 with: aws-region: us-east-1 # 替换为你的ECR所在区域 role-to-assume: arn:aws:iam::YOUR_ACCOUNT_ID:role/YOUR_GITHUB_ACTIONS_ROLE # 替换为你的IAM角色ARN # 构建并推送frontend镜像到对应ECR仓库 - name: Login to ECR for frontend uses: aws-actions/amazon-ecr-login@v2 id: login-ecr-frontend - name: Build & push frontend image run: | docker build -t frontend:latest ./frontend # 替换为你的frontend Dockerfile所在目录 docker tag frontend:latest ${{ steps.login-ecr-frontend.outputs.registry }}/your-frontend-ecr-repo:latest # 替换为你的frontend ECR仓库名 docker push ${{ steps.login-ecr-frontend.outputs.registry }}/your-frontend-ecr-repo:latest # 构建并推送backend镜像到对应ECR仓库 - name: Login to ECR for backend uses: aws-actions/amazon-ecr-login@v2 id: login-ecr-backend - name: Build & push backend image run: | docker build -t backend:latest ./backend # 替换为你的backend Dockerfile所在目录 docker tag backend:latest ${{ steps.login-ecr-backend.outputs.registry }}/your-backend-ecr-repo:latest # 替换为你的backend ECR仓库名 docker push ${{ steps.login-ecr-backend.outputs.registry }}/your-backend-ecr-repo:latest # 构建并推送nginx镜像到对应ECR仓库 - name: Login to ECR for nginx uses: aws-actions/amazon-ecr-login@v2 id: login-ecr-nginx - name: Build & push nginx image run: | docker build -t nginx:latest ./nginx # 替换为你的nginx Dockerfile所在目录 docker tag nginx:latest ${{ steps.login-ecr-nginx.outputs.registry }}/your-nginx-ecr-repo:latest # 替换为你的nginx ECR仓库名 docker push ${{ steps.login-ecr-nginx.outputs.registry }}/your-nginx-ecr-repo:latest
关键说明:
- 只需一次AWS凭证配置,后续所有镜像推送都可复用该凭证权限
- 每个镜像的处理流程独立:登录对应ECR→构建镜像→打标签→推送
- 需提前在AWS ECR中创建好三个对应的仓库(frontend、backend、nginx)
- 替换示例中的区域、IAM角色ARN、ECR仓库名、Dockerfile目录等参数为你的实际信息
如果你想减少重复代码,也可以用矩阵(matrix)优化:
name: Build and Push Multi-Images to ECR on: push: branches: [ main ] jobs: build-and-push: runs-on: ubuntu-latest permissions: id-token: write contents: read strategy: matrix: image: - name: frontend context: ./frontend repo: your-frontend-ecr-repo - name: backend context: ./backend repo: your-backend-ecr-repo - name: nginx context: ./nginx repo: your-nginx-ecr-repo steps: - name: Checkout code uses: actions/checkout@v4 - name: Configure AWS credentials uses: aws-actions/configure-aws-credentials@v4 with: aws-region: us-east-1 role-to-assume: arn:aws:iam::YOUR_ACCOUNT_ID:role/YOUR_GITHUB_ACTIONS_ROLE - name: Login to Amazon ECR id: login-ecr uses: aws-actions/amazon-ecr-login@v2 - name: Build, tag, and push image env: ECR_REGISTRY: ${{ steps.login-ecr.outputs.registry }} IMAGE_CONTEXT: ${{ matrix.image.context }} ECR_REPOSITORY: ${{ matrix.image.repo }} IMAGE_TAG: latest run: | docker build -t temp-image:$IMAGE_TAG $IMAGE_CONTEXT docker tag temp-image:$IMAGE_TAG $ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG docker push $ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG
使用矩阵的好处是后续新增镜像只需在matrix列表中添加条目即可,维护更高效。
内容的提问来源于stack exchange,提问作者alenkogen
相关产品推荐
相关产品推荐

