Автоматическое развертывание приложения Angular 4 с помощью Bitbucket Pipeline и AWS CodeDeploy

У меня есть приложение Angular 4 с MongoDB и NodeJS. Я искал возможность автоматического развертывания моего приложения на экземпляре amazon AWS EC2.

Я использую для своего проекта репозиторий BitBucket. Прочитав статьи, я наткнулся на Bitbucket Pipeline и AWS CodeDeploy. Для этого необходимо выполнить множество сценариев и конфигураций. Я действительно сбит с толку после того, как весь день прочитал всю документацию.

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

Может ли кто-нибудь предоставить пошаговые инструкции по автоматическому развертыванию приложения Angular 4 (MEAN) с использованием Bitbucket Pipeline и AWS CodeDeploy?

Пожалуйста, дайте мне знать, если вам нужна дополнительная информация. Спасибо.


person BeeBee8    schedule 25.10.2017    source источник


Ответы (3)


Как выполнить автоматическое развертывание с помощью Bitbucket Pipelines и AWS CodeDeploy?

Пошаговое руководство по автоматическому развертыванию приложения:

Предварительные требования: - репозиторий BitBucket - учетная запись AWS - Putty

ШАГ 1. Создайте нового пользователя IAM

Войдите в свою учетную запись AWS. Посетите https://console.aws.amazon.com/iam/.

Пользователи> Добавить пользователя> введите имя пользователя> установите оба флажка Тип доступа> выберите переключатель «Пользовательский пароль»> снимите флажок «Требовать сброса пароля»> нажмите Далее: Разрешения> Прикрепить существующие политики напрямую> найдите «s3» и выберите AmazonS3FullAccess


введите описание изображения здесь

Attach Existing Policies- search for “codedeploy” and select AmazonEC2RoleforAWSCodeDeploy, AWSCodeDeployDeployerAccess, AWSCodeDeployFullAccess, AWSCodeDeployRole


введите описание изображения здесь

Next: Review > Create user-IMPORTANT NOTE: 1. Download CSV 2. Note Down Access Key ID 3. Note Down Secret access key


введите описание изображения здесь

ШАГ 2. Создайте роль для приложения CodeDeploy

Its is service role for Code Deploy. This service role you assign to the code deploy application that you will create in the later steps.

Войдите в свою учетную запись AWS. Посетите https://console.aws.amazon.com/iam/.

Роли> Создать роль> щелкните Сервис AWS>


введите описание изображения здесь

Below Select CodeDeploy >


введите описание изображения здесь

Next: permissions > Next Review > enter Role name (e.g CodeDeployServiceRole) > enter description (not compulsory) > Create role.

ШАГ 3. Создайте роль для экземпляра EC2

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

Войдите в свою учетную запись AWS. Посетите https://console.aws.amazon.com/iam/.

Шаг A. Создайте политику для этой роли. Политики> Создать политику> Выберите «Создать собственную политику»> Имя политики: «CodeDeploy-EC2-Permissions»> Описание: «политика для роли, назначенной экземпляру EC2. »> Документ политики: вставьте следующее в поле ввода.

{«Версия»: «2012–10–17», «Заявление»: [{«Действие»: [«s3: Get *», «s3: List *»], «Эффект»: «Разрешить», «Ресурс» : «*»}]}


введите описание изображения здесь

Validate Policy > Create Policy.

Шаг 2. Создание роли. Роли> Создать роль> Сервис AWS> EC2> Выберите вариант использования> Нажмите EC2> Далее: Разрешения> найдите «ec2» и выберите «CodeDeploy-EC2-Permissions», который вы создали на шаге A>


введите описание изображения здесь

Next: Review > Name: “CodeDeploy-EC2-Instance-Profile” > Role Description: “CodeDeploy-EC2-Instance-Profile” > Create Role

ШАГ 4. Создайте экземпляр EC2.

Войдите в свою учетную запись AWS. Сервисы> EC2> Запуск экземпляра> Amazon Linux AMI (или выберите в соответствии с вашими потребностями)> Выберите тип экземпляра> Далее: Настройка сведений об экземпляре> Роль IAM> в раскрывающемся списке выберите роль, созданную на шаге 3, шаг B (CodeDeploy- EC2-Instance-Profile)>


введите описание изображения здесь

Next: Add Storage > Next: Add Tags > Add Tag > (Important step!! note down name & key you assign) Input Key: Name, Value: staging-auto-deploy (or anything you prefer) >


введите описание изображения здесь

Next: Configure Security Group > select existing security group or create new > Review and Launch > Launch > Select existing key pair or create new > Launch Instances > View Instances > Note down IPv4 Public IP

ШАГ 5. Установите агент CodeDeploy на экземпляр EC2.

Откройте Putty на вашем локальном компьютере> введите общедоступный IP-адрес, который вы получили на шаге 4> порт 22> в подключении> SSH> Auth> файл закрытого ключа для аутентификации> просмотрите> свяжите файл пары ключей для вашего экземпляра на шаге 4> откройте> войти как: введите ваше имя пользователя

Теперь установите агент CodeDeploy в соответствии с типом вашего экземпляра.

Сервер Linux: http://docs.aws.amazon.com/codedeploy/latest/userguide/codedeploy-agent-operations-install-linux.html

Сервер Ubuntu: http://docs.aws.amazon.com/codedeploy/latest/userguide/codedeploy-agent-operations-install-ubuntu.html

Windows Server: http://docs.aws.amazon.com/codedeploy/latest/userguide/codedeploy-agent-operations-install-windows.html

Убедитесь, что агент запущен.


введите описание изображения здесь

ШАГ 6. Добавьте аддон CodeDeploy в BitBucket

Login to your BitBucket Account Integrations > Search AWS CodeDeploy > Add AWS CodeDeploy


введите описание изображения здесь

ШАГ 7. Создайте приложение CodeDeploy на AWS

Login to your AWS Account. Services > search CodeDeploy > select CodeDeploy > If this is your first time select “get started now” or Create Application > Custom deployment > skip walkthrough > enter details > Application Name: staging-deployment (Important: note it down) Deployment group name: staging-deployment (Important: note it down) Select “In-place deployment” Environment configuration > Amazon EC2 isntance > Key: Name, Value: staging-auto-deploy (these are the key, value which you created when you created instance in Step 4) >


введите описание изображения здесь

Deployment Configuration > CodeDeployDefault.OneAtTime > Service Role ARN: select the role that you created in step 2 (CodeDeployServiceRole) >


введите описание изображения здесь

Create Application

ШАГ 8. Создайте том S3

Войдите в свою учетную запись AWS> Services> S3> Create bucket> Bucket name: staging-deployment-bucket> Create.

ШАГ 9. Настройки CodeDeploy для репозитория

Войдите в свое репо> Настройки> Настройки CodeDeploy> Настроить надстройку> Следуйте инструкциям на экране.

Шаг A. Войдите в свою учетную запись AWS> Services> IAM> Policy> Create Policy> Create Your Own Policy> (Эта политика создана для надстройки развертывания кода битбакета, используйте ее, чтобы создать роль для надстройки Bitbucket codeDeploy ) Имя политики: BitBucketCodeDeployAddOnPolicy. Документ политики: вставьте следующее в поле ввода.

{«Версия»: «2012–10–17», «Заявление»: [{«Эффект»: «Разрешить», «Действие»: [«s3: ListAllMyBuckets», «s3: PutObject»], «Ресурс»: « arn: aws: s3 ::: ”}, {« Эффект »:« Разрешить »,« Действие »: [« codedeploy: »],« Ресурс »:« * »}]}

Создать политику

Шаг B. Войдите в свою учетную запись AWS> Сервисы> IAM> Роли> создать роль> другую учетную запись AWS>


введите описание изображения здесь

account ID: copy paste the AWS Account ID given on the bitbucket codeDeploy on screen instruction > check require external ID checkbox then: copy paste the External ID given on the bitbucket codeDeploy on screen instruction >


введите описание изображения здесь

введите описание изображения здесь

далее: Разрешения> Прикрепите политики разрешений> найдите политику, созданную на шаге A> далее: просмотрите Имя ролика: "BitbucketCodeDeployAddon"> Создать роль, щелкните только что созданную роль, скопируйте ARN роли и вставьте его в «Your Role ARN» на странице настроек развертывания кода битбакета> нажмите «Сохранить и продолжить». На следующей странице Приложение: выберите приложение CodeDeploy, созданное на шаге 7> S3 Bucket: выберите сегмент S3, созданный на шаге 8> сохранить

ШАГ 10. Включите конвейер Bitbucket

Войдите в свою учетную запись BitBucket Настройки репо> Конвейеры> настройки> Включите Включить конвейер

Для шагов 11, 12, 13 и 14 необходимые файлы доступны для справки в источнике этого репо: https://bitbucket.org/bhushanTPL/bitbucket-pipeline-and-aws-codedeploy

ШАГ 11. Создайте bitbucket-pipelines.yml

Скопируйте файл bitbucket-pipelines.yml. (Внесите в этот файл изменения в соответствии с требованиями вашего проекта) Добавьте этот файл в корень вашего проекта.

Документы: https://confluence.atlassian.com/bitbucket/configure-bitbucket-pipelines-yml-792298910.html?_ga=2.162970750.315484667.1509451697-1615374000.1508921669#Configurebitlines.yml-ci_imageimage(необязательно)

ШАГ 12. Создайте codedeploy_deploy.py

Скопируйте файл codedeploy_deploy.py. Добавьте этот файл в корень вашего проекта.

Документы и исходный код: https://bitbucket.org/awslabs/aws-codedeploy-bitbucket-pipelines-python.

ШАГ 13. Создайте appspec.yml

Перейдите к источнику этого репо: https://bitbucket.org/bhushanTPL/bitbucket-pipeline-and-aws-codedeploy и скопируйте файл appspec.yml. (внесите изменения в этот файл в соответствии с требованиями вашего проекта) Добавьте его в корень вашего проекта.

Документы: http://docs.aws.amazon.com/codedeploy/latest/userguide/reference-appspec-file.html

ШАГ 14. Создание скриптов

Создайте папку сценариев в корне вашего проекта

Создайте файл startApp.sh в папке сценариев в корне ваших проектов, который будет запускать команды после того, как ваша сборка будет перенесена в ваш экземпляр EC2.

ШАГ 15. Добавьте переменные среды

Войдите в свою учетную запись BitBucket> Настройки репо> Переменные среды Добавьте следующие переменные среды

AWS_SECRET_ACCESS_KEY: секретный ключ для пользователя с необходимыми разрешениями.

AWS_ACCESS_KEY_ID: ключ доступа для пользователя с необходимыми разрешениями.

AWS_DEFAULT_REGION: регион, в котором находится целевое приложение AWS CodeDeploy.

APPLICATION_NAME: имя приложения AWS CodeDeploy.

DEPLOYMENT_CONFIG: конфигурация развертывания AWS CodeDeploy (CodeDeployDefault.OneAtATime | CodeDeployDefault.AllAtOnce | CodeDeployDefault.HalfAtATime | Custom).

DEPLOYMENT_GROUP_NAME: имя группы развертывания в приложении.

S3_BUCKET: имя сегмента S3, в котором хранится исходный код для развертывания.

Документы и ссылки: https://bitbucket.org/awslabs/aws-codedeploy-bitbucket-pipelines-python.


Теперь вы настроили все необходимые шаги. Теперь, когда вы фиксируете и отправляете изменения в свою ветку, запускается процесс автоматического развертывания. Обратите внимание, что в следующем примере конфигурации bitbucket-pipeline.yml процесс развертывания будет запускаться всякий раз, когда вы отправляете свои изменения в «промежуточную» ветвь.


введите описание изображения здесь

You can check progress of your pipeline by clicking on Pipelines in your repo.


введите описание изображения здесь

You can view deployment related logs. For more info visit : http://docs.aws.amazon.com/codedeploy/latest/userguide/deployments-view-logs.html

Вы можете отслеживать развертывания из AWS, войдя в свою учетную запись AWS, Сервисы> CodeDeploy> Развертывания.

person BeeBee8    schedule 16.05.2018
comment
Это очень хорошая инструкция, спасибо. Я прошел через те же шаги, но не могу найти место для установки file-exists-behavior, как в документация - person Yevgeniy Afanasyev; 02.12.2018

Это довольно много информации, которую вы ищете, но в целом вам нужно следующее:

  1. Настройка codedeploy на aws: это будет включать настройку приложения codedeploy, правильной группы развертывания с нужными разрешениями и переменных среды (теги EC2 и т. Д.) В зависимости от вашей среды. Кроме того, вам нужно будет установить необходимые двоичные файлы codedeploy на ваших экземплярах EC2.

  2. Настройка конвейера Bitbucket: настройте правильные bitbucket-pipelines.yml, appspec.py, скрипты Boto и т. Д. Взгляните на https://bitbucket.org/awslabs/aws-codedeploy-bitbucket-pipelines-python?_ga=2.61586476.161527324208.

Я использую конвейеры bitbucket описанным выше способом для автоматического развертывания нескольких репозиториев в Angular, Nodejs, Python на AWS.

Лучший способ получить дополнительную помощь - задать более конкретные вопросы или если вы застряли в какой-то конкретной проблеме.

person Animesh    schedule 05.11.2017
comment
Здравствуйте, спасибо за ответ, у меня было много проблем, я давно смог его завершить, давно хотел выложить подробные шаги. Теперь я опубликовал подробные шаги в своем ответе. - person BeeBee8; 16.05.2018

Вы просто настраиваете свой YML-файл конвейеров для развертывания только в этой ветке. У них есть конфигурация развертывания, которую вы можете добавить, хотя она все еще находится в стадии альфа. Для текущего использования конвейеров вы должны сделать что-то вроде этого:

pipelines:
  branches:
    master:
    - step:
      script: # Modify the commands below to build your repository.
      - export AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID
      - export AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY
      - export AWS_DEFAULT_REGION=$AWS_DEFAULT_REGION
      - export S3_BUCKET=$S3_BUCKET
      - export DEPLOYMENT_GROUP_NAME=$DEPLOYMENT_GROUP_NAME
      - export DEPLOYMENT_CONFIG=$DEPLOYMENT_CONFIG
      - export APPLICATION_NAME=$APPLICATION_NAME
      - echo "Starting pipelines for MASTER"
      - chmod +x gradlew
      - ./gradlew build
      - zip -r tmp/enterpriseconfigserver.zip build/libs/enterpriseconfigserver-0.0.1-SNAPSHOT.jar appspec.yml buildspec.yml
      - python codedeploy_deploy.py

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

Это также может быть полезно: https://confluence.atlassian.com/bitbucket/using-artifacts-in-steps-935389074.html.

person isaac weathers    schedule 26.02.2018
comment
Здравствуйте, спасибо за ответ, у меня было много проблем, я давно смог его завершить, давно хотел выложить подробные шаги. Теперь я опубликовал подробные шаги в своем ответе. - person BeeBee8; 16.05.2018
comment
Я вижу это. Отлично. - person isaac weathers; 26.06.2018