Скрипт GitHub CI для сборки и передачи в разные ECR на основе разной передачи веток
У меня есть проект на GitHub, я хочу настроить задание CI для создания образов докеров и отправки на AWS ECR. Мои требования -
- Один единственный файл ci (я создал
.github/workflows/aws.yml
) - Задание CI должно запускаться только при отправке в основную ветку и ветвь песочницы
- При отправке в ветвь песочницы образы докеров должны быть отправлены ECR1
- Если нажать на главную ветку, то изображение докера должно быть отправлено в 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
.