Проблема
В мире embedded-разработки CI/CD часто воспринимается как что-то из другой вселенной. «У нас же железо, какой Docker?» — типичная реакция. Но именно в embedded автоматизация приносит наибольшую отдачу: цена ошибки высока, а ручное тестирование занимает дни.
Наш подход
Мы разбили pipeline на несколько стадий:
- Static Analysis — clang-tidy, cppcheck, MISRA-проверки
- Unit Tests — GoogleTest в Docker-контейнере с эмуляцией HAL
- Integration Tests — QEMU для ARM, автоматический запуск firmware
- Hardware-in-the-Loop — тесты на реальных платах через CI runner
Инструменты
- GitLab CI — основной orchestrator
- Docker — изоляция окружений сборки (arm-gcc, tools)
- QEMU — эмуляция ARM для быстрых smoke-тестов
- Custom test runners — Python-скрипты для HIL-тестирования
Результаты
- Цикл релиза сократился с 2 недель до 1 дня
- Количество regression-багов в production уменьшилось на 70%
- Время onboarding нового инженера — с 2 недель до 3 дней
Выводы
CI/CD в embedded — это не роскошь, а необходимость. Начните с малого: статический анализ и unit-тесты в Docker. Затем постепенно добавляйте QEMU и HIL.