Я столкнулся с CFO стартапа, который рассказал мне о поставщике, который они зависели от критического процесса бэкэнда. Он был разочарован тем, что из-за устаревших процессов развертывания поставщика ручных процедур тестирования и процедуры процедуры тестирования и рутинской полдня простоя каждый новый выпуск его клиентов и его бизнес были нарушены. Ему нужно было надежное обслуживание и впоследствии закончилось отношения.
Избегая простоя, уменьшая риск разоблачения пользователей на нарушение изменений при развертывании приложений является основной проблемой. Я потянув из своего опыта в качестве инструктора по программному инженеру и активный пользователь Heroku, чтобы показать вам, как минимизировать риск развертывания и добиться до развертывания нулевых простоя. Мы будем использовать приложение Node.js в качестве примера, но эти практики и процедуры передаются в приложения, написанные во всем, от PHP к Elixir.
Минимизация риска развертывания и почему это вызов
Риск разоблачения пользователей нарушения изменения в развертывающем приложении не может быть завышенным. В лучшем случае пользователь имеет негативный опыт работы с вашим нефункциональным приложением (все еще очень плохо); В худшем случае ошибка может иметь значительные последствия безопасности и уничтожить пользовательские доверительные и клиентские отношения.
К сожалению, процесс не может полностью предотвратить развертывание ошибок. Вы отправите разбитый код. Важно то, насколько быстро вы можете определить проблемы и исправить их — или лучше, используйте постоянную интеграцию и постоянную доставку (CI/CD), чтобы определить и диагностировать проблемы, прежде чем они развернуты для производства.
Вы можете защитить свое приложение и его пользователей от сломанного кода, проблем доступности и головных болей в процессе развертывания при движении к развертыванию нулевого простоя. У вас также есть преимущество более быстрой процессы развертывания и более низкие времена ведения от регистрации кода к производству путем автоматизации процесса развертывания. Вот несколько лучших практик, чтобы следовать при развертывании приложений на Heroku.
Лучшие практики
CI/CD и автоматическое тестирование
Современные операции по развитию, поддерживающие гибкие команды развития, требуют CI/CD и автоматизированные тестирования. Независимо от того, что вы используете (Circle CI, TRAVIS, HEROKU CI, AWS CodePipipeline и т. Д.), Запуск автоматизированного тестового набора в рамках вашего процесса развертывания — это современная необходимость и лучшая практика для упорядоченной разработки.
Если вы развертываете Heroku и используете Github Integration Затем Heroku CI может запустить тестовый набор приложений с каждым развертыванием, что позволяет вам легко просматривать результаты теста, прежде чем объединиться или развертывание изменений в вашем приложении. Heroku CI также легко настроить — просто проверьте Как использовать Heroku Ci или Heroku CI Особенности и функции для дополнительной информации.
Heroku CI также поддерживает распределение теста на протяжении до 32 диндоса, чтобы существенно сократить время выполнения.
Несколько Dynos
Недостаточно просто иметь хорошие инструменты CI — вы должны горизонтально масштабировать свои диномы, чтобы иметь достаточное количество избыточности, чтобы помочь обеспечить время безотказной работы, доступность приложений и отличный пользовательский опыт. Потому что цикл Dynos каждый день для поддержания стабильности приложений и иногда снижается для обслуживания, вы должны использовать как минимум два или более Dynos в производстве для достижения нулевого простоя.
В зависимости от требований к пропускной способности вашего обслуживания или приложения вы также хотите вертикально масштабировать, чтобы обеспечить достаточно резервных мощностей. Heroku предоставляет отличный опыт разработчика здесь и позволяет как вертикально, так и горизонтальное масштабирование с простой в использовании интерфейс командной строки.
Обзор приложений
Какой лучший способ определить ошибки и изменения вручения, чем запустить ваши приложения в безопасной тестовой среде? Обзор приложений Запустите свой код в новом одноразовом приложении Heroku после успешного запроса Pull GitHub. Обзор приложений у каждого есть отдельный URL-адрес, который вы можете поделиться, что делает их отличным способом предложить, тестировать и комбинировать изменения и изменения в команду разработки с нулевым риском. Для каждого запроса на тягу вы можете настроить обзор приложений для создания автоматически, или вы можете построить их вручную.
Для вашего приложения обзора на работу создайте app.json Файл в корне Github reppub вашего приложения. Файл app.json используется для настройки новых приложений, созданных при создании запросов по тяги. Файл app.json — это мощный инструмент, который позволяет указать наследование значения при предоставлении дополнений, используя план по умолчанию Add-on Provider.
Heroku трубопроводы
А Героку трубопровод Это коллекция приложений Heroku, которые разделяют одну и ту же кодовую базу. Каждое приложение в трубопроводе представляет один из следующих этапов в Непрерывная доставка Конвейерная лента: развитие, обзор, постановка и производство.
Это очевидно и почти повсеместно повсеместно в инженерной индустрии программного обеспечения для поддержания промежуточной среды, параллельной добыче; Трубопроводы полезны для управления этим многоуровневым процессом развертывания. Пример трубопроводного процесса имеет следующие шаги:
- Разработчик создает запрос на тягу, чтобы добавить новую функцию или исправить ошибку.
- Heroku тогда автоматически создает Обзор приложения Для запроса на тяга, позволяя разработчикам проверить приложение до постановки или производства.
- Если изменение проходит все руководство и автоматическое тестирование, он объединяется на главную ветку.
- Мастер филиал автоматически развернут к приложению трубопровода для дальнейшего тестирования.
- Когда готов, разработчик продвигает Постановка приложения к производству.
Вот образец диаграммы трубопровода из документации:
Трубопроводы управляют только потоком кодовых слизней. Ваше приложение Git Reppo , config vars , Add-ons И другие экологические переменные должны управляться отдельно. В качестве альтернативно обзор приложения могут Inherit Config vars , полезное качество жизни жизни.
Продвижение к производству
Окончательный ручной обзор перед содействием к производству является важной проверкой контроля качества в в основном в основном автоматизированный процесс. Люди могут уловить вещи, которые проскальзывают даже самые надежные автоматизированные процедуры тестирования, поэтому важно не полностью отделить человеческий надзор в достижении эффективности автоматизации. Плюс, веселее, чтобы кто-то конкретный виноват, когда дела идут не так (просто шутка — проверить Николас означает «удивительный разговор » в системных сбоях в сложных автоматизированных системах и как избежать их во время создания психологической безопасности в вашей команде) Отказ
Из CLI вы можете продвигать слизку со следующей командой (команда должна указывать имя (с флагом (-A) или дистанционным управлением Git с флагом (-R)) исходного приложения):
$: трубопроводы Heroku: продвижение -R постановка
Полный список команд трубопроводов с деталями использования доступны с:
$: Heroku помогает трубопроводы
Выпуск задач (миграция)
Героку Особенность фазы выпуска Позволяет выполнить определенные задачи перед развертыванием вашего приложения. Если задача этапа выпуска не удается, новый выпуск не развернут, оставляя свой текущий выпуск не затронутым и, таким образом, снижение риска развертывания изменений в разрыв. Этап выпуска может быть полезен для таких задач, как отправка CSS, JS и другие активы из слизняка вашего приложения к ведрам CDN или S3, грунтовки или недействительные хранилища кэша или запусках миграции схем базы данных.
Важно отметить, что выпуск, слизняк и приложение для обзора — это все разные идеи в контексте архитектуры Heroku (обязательно обратитесь к это высокоуровневое техническое описание того, как Heroku работает для ясности). Команда выпуска работает в одноразовом диноме, когда новый Выпуск Создан, если выброс не вызван изменениями в конфигурации Add-on Config.
Следующие события создают новый выпуск:
- Успешное сборку приложения
- Изменение значения конфигурации VAR (если только конфигурация var не связана с дополнением)
- А трубопровод продвижение
Определите задачи выпуска в вашем ProCFile:
Выпуск:./release-tasks.sh.
Преподаватель
Помощь! Время загрузки моего приложения медленно и оставляет приложение недоступно во время перезапуска Dyno. Предварительный материал — это решение. Вместо того, чтобы останавливать существующий набор веб-динаос перед началом новых, преподаватель Запускает новые веб-динамики (и позволяет им получать трафик) до того, как существующие будут остановлены.
Чтобы включить запуск:
$: Heroku Особенности: enable -a byapp preboot
Есть несколько потенциальных подводных камней для использования этой функции, поэтому убедитесь, что прочитайте Предостережения преподавателя перед использованием этого. Например, когда вы делаете выпуски с предыдущим выпуклом, у вас будет два версии вашего кода, одновременно (перекрывающиеся на расстоянии до 3 минут), хотя только одна версия будет служить запросы пользователя. Это может потенциально вызвать проблемы с внешними службами и некоторыми дополнениями Heroku.
Мониторинг производства и APM
Великие девопа не просто останавливаются в развертывании. Heroku предлагает Встроенные прикладные метрики вместе с Сотни добавок На своем рынке, который позволяет легко настроить мониторинг для ваших приложений в производстве. Используйте услуги управления приложениями (APM), такие как новые реликвии и аппетиты, чтобы быстро определить и исправить проблемы.
Devops Teams (или команды разработчиков) могут контролировать скорость ошибок, записывать определенную компонентную задержку и пропускную способность и поверхностные ошибки/сбои и условия, которые привели к ним. Другие мониторинг, регистрацию и диагностики диагностики ошибок, такие как Ping Pingdom, PaperTrail, RollBar и Stillalive, также доступны дополнения в экосистеме Heroku. Эти инструменты приносят пользу любому производственному применению и команде, которые стремятся улучшить свой продукт, или быстро решают проблемы, когда дела пойдут не так.
Заключение
Развертывание нулевого простоя, включенное гладким, безболезненным процессом CI/CD должна быть целью для большинства сложных производственных приложений. Примените эти лучшие практики, чтобы помочь вашей команде создать отличный опыт пользователя (и разработчик).
Оригинал: «https://dev.to/heroku/zero-downtime-deployments-best-practices-for-ci-cd-on-heroku-3j5o»