Скрипт GitHub CI для сборки и передачи в разные ECR на основе разной передачи веток

У меня есть проект на GitHub, я хочу настроить задание CI для создания образов докеров и отправки на AWS ECR. Мои требования -

  1. Один единственный файл ci (я создал.github/workflows/aws.yml)
  2. Задание CI должно запускаться только при отправке в основную ветку и ветвь песочницы
  3. При отправке в ветвь песочницы образы докеров должны быть отправлены ECR1
  4. Если нажать на главную ветку, то изображение докера должно быть отправлено в ECR2

Пока что я сделал следующий файл CI

.github/ рабочие процессы /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(срабатывает при нажатии ветки песочницы)?

1 ответ

Решение

Добавить 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:

В качестве альтернативы, поскольку задания очень похожи, вы можете попытаться объединить их и установить переменную env $AWS_REPOSITORY либо ${{ secrets.AWS_REPOSITORY_URL_MASTER }} или ${{ secrets.AWS_REPOSITORY_URL_SANDBOX }}, в зависимости от значения github.ref.

Другие вопросы по тегам