За последние несколько месяцев в Shoelace мы медленно переместили нашу облачную инфраструктуру с нашей облачной инфраструктурой из Digitalocean в Amazon Web Services. В то время как DiumperoCean подал нам хорошо в течение длительного времени, мы хотели более богатой особенностью обслуживания, которая упрощает автоматическое развертывание и балансирование нагрузки. Хотя есть много вариантов от Big-Name компании для облачного хостинга, Amazon был легким выбором для нас, учитывая наш опыт работы с обслуживанием в других областях, таких как S3, и мой прошлый опыт с платформой.
У нас был приличный парк серверов (капель), размещенный на цифровом океане, каждый с нашим последним зарегистрированным и запущенным в PM2 управляемый экземпляр NODEJS. Это означало, когда мы хотели развернуть новую версию к производству, нам пришлось бы вручную SSH на шесть (!) Разных серверов, вытягивайте последние от Git, а затем восстановить через Crunt и перезагрузить узел через PM2. Несмотря на то, что не сложное или неуправляемое количество работы, это определенно стало утомительным и расточительным, когда мы хотели бы пойти на производство несколько раз в день. Мы не хотели сдерживать процесс архаичного развертывания, поэтому мы желали что-то лучшее.
В первую очередь, мы хотели уменьшить объем работы, необходимую для развертывания. Мы хотели устранить любые препятствия на пути развертывания легко, быстро и безопасно и безопасно. Достижение, которое позволит нам быстрее иметь возможность быстрее, давая нам большую ловкость и реагирование на тенденции рынка, изменения API и разрешение ошибок.
У меня был какой-то предыдущий опыт работы с AWS, что повлияло на наше решение в качестве компании, чтобы перейти на платформу (плюс, некоторые бесплатные кредиты, предоставляемые нам, дали наш статус, как стартап не повредил). Знание гибкости, которая AWS Beanstalk предоставлена из коробки, мы также хотели добавить балансировку нагрузки с минимальными затратами — то, что цифровой океан не поддерживал в то время. Мы также сможем масштабировать наши экземпляры вверх и вниз в соответствии с трафиком с помощью политики AWS Auto-Scaling. Итак, с большим количеством преимуществ, доступных из коробки, мы решили продвинуться вперед.
Сначала я начал при доке всех наших проектов. Докер в производстве предоставил нам душевное спокойствие, что версии будут идентичны в каждой среде. Поскольку наш стек построен на Nodejs, я использовал базовое изображение с узла на Docker Hub Отказ Наши изображения Docker довольно просты, так как их главная работа состоит в том, чтобы сделать снимок базы кода в момент создания изображения. Мы используем Docker Run, чтобы выполнить Установка NPM
, Гринт сборки
, а затем мы используем PM2 Docker в качестве нашей команды по умолчанию.
Оттуда я вручную настроил среды AWS Beanstalk. Я включил балансировку нагрузки и автоскализацию с помощью триггеров по умолчанию, а шлюз Nat, чтобы фильтровать исходящий трафик через один IP-адрес, чтобы упростить наши взаимодействия с API Facebook, который использует белый список для проверки запросов. Вместо того, чтобы обновить белый список каждый раз, когда новый экземпляр EC2 отображается под нашим балансировщиком нагрузки, Gateway NAT гарантирует, что один IP-адрес отправляет запросы на Facebook. Я выбрал неизменные развертывания в наших экземплярах EC2, чтобы устранить шанс пользователей, взаимодействующих с частично развертываемым развертыванием.
Далее я написал настраиваемый сценарий развертывания, чтобы связать время непрерывного потока развертывания. Сценарий имеет несколько основных компонентов для него.
Во-первых, он создает изображение Docker против текущего каталога и нажимает на этот образ AWS Elastic Container Registry. Я мог бы также использовать здесь Docker Hub, но, учитывая остальную часть нашей облачной инфраструктуры уже на Амазонке, сохраняя все, что все под зонтиком Amazon казалось проще.
Далее создается ZIP-файл для хранения файла DockerRun.aws.json, который Beanstalk использует для настройки приложений в эластичной среде Beanstalk Docker, а также некоторые файлы конфигурации Beanstalk Beanstalk, чтобы убедиться, что наша конфигурация сети поддерживается через обновления среды. Файл DockerRun — это то, как Amazon позже узнает, какое изображение докера тянет, чтобы обновить нашу среду. Этот ZIP-файл нажимается на S3.
После этого новая версия Beanstalk создается на основе ZIP-файла, который мы просто нажаты на S3, а затем мы запускаем обновление среды, используя вновь созданную версию приложения.
Чтобы связать это все вместе, и дать нашу постоянную интеграцию и тестирование, мы интегрированы с Circleci . Как только наши проекты были добавлены, я обновил нашу конфигурацию CIRCLECI для выполнения нашего сценария развертывания в AWS после того, как наш производственный филиал на GitHub успешно построен (Re: наш линтер и автоматические тесты).
Вот и все! Теперь, когда мы разрезаем производственную ветку на GitHub, наш код автоматически проверяется развернутым для AWS. Нет больше ручного развертывания.
Оригинал: «https://dev.to/dvwbr/building-a-cicd-pipeline-for-shoelace-4de7»