Рубрики
Uncategorized

Создание непрерывного развертывания рабочего процесса с использованием действий GitHub для развертывания вашего приложения в ECS

Хорошо написанное постоянное развертывание (CD) трубопровод гарантирует, что на каждом слиянии к филиалу выпуска … с меткой AWS, Docker, GitHub, Devops.

Хорошо написанное конвейер постоянного развертывания (CD) гарантирует, что на каждом слиянии в ветку выпуска артефакт создается и развернут в правильной среде.

При работе с контейнерными приложениями CD-трубопровод должен содержать следующие шаги

  • Code Checkout.
  • Установка зависимостей
  • Построить изображение
  • Нажмите в реестр контейнера
  • Используйте последнее изображение для следующего развертывания
  • Вызвать новое развертывание

В этом руководстве мы напишем CD-трубопровод, который выполняет все вышеперечисленные задачи, используя действия GitHub. Мы разверним наше приложение, используя AWS ECS.

AWS ECS — полностью управляемая контейнерная оркестография от AWS. Это поможет вам легко развернуть, управлять и масштабировать контейнерные приложения.

Это руководство предполагает, что у вас есть твердое понимание

Это также делает неявное предположение, что ваше приложение уже развернуто на ECS. В конце этого учебника вы сможете автоматизировать свои развертывания на слиянии на отключение отделения.

В этом руководстве я возьму тебя через

  • Запустить рабочий процесс на слиянии до отпуска.
  • Создайте и нажимайте изображение в реестр эластичного контейнера
  • Обновите определение задачи, используя вновь созданное изображение
  • Разверните ваше приложение в новую среду

Стартовый проект

Пожалуйста, клонируйте следующий репозиторий: https://github.com/wednesday-solutions/ecs-cd-starter

Настройка базы данных соединения

Обновите соответствующие данные подключения к базе данных в .env.development.

DB_URI=postgres://:@:/
POSTGRES_HOST=
POSTGRES_DB=
POSTGRES_USER=
POSTGRES_PASSWORD=

Добавить секреты

Нам нужно добавить следующие секреты

  • Aws_access_key_id access_key_id с доступом к развертыванию
  • AWS_SECRET_ACCESS_KEY Associated Secret_access_Key.
  • Область AWS_REGion, в которой развернут кластер
  • AWS_ECR_REPOSIOR Имя репозитория ECR, которое мы нажимаем изображение.

Шаг 1

Добавьте AWS_ACCESS_KEY_ID и Aws_secret_access_key Секреты * Отказ *

Шаг 2

Добавить область развертывания AWS

Шаг 3

Получите имя репозитория от консоли AWS и добавьте его в секрет.

Я опущел -Дева Так как это представляет этап. Мы будем использовать тот же рабочий процесс для развертывания в нескольких средах и, следовательно, вывод на сцену во время выполнения.

Создайте задачу-определение .json для всех сред

Шаг 1

Перейти к следующему URL: https://ap-south-1.console.aws.amazon.com/ecs/home?region=ap-south-1#/Taskdefinitions

Я использую AP-South-1 Как область AWS. Пожалуйста, измените URL в соответствии с регионом, в котором вы находитесь в

Шаг 2 Выберите определение задачи для вашей среды и проекта. В моем случае это ECS-CD-Starter-dev

Шаг 3

Выберите последнюю версию и перейдите к JSON вкладка

Шаг 4.

Скопируйте JSON. Запустите следующий фрагмент в терминале

mkdir task-definition
touch task-definition/dev.json

Вставьте JSON из консоли AWS в недавно созданный файл.

Я использую dev.json. С dev Является ли мое имя ветви по умолчанию. Я хочу, чтобы код отодвинул на эту ветку, развернутую для dev окружающая обстановка.

Вам нужно будет повторить этот шаг для QA и Производство среда.

Курок рабочий процесс для слияния на слияние в отпуск

Шаг 1 — Создать рабочий процесс

Создайте новый рабочий процесс для постоянного развертывания в .Github/Workflows папка

touch .github/workflows/cd.yml

Шаг 2 — Настройка триггеров

Определите свои филиалы выпуска. Первый филиал выпуска будет вашим ветвностью по умолчанию, которая также должна быть ветви, которую команда обычно вызывает запрос на тягу к тому, когда они хотят добавить новую функцию.

В моем случае это dev филиал. Как правило, у вас будет 2 среды.

  • QA.
  • производство

Итак, давайте вызваем этот рабочий процесс всякий раз, когда есть толкание на одной из этих ветвей.

name: ECS Starter CD Develop

on:
  push:
    branches:
      - dev
      - qa
      - master
jobs:
  docker-build-push-deploy:
    name: Docker build, push and deploy
    runs-on: ubuntu-latest
    steps:

Вставьте вышеуказанный код в недавно созданные CD.YML файл

Шаг 3 — Оформить заказ код

Этот шаг вытягивает последний код.

...
    steps:
      - name: Checkout
        uses: actions/checkout@v2

Шаг 4 — Получить филиал имя

Получите текущее имя ветви. Этот шаг приведет к текущему имени GIT ветви и хранить его. Теперь можно добраться так: $ {{spads.vars.outputs.Stage}}

...
    steps:
      ...
      - name: Get branch name
        id: vars
        run: echo ::set-output name=stage::${GITHUB_REF#refs/*/}

Шаг 5 — Настройте учетные данные AWS

Настройте учетные данные AWS и регион. Используйте значения из секретов GitHub, чтобы настроить учетные данные AWS. Чтобы лучше понять все варианты конфигурации, пожалуйста, пройдите документацию здесь: https://github.com/aws-Action/Configure-aws-credentials#usage.

...
    steps:
      ...
      - 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: ${{ secrets.AWS_REGION }}

Шаг 6 — Войдите в ECR

Используйте действие AWS-Actions/Amazon-Ecr для входа в AWS ECR.

Чтобы лучше понять все варианты конфигурации, пожалуйста, пройдите документацию здесь: https://github.com/aws-action/amazon-ecr-login#usage.

...
    steps:
      ...
      - name: Login to Amazon ECR
        id: login-ecr
        uses: aws-actions/amazon-ecr-login@v1

Шаг 7 — Построить тег и нажмите изображение в ECR

Теперь нам нужно построить изображение докера. Тег и нажмите его на AWS ECR. Используйте HASH HASHH, чтобы пометить изображение.

...
    steps:
      ...
      - name: Build, tag, and push image to Amazon ECR
        env:
          ECR_REGISTRY: ${{ steps.login-ecr.outputs.registry }}
          ECR_REPOSITORY: ${{ secrets.AWS_ECR_REPOSITORY }}-${{steps.vars.outputs.stage}}
          AWS_REGION: ${{ secrets.AWS_REGION }}
          IMAGE_TAG: ${{ github.sha }}
        run: |
          docker build -t $ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG .
          docker push $ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG3

Шаг 8 — Оказывать определение задачи

Мы создаем новую ревизию определения задач, обновляя значение изображения. Мы укажем на изображение, которое мы просто толкнули в ЭКР.

...
    steps:
      ...
      - name: Render Amazon ECS task definition
        id: ecs-cd-starter-container
        uses: aws-actions/amazon-ecs-render-task-definition@v1
        with:
          task-definition: task-definition/${{steps.vars.outputs.stage}}.json #1
          container-name: ecs-cd-starter-${{steps.vars.outputs.stage}} #2
          image: ${{ steps.login-ecr.outputs.registry }}/${{ secrets.AWS_ECR_REPOSITORY }}-${{steps.vars.outputs.stage}}:${{ github.sha }}
  1. Папка задач-определения будет содержать определения задач для всех сред. Я создаю файлы JSON с именем окружающей среды и доступа к нему, используя $ {{spads.vars.outputs.Stage}}. JSON в рабочем процессе
  2. Я называю свои контейнеры на сцене как суффикс. Я ссылаюсь на это, используя <Контейнерное имя> $ {{spads.vars.outputs.Stage}}. JSON в рабочем процессе.
  3. Мы ссылаемся на изображение, которое мы просто выдвинули в реестр ECR.

Шаг 9 — Развернуть в ECS

Мы используем последнюю версию определения задачи, которое мы только что создали, чтобы развернуть приложение в ECS. Я использую то же самое -бросковое имя Суффикс при названии моего сервиса и кластера

...
...
    steps:
      ...
      - name: Deploy to Amazon ECS service
        uses: aws-actions/amazon-ecs-deploy-task-definition@v1
        with:
          task-definition: ${{ steps.pawlyclinic-api-container.outputs.task-definition }}
          service: ecs-cd-starter-${{ steps.vars.outputs.stage }}
          cluster: ecs-cd-starter-${{ steps.vars.outputs.stage }}

Шаг 10 — Выход ECR

После того, как развертывание будет выполнено выйти из ECR

...
    steps:
      ...
      - name: Logout of Amazon ECR
        if: always()
        run: docker logout ${{ steps.login-ecr.outputs.registry }}

Куда пойти отсюда

Теперь, когда вы установили CD-трубопровод для развертывания вашего приложения в ECS, я бы порекомендовал прочитать нашу статью на «Как выполнить пакетные рабочие места в среде нескольких контейнеров»

Я надеюсь, что вам понравился этот учебник о том, как создать CD-трубопровод для развертывания приложения ECS. Если у вас есть какие-либо вопросы или комментарии, пожалуйста, присоединитесь к обсуждению форума ниже.

Оригинал: «https://dev.to/alichherawalla/creating-a-continuous-deployment-workflow-using-github-actions-to-deploy-your-application-to-ecs-4l78»