GitHub CI脚本,用于基于不同的分支推送构建并推送到不同的ECR

我在GitHub上有一个项目,我想设置CI作业来构建docker映像并推送到AWS ECR。我的要求是-

  1. 一个ci文件(我已创建.github/workflows/aws.yml
  2. CI作业必须仅在推送到master和sandbox分支上触发
  3. 如果推送到沙盒分支,则应将Docker映像推送到ECR1
  4. 如果将其推送到master分支,则应将docker image推送到ECR2

到目前为止,我已经制作了以下CI文件

.github / workflows / aws.yml -

  name: CI

  on:
    pull_request:
      branches:
      - master
      - sandbox
    push:
      branches:
      - master
      - sandbox

  env:
    AWS_REPOSITORY_URL_MASTER: ${{ secrets.AWS_REPOSITORY_URL_MASTER }}
    AWS_REPOSITORY_URL_SANDBOX: ${{ secrets.AWS_REPOSITORY_URL_SANDBOX }}
    AWS_accESS_KEY_ID: ${{ secrets.AWS_accESS_KEY_ID }}
    AWS_SECRET_accESS_KEY: ${{ secrets.AWS_SECRET_accESS_KEY }}

  jobs:
    build-and-push:
      name: Build and push image to AWS ECR master
      runs-on: ubuntu-latest
      steps:

      - name: Checkout
        uses: actions/checkout@v2

      - name: Setup ECR
        run: $( aws ecr get-login --no-include-email --region ap-south-1)

      - name: Build and tag the image
        run: docker build -t $AWS_REPOSITORY_URL_MASTER .

      - name: Push
        run: docker push $AWS_REPOSITORY_URL_MASTER
    build-and-push-sandbox:
      name: Build and push image to AWS ECR master
      runs-on: ubuntu-latest
      steps:

      - name: Checkout
        uses: actions/checkout@v2

      - name: Setup ECR
        run: $( aws ecr get-login --no-include-email --region ap-south-1)

      - name: Build and tag the image
        run: docker build -t $AWS_REPOSITORY_URL_SANDBOX .

      - name: Push
        run: docker push $AWS_REPOSITORY_URL_SANDBOX

该脚本将如何区分何时运行build-and-push-master(在主分支推送时触发)和build-and-push-sandbox(在沙箱分支推送时触发)?

iCMS 回答:GitHub CI脚本,用于基于不同的分支推送构建并推送到不同的ECR

if级别添加job子句:

jobs:
    build-and-push:
      name: Build and push image to AWS ECR master
      runs-on: ubuntu-latest
      if: github.ref == 'refs/heads/master'
      steps:

    build-and-push-sandbox:
      name: Build and push image to AWS ECR sandbox
      runs-on: ubuntu-latest
      if: github.ref == 'refs/heads/sandbox'
      steps:

或者,由于作业是如此相似,因此您可以尝试将它们统一并根据{{1的值}将环境变量$AWS_REPOSITORY设置为${{ secrets.AWS_REPOSITORY_URL_MASTER }}${{ secrets.AWS_REPOSITORY_URL_SANDBOX }} }}。

本文链接:https://www.f2er.com/1984922.html

大家都在问