CI/CD система з AWS Codepipeline та Elastic Beanstalk для будь-якого Docker-проєкту

pic

Elastic Beanstalk — це дуже популярний інструмент для розгортання веб-додатків, його простота та можливості роблять його особливим.

У цьому посібнику ми подивимося, як ми можемо розгорнути контейнеризований проєкт в Elastic Beanstalk.

Терміни

AWS Elastic Beanstalk — це простий у використанні сервіс для розгортання та масштабування веб-додатків і служб.

AWS CodePipeline — це повністю керована служба безперервної доставки, яка допомагає автоматизувати ваші релізи.

Docker робить розробку ефективною та передбачуваною.

Починаємо

КРОК 1: Створення нового репозиторію для зберігання Docker-образу

pic

  • Перейдіть до Elastic Container Registry у консолі AWS.
  • Створіть новий репозиторій (з опціями за замовчуванням).
  • Скопіюйте URI реєстру створеного репозиторію для кроку 3.

КРОК 2: Створення проєкту для CodeBuild

pic

  • Перейдіть до консолі AWS.
  • Перейдіть до CodeBuild.
  • Запишіть ім'я роль сервісу, яку ви використовуєте на цьому кроці (воно буде використовуватися на кроці 6).
  • Створіть новий проєкт для складання (з опціями за замовчуванням).

ПРИМІТКА: У нас буде вихідний артефакт, і переконайтесь, що ви активували збереження артефакта в S3.

  • Вкажіть свій обліковий запис git (я використовував GitHub репозиторій).
  • Вкажіть, що файл для складання (build spec) надається у вихідному репозиторії.
  • Створіть проєкт для CodeBuild.

КРОК 3: Специфікації для складання

У вашому репозиторії додайте наступне в новий файл під назвою buildspec.yml (цей файл має бути в батьківській теці).

version: 0.2  
phases:  
 pre_build:  
 commands:  
 - echo Logging in to Amazon ECR...  
 - echo $CODEBUILD_SOURCE_VERSION  
 - $(aws ecr get-login --region $AWS_DEFAULT_REGION --no-include-email)  
 - REPOSITORY_URI=**_<>_**  
 - COMMIT_HASH=$(echo $CODEBUILD_RESOLVED_SOURCE_VERSION | cut -c 1-7)  
 - IMAGE_TAG=build-$(echo $CODEBUILD_BUILD_ID | awk -F":" '{print $2}')  
 build:  
 commands:  
 - echo Build started on `date`  
 - echo Building the Docker image...  
 - docker build -t $REPOSITORY_URI:latest .  
 - docker tag $REPOSITORY_URI:latest $REPOSITORY_URI:$IMAGE_TAG  
 post_build:  
 commands:  
 - echo Build completed on `date`  
 - echo Pushing the Docker images...  
 - docker push $REPOSITORY_URI:latest  
 - docker push $REPOSITORY_URI:$IMAGE_TAG  
 - echo Writing image definitions file...  
 - printf '{"AWSEBDockerrunVersion":"1","Image":{"Name":"%s","Update":"true"},"Ports":[{"ContainerPort":80,"HostPort":80}]}' $REPOSITORY_URI:$IMAGE_TAG > Dockerrun.aws.json  
 - cat Dockerrun.aws.json  
artifacts:  
 files: Dockerrun.aws.json

Що робить ця специфікація: для кожного виконання складання коду вона будує Docker-контейнер за допомогою Dockerfile в батьківській теці і пушить збудований образ в Elastic Container Registry з тегом latest.
Нарешті, скрипт автоматично запише вихідні дані у файл під назвою Dockerrun.aws.json, який буде використовуватися Elastic Beanstalk для запуску програмного забезпечення.

КРОК 4: Створення середовища Elastic Beanstalk

pic

  • Перейдіть до Elastic Beanstalk (в консолі AWS).
  • Створіть новий додаток та середовище.
    ПРИМІТКА: Ви можете створити кілька середовищ в одному додатку та мати різні проєкти для конвеєра, щоб розгортати в кожному середовищі.
  • Виберіть Docker як платформу та залиште все інше за замовчуванням.

КРОК 5: Створення конвеєра

pic

  • Перейдіть до AWS Codepipeline (в консолі AWS).
  • Створіть новий конвеєр.
  • На етапі складання виберіть проєкт для складання, який ви створили на кроці 2.
  • На етапі розгортання виберіть Elastic Beanstalk і виберіть додаток та середовище, які ви створили на КРОЦІ 3.

КРОК 6: Налаштування дозволів

  • Перейдіть до IAM і виберіть Roles (Ролі) (в лівій панелі).
  • Виберіть роль, яку ви створили на кроці 2.
  • Виберіть прикріпити політику та AmazonEC2ContainerRegistryFullAccess.

Час для тестування:

  • Перейдіть до AWS Codepipeline і натисніть "release changes".
  • Ви побачите, що всі три етапи будуть виконані.

pic

Бум 🎉, ваш Docker-контейнер тепер розгорнуто і доступний для решти світу!

Перекладено з: CI/CD system with AWS Codepipeline and Elastic Beanstalk for any docker project

Leave a Reply

Your email address will not be published. Required fields are marked *