Кейсы
CI/CD Pipeline
Разработка и внедрение отказоустойчивого конвейера непрерывной интеграции и доставки (CI/CD). Проект автоматизирует тестирование PHP и Node.js кода, параллельную сборку нескольких фронтенд-приложений (CRM, Check) и деплой на боевой сервер через SSH/SCP.
Конфигурация представляет собой комплексный workflow для GitHub Actions, оптимизированный под структуру монорепозитория. Система разделена на независимые этапы (jobs), которые выполняются параллельно для ускорения общего цикла поставки. Включает в себя изоляцию сред тестирования с использованием Docker-сервисов (MySQL 8.0) и управление артефактами сборки, что гарантирует идентичность кода на этапе тестирования и после деплоя на сервер.
Требовалось автоматизировать процесс обновления проекта, состоящего из бэкенда на Laravel и нескольких изолированных SPA на Vue/React. Основные цели: внедрение обязательного прогона тестов перед деплоем, минимизация времени простоя сервера за счет сборки фронтенда на стороне CI, а не на целевом хосте, и обеспечение безопасной передачи данных без использования паролей (по SSH-ключам).
CI/CD реализован с использованием стратегии Matrix Build, что позволило собирать разные SPA-приложения в параллельных потоках. Бэкенд-тесты запускаются в окружении с поднятым в Docker контейнером БД, имитирующим продакшн-среду. После успешного прохождения всех проверок (`needs`) артефакты (билд активов) упаковываются и доставляются на сервер через SCP. Финальный этап запускает на сервере атомарный скрипт деплоя (`deploy.sh`), который выполняет миграции БД, очистку кэша и обновление кода из Git.
Основные возможности
- Параллельная сборка (Matrix Strategy): одновременная сборка нескольких клиентских приложений
- Управление артефактами: использование `upload-artifact` и `download-artifact` для передачи собранных файлов между этапами
- Безопасный транспорт: использование SSH-ключей через GitHub Secrets для SCP и удаленного выполнения команд
- Интеграционное тестирование: автоматический запуск PHP-тестов с живой базой данных MySQL в контейнере
- Условный деплой: автоматическая доставка только при пуше в ветку `main`
- Атомарное обновление: запуск серверного скрипта деплоя для применения изменений без прерывания обслуживания