В ходе сегодняшнего занятия из курса “Otus PHP Professional“ занятия мы изучим понятия деплоя и сборок. Как результат, научимся строить базовые пайплайны развёртывания приложений и получим базовые навыки по автоматизации развертывания приложений.
-
Преподаватель: Михаил Каморин
-
Дата занятия: 06 июня 2022
/**/
Карта курса
Цели вебинара
Развертывание
Подготовка к автоматизации
Вопросы развертывания
Действия при релизе
Прогрев кеша ~ фоновым скриптом генерируем кэш на нужные вещи, чтобы пользователь при запуске основного скрипта (использующего и валидирующего кеш) — не ощутил тормозов
Культура devops
Инфраструктура хранится под контролем версий
Цель DevOps — увеличить частоту релизов с минимумом падений (у сисадминов — только чтобы не падало, т.о. релиза затягиваются)
Проверочные вопросы по развертыванию
Ответы:
-
(1) создать колонку, в новую колонку засунуть записи, а потом если не упало , то удалить старую; завершить все воркеры, обновить код и миграции
-
(2) если обновление/удаление, а при добавлении — не обязательно
-
(3) мониторинг (автоматический) + smoke tests / health check (простые тесты, например, на статус 200) + тест ключевых endpoint-ов
CI/CD ~ Continuous integration / delivery / deployment
Определения
Требования к CI
Преимущества и недостатки Continuous integration
Требования к Continuous delivery
Требование к Continuous deployment
Как только смерджили в master, все автоматом уходит на прод (так что тут качество тестов крайне важно)
Feature toggle — возможность быстро отключать какие-то фичи при релизе
Инструменты CI
-
Travis CI: https://travis-ci.org/ — под мелкие проекты
-
Circle CI: https://circleci.com/ — под средние комм. проекты
-
Jenkins: https://www.jenkins.io/ — универсально, мощное, но тяжело отлаживаемое; изначально под Ява проекты писалось
-
CloudBees: https://www.cloudbees.com/
-
Gitlab: https://docs.gitlab.com/ee/ci/ ~ рекомендуется преподавателем; беспл. с ограничениями
Pipeline CI/CD
Pipeline ~ скрипт, выполняемый при выкатке
Проверочные вопросы
Ответы:
(1) не всегда, например в финтехе или в безопасности жизни/здоровья человека не прокатит; еще пример — откладывание релизов на прайм-тайм (распродажи в магазине и т.п.);
(2) иначе на прод могут просочиться баги
(3) например, при водопадной модели: когда важен только конечный результат (за который и платят)
(4) да, например: “перегнать кучу данных из одного сервиса в другой, во время прайм-тайма”: решение: релизимся в прайм-тайм, а миграции выполняем уже позже, ночью.
Стратегии развертывания
Полное обновление
Стопим и апдейтим все сразу
Поочередное обновление
Частично стопим/апдейтим сервисы
Blue/green deployment
Варианты использования BG deploy
Shadow deployment
~ изменения идут сразу на 2 площадки параллельно (старую и новую прод-версии)
Canary deployment ~ канареечное обновление
~ переключаем Х% пользователей на новую версию (например, сперва самых скандальных пользователей, для фидбека)
Feature toggle
~ выкатка тестовых фич (эксперименты), с возможностью отката на старое поведение через настройки
траблы с тестами, если фичи взаимосвязаны, тогда кол-во тестов равно 2 ^ N, где N — число фич
Контрольные вопросы
-
(1) например, переключение на пустую ветку
-
(2) продаем идею покупки 2го сервера: предлагаем канареечный сценарий (canary) для тестирования маркетинговых стратегий
-
(3) катим что-то значимое (а не все подряд кастомизируем; например, сделать лимит на число фич — не более Х); выпиливаем старые фичи со временем, вместе с переключателем фич (не оставляем их); старый код удаляем, зная что он остается в гите
Варианты деплоймента
Вручную
Bash-скрипты
Менеджер пакетов
Спец инструменты
-
Capistrano: тут все файлы с настройками харнятся, совместим с GitLab; написан на Ruby (прост в понимании)
-
Mina: пороще, побыстрее чем выше
-
Jenkins: не рекомендуется …
Доп. материалы
-
Презентация: https://cdn.otus.ru/media/private/b0/c8/31_Deploying-50919-b0c859.pdf?hash=FHDgSrwryWufUuQeQF4-EQ&expires=1657217604
-
Запись вебинара: https://play.boomstream.com/64X6BWuD
Нет комментариев