(Это авторами статьи.) Управление развертыванием веб-сайта раньше было легко: Он просто участие загрузки файлов на сервер через FTP, и вы были в значительной степени сделано. Но те дни прошли: Веб-сайты стали очень сложными, с участием многих инструментов и технологий в своих стеках.
В настоящее время, типичный веб-проект может потребоваться выполнить инструменты сборки для сжатия активов и создания достижимых файлов для производства, загрузить активы в CDN и недействительными устаревшие, выполнить набор тестов, чтобы убедиться, что код не имеет ошибок (как для клиента и код сервера), делать миграции баз данных (и, чтобы быть на безопасной стороне, сначала выполнить резервную базу данных), мгновенное желаемое количество серверов за балансера нагрузки и развернуть приложение к ним (через атомное развертывание, так что веб-сайт всегда доступны), скачать и установить зависимости, развернуть серверные функции, и, наконец, уведомить команду, что все готово через Slack или по электронной почте.
Весь этот процесс звучит как слишком много, не так ли? Ну, на самом деле это слишком много. Как мы можем избежать перегружены сложностью поставленной задачи? Решение сводится к одному слову: Автоматизация. Автоматизируя все задачи для выполнения, мы не будем бояться делать развертывание (и с дрожащим потным пальцем при нажатии кнопки Enter), действительно, мы можем даже не знать об этом.
Автоматизация улучшает качество нашей работы, так как мы можем избежать необходимости вручную выполнять задачи, связанные с умопомрачинием, что позволит нам использовать все наше время для кодирования, и убеждает нас, что развертывание не потерпит неудачу из-за человеческих ошибок (таких как переопределение неправильная папка, как в старые дни FTP).
Введение в непрерывную интеграцию, доставку и развертывание
Управление и автоматизация развертывания программного обеспечения включает в себя как инструменты, так и процессы. В частности, Git как система управления версиями, где хранить наш исходный код, и наличие сервисов Git-хостинга (таких как GitHub, GitLab и BitBucket), которые запускают события при перемещении нового кода в репозиторий, позволяют извлечь выгоду из следующих Процессов:
-
Непрерывная интеграция
Стратегия объединения изменений кода в основную ветвь как можно чаще, на которой автоматические тесты против сборки базы кода запускаются для проверки того, что новый код не вводит ошибок; -
Непрерывная доставка
Расширение непрерывной интеграции, которое также автоматизирует процесс выпуска, позволяя развернуть проект в производство в любой момент; -
Непрерывное развертывание
Расширение непрерывной доставки, которое автоматически развертывает новый код всякий раз, когда он проходит все необходимые тесты (как небольшое изменение, которое он может содержать), что позволяет легко определить источник любой проблемы, которая может возникнуть, и снятие давления с команды, как она больше не нужно иметь дело с «день освобождения» больше.
Придерживаясь этих стратегий имеет ряд преимуществ. Наиболее непосредственным является то, что наш продукт может отправить новые функции быстрее, действительно, они могут идти жить, как только команда закончила их кодирования. Команда также может немедленно получать обратную связь (либо от членов команды по среде разработки, от клиента на постановке среды, и от пользователей после того, как он выходит жить) и быть в состоянии реагировать сразу, создавая тем самым положительный цикл обратной связи. А поскольку весь процесс полностью автоматизирован, команда может сэкономить время и сосредоточиться на коде, тем самым улучшая качество продукта.
Представляем Бадди, инструмент для автоматизации развертывания программного обеспечения
Популярность Git породила новое поколение инструментов для управления сложностью развертывания программного обеспечения. Бадди является одним из этих новых инструментов, рожденных с целью сделать его легким для реализации непрерывной интеграции / Доставка / Развертывание, в то время как расширение числа функций нашего приложения может предоставить, улучшение его качества, и снижение его расходов, позволяя включить в наши стеки предложения лучших или самых дешевых поставщиков облачных услуг (среди них AWS, DigitalOcean, облачная платформа Google, Cloudflare, Rackspace, Azure и другие). Таким образом, например, наше приложение может быть размещено на GitHub, быть защищены от DDoS через Cloudflare, иметь свои статические файлы, размещенные через DigitalOcean, использовать бессерверные функции от AWS Lambda, и аутентифицировать пользователей через Firebase, и все это обрабатываются бесшовно.
Buddy работает с помощью конвейеров: Наборы действий, определенных разработчиком в определенном порядке, выполняемых вручную или автоматически при выполнении push Git, которые доставляют приложение из репозитория Git туда, где это необходимо, и преобразуют его по мере необходимости. Трубопроводы являются чрезвычайно гибкими, что позволяет разработчикам добавлять только необходимые действия и настраивать их под свои конкретные потребности.
Например, следующий конвейер выполняет все необходимые задачи для развертывания некоторых приложений Node.js: выполнить шаг сборки, загрузить файлы на сервер через SFTP, загрузить активы в AWS S3 и очистить их от CDN, перезапустить сервер и, наконец, сообщить команде через Slack (как это можно оценить на рисунке ниже, трубопровод может быть понятным):
Мы можем создавать различные конвейеры для различных сред и выполнять специальные действия, когда процесс завершается неудачей (например, когда тест не был успешным, когда развертывание сервера не работает, или другие). Например, следующий конвейер (для развертывания приложения Node.js и PHP, использующему DigitalOcean, Fortrabbit и AWS CloudFront для хостинга)создает резервное копирование активов и очищает CDN только при развертывании в производство и отправляет уведомление команде через Slack в случае неудачи:
Примечательным эффектом настройки наших конвейеров с действиями различных поставщиков облачных услуг является то, что мы можем удобно переключаться между ними всякий раз, когда возникает необходимость, что позволяет легко избежать блокировки поставщика (это включает в себя также изменение репозитория провайдера). Buddy предлагает чуть более 100 действий из коробки, а также позволяет разработчикам создавать и использовать свои собственные действия. На этом изображении показаны все доступные действия:
Создание трубопровода
Давайте посмотрим, как создать простой конвейер для тестирования и развертывания приложения Node.js и отправить уведомление группе. Первым шагом является создание нового проекта, в ходе которого вам будет предложено выбрать хостинг-провайдера проекта (из числа GitHub, GitLab, Bitbucket, Buddy Git Hosting и вашего частного git-сервера), а затем выбрать репозиторий:
Затем мы можем создать конвейер, указав, когда он должен работать (либо вручную, автоматически после того, как новый код будет перемещен в репозиторий, или автоматически каждый x количество времени) и от какой ветви:
Затем мы можем добавить действия в конвейер. Для этого мы просто нажимаем на кнопку «Я», чтобы добавить новое действие, на котором мы должны настроить его по мере необходимости. Для создания и тестирования приложения Node.js мы добавляем и настраиваем действие «Node.js»:
После тестирования приложения мы можем развернуть его, загрузив его на наш производственный сервер через SFTP. Для этого мы добавляем действие «SFTP» и настраиваем его с помощью пользовательских переменных среды ${SFTP}
${SFTP_USER}
и:
Наконец, мы отправляем команде электронное письмо с результатами выполнения. Для этого мы добавляем и настраиваем действие «Email»:
Ну вот. Наш трубопровод будет выглядеть следующим образом:
С этого момента, если конвейер был настроен для запуска, когда новый код перенаправляется в репозиторий, выполнение нажатия git вызовет выполнение конвейера.
Постоянное пребывание в актуальном состоянии
Веб-разработка находится в бесконечном состоянии потока, с новыми инструментами и услугами, запускаемых без перерыва, некоторые из них часто становятся горячей тенденцией сразу и новый нормальный едва несколько месяцев спустя. Технологии редко слышали несколько лет назад постепенно приобретают значение и в конечном итоге стать обязательным (голосовой поиск, машинное обучение, WebAssembly), новые рамки и библиотеки предлагают новые способы создания сайтов (Граф, Гэтсби, Next.js, Nuxt.js), и наши приложения должны быть доступны с недавно изобретенных устройств (Amazon Echo, Системы в автомобиле). Чтобы наши приложения были актуальными, мы должны постоянно оценивать последние предложения и решать, добавлять ли их в наш технологический стек. Поэтому крайне важно, чтобы наши платформы для разработки приложения не ограничивали то, какие технологии мы можем использовать.
Бадди занимается этой проблемой, постоянно собирая отзывы от своих пользователей о том, что им нужно (через опросы пользователей, их форум,каналы связи и твиты),и его команда стремится предоставить необходимые функции. Блог Buddy дает представление об интенсивных темпах развития: Например, в последние несколько месяцев они реализовали функции для создания статических приложений и веб-сайтов с Gatsby, развертывание upCloud и Google Cloud Функции, запуск конвейеров с webhooks, интеграция с Firebase, строительство и запуск контейнеров Docker на AWS ECS, и многие другие.
Заключение
Автоматизация стала необходимой, чтобы избежать перегруженности сложностью современного развертывания веб-сайта. Мы можем использовать непрерывную интеграцию/доставку/развертывание (возможно, хостинг нашего исходного кода через Git), чтобы сократить время, необходимое для доставки новых функций в наши приложения и получения обратной связи от пользователей.
Buddy помогает в решении этой задачи, позволяя разработчикам создавать конвейеры для выполнения действий, касающихся широкого спектра технологий и поставщиков облачных услуг, и комбинируя эти действия любым возможным способом для удовлетворения наиболее конкретных потребностей.
Вы можете проверить Бадди бесплатно в течение 2 недель, и, если вам нужно разместить свои данные, вы также можете установить его на вашем собственном помещении.
Источник: smashingmagazine.com