Автодеплой интернет-магазина товаров для кемпинга: CI/CD в GitLab, окружения в Docker и Docker Compose, релизы без FTP
Задача. Два разработчика на аутсорсе из разных городов заливали правки магазина товаров для кемпинга по FTP прямо на боевой сервер. После релизов ломалась корзина и терялись заказы, откатить было нечем, тестовая копия отличалась от боевой, однажды правки двух человек перезаписали друг друга. Маркетолог перед акциями боялся просить о правках. Выкладку нужно было сделать скучной.
Решение. Завёл репозиторий Git с ветками: основная, рабочая и своя на каждую задачу, в основную только через merge request с просмотром коллеги. Поставил GitLab CE на сервер клиента, код остаётся у владельца. Собрал CI/CD: на каждый merge request проверка кода и автотесты, после слияния образ Docker в реестр GitLab, на тест он уходит сам, на боевой сервер кнопкой. Окружения описал в Docker Compose: сайт, база, кеш, очередь, различаются только переменные. Миграции базы в пайплайне, откат запуском прежнего образа за минуты, секреты в защищённых переменных, выкладка только в рабочее время. Написал инструкцию на одну страницу.
Результат. FTP закрыт, ошибки корзины ловятся на тесте, разработчики не перезаписывают друг друга. Автотесты покрывают корзину и оформление заказа, остальное покрывается постепенно, откат образа не отменяет изменений в базе.
Евгений Росляков, сайты с 2016 года. Работаю как самозанятый по договору, закрывающие документы для юрлиц.