4. ● Более 8 лет занимаюсь backend-разработкой на PHP
● Год преподаю в OTUS
● Ментор Гарвардского курса CS50
● Co-Founder/CTO украинских стартапов mister.am и
dotsplatform.com – экономим время програмистов
доставляя им пиццу к рабочему месту
4
Герасимчук Егор
5. • Различать continuous integration / delivery / deployment
• Настраивать сервера с помощью Forge
• Разворачивать приложения с помощью Envoyer
5
Цели мастер-класса
7. 1. Кредитка с 1$
2. Аккаунт на https://forge.laravel.com
3. Аккаунт на https://envoyer.io
4. Аккаунт на https://www.linode.com
5. Проект на github на lararvel
https://github.com/egerasimchuk/blog
7
37. Подготовка к
• Валидация изменений кода (code review, тесты)
• Чек-лист действий при релизе
• Сборка артефактов (компиляция css/js)
• Разворачивание релиза
• Обновление конфигурации сборки
• Откат релиза
3
7
Что нужно для автоматизации
развёртывания?
38. Развёртывание: вопросы
• Версионирование
• Периодичность сборок и развёртывания
• Количество окружений (stage), порядок переноса между
окружениями
• Обновление конфигураций
• Мониторинг после развёртывания
3
8
Вопросы при развертывании
39. Вариант пайплайна развёртывания
• Обновляем код
• Обновляем зависимости
• Накатываем миграции на БД
• Перезагружаем воркеры
• Чистим кэш
• Прогоняем тесты (unit, integration, возможно, system)
3
9
Пайплайн для разворота
тестового окружения
40. Вариант пайплайна развёртывания
• Обновляем код
• Обновляем зависимости
• Накатываем миграции на БД
• Перезагружаем воркеры
• Чистим и прогреваем кэш
• Прогоняем тесты (system, end to end)
4
0
Пайплайн для разворота
production-окружения
41. Вопросы по развёртыванию
• Нужно переименовать колонку в таблице БД. Какой
правильный подход при автоматизации
развёртывания?
• Как определить, что развёртывание прошло неудачно?
4
1
47. • Автоматические тесты
• Сервер интеграции
• Изменения в процессе разработки
4
7
Что нужно для
Continuous integration:
48. • Быстрое выявление проблем интеграции
• Всегда прогоняются модульные тесты
• Наличие текущей стабильной версии
• Разработчики работают в более коротком цикле
4
8
Преимущества
Continuous integration:
49. • Затраты на поддержку (содержание сервера, тесты)
• Затраты на инициализацию процесса
4
9
Недостатки Continuous
integration:
57. • Всегда ли можно применять continuous deployment?
Если нет, приведите примеры.
• Почему особенно важно качество тестов при continuous
deployment?
• В каком случае применение continuous integration не
оправдано?
• Можно ли выполнять вручную какие-либо операции на
production-сервере при continuous deployment? Если да,
то приведите примеры.
5
7
66. 6
6
Недостатки Laravel Forge
● Работает только с “голыми” серверами
● Платный – от 19$ в месяц
● Не подходит для деплоев (есть downtime во время
деплоя, нельзя кастомизировать процесс деплоя)
74. 7
4
Схема деплоя
● создает новую папку в releases
● клонирует репозиторий на нужном коммите в эту
папку
● в этой папке запускается деплой-скрипт
● система меняет символическую ссылку current-
папки на последний релиз
75. 7
5
Структура папок для
laravel-проекта:
project/releases – здесь лежат деплои релизов
project/releases/20200421132948/...
project/releases/20200421135956/…
project/current -> project/releases/20200421135956/
это рабочая директория, на которую настроен web -сервер
project/storage – хранилище Laravel-приложения, общее для всех релизов
project/.env – файл с настройками окружения
78. Вариант пайплайна развёртывания
• Обновляем код
• Обновляем зависимости
• Накатываем миграции на БД
• Перезагружаем воркеры
• Чистим и прогреваем кэш
• Прогоняем тесты (system, end to end)
7
8
Вспомним пайплайн для
разворота production-
окружения
79. 7
9
Пайплайн в Envoyer:
● Клонирование репозитория
● Установка зависимостей
● До активация релиза:
○ накатываем миграции
○ чистим и прогреваем кэш
○ кэшируем маршруты и конфиги
○ собираем артефакты
○ прогоняем тесты
● Активация релиза
● После активации релиза
○ рестарт воркеров
● Удаление старых релизов
80. 8
0
Доступные переменные
● cd {{ release }} – перейти в папку текущего релиза
● cd {{ project }} – перейти в папку проекта
● {{ sha }} – хэш задеплоенного коммита
● {{ time }} – таймштамп текущего деплоя в формате YmdHis
84. Пока не закончится предыдущий шаг
деплоя на каждом сервере,
дальнейшие шаги не запускаются
85. Если на любом шаге деплоя
произойдет ошибка, то деплой будет
отменен
86. - А что делать если деплой нужно откатить?
- В интерфейсе есть кнопка Redeploy
Символическая ссылка current просто станет указывать на рабочую папку в
папке releases, и всё снова заработает.
87. А что делать, если деплой нужно
откатить, а миграции выполнились?