Кейсы

Linux CI/CD

Похожие кейсы:

Другие
2026 год

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`
  • Атомарное обновление: запуск серверного скрипта деплоя для применения изменений без прерывания обслуживания