Кэширование в GitLab CI: почему ваш pipeline тормозит на npm install
Разбираем, как правильно настроить cache для node_modules и .m2, чтобы повторные сборки не качали зависимости заново. Приводим реальные тайминги до и после.
Здесь мы разбираем, как код превращается в работающий сервис: от первого push до деплоя в кластер. Только то, что проверено на реальных продакшен-средах.
GitLab CI — это не «напиши YAML и жди». Это про то, как устроить поток так, чтобы каждый шаг был объясним, кэшируем и не блокировал команду.
Начнём с главного: .gitlab-ci.yml — это декларация намерений, а не сценарий. Мы учим писать конфиг, который читается как документация: каждый job имеет имя, которое отвечает на вопрос «что именно здесь происходит», и переменные вынесены в CI/CD Variables, а не зашиты в файл.
В наших разборах вы найдёте конкретные примеры: как настроить cache для Maven и npm так, чтобы повторные сборки шли за 40 секунд вместо 6 минут; как правильно использовать needs вместо only/except, чтобы не гонять лишние задачи; и как выстроить матрицу сборок под несколько версий Node.js без дублирования конфигурации.
Отдельно разбираем runner-архитектуру: почему shared runners упираются в очередь уже на пятом параллельном job, и когда стоит переходить на Docker executor с изолированными контейнерами. Приводим замеры: на проекте с 1800 модулей переход на собственный runner сократил среднее время поставки с 22 до 9 минут.
Разбираем, как правильно настроить cache для node_modules и .m2, чтобы повторные сборки не качали зависимости заново. Приводим реальные тайминги до и после.
Показываем, как использовать rules и переменные, чтобы не плодить дублирующиеся jobs. Пример из реального проекта с 42 тестовыми окружениями.
Считаем экономическую модель: когда бесплатный shared runner начинает стоить дороже, чем свой Docker executor на двух vCPU. Таблица расчётов внутри.
Тесты в пайплайне — не формальность. Это единственный момент, когда вы знаете, что код ещё не сломал. Мы разбираем, как устроить этот момент так, чтобы он не съедал весь бюджет CI.
Первое правило, которое мы повторяем в каждом материале: не запускайте все тесты на каждый push. Разделяйте на smoke, unit и integration, и прогоняйте их в разных jobs с разной частотой. Smoke-набор из 48 тестов, который покрывает критический путь, должен завершаться за 90 секунд — это наш ориентир.
Второе правило: параллелизация не панацея. На проекте с 3200 integration-тестов мы разбили их на 8 shards с помощью sharding-библиотеки, но получили прирост лишь в 4.2 раза, а не в 8 — из-за contention на общей БД. Разбираем, как изолировать тестовые окружения через Docker volumes и временные инстансы Postgres.
Третье: тестовые артефакты. Скриншоты, логи, trace-файлы OpenTelemetry — всё это нужно сохранять в CI/CD Artifacts с TTL 14 дней. Без этого post-mortem превращается в гадание. Приводим пример из инцидента, когда trace-файл за 3 дня до того помог найти регрессию в 2 строки.
Пошаговый разбор: от выбора стратегии разбиения до настройки изолированных БД в Docker. Скриншоты дашборда и цифры по contention.
Как выбрать набор тестов, который реально ловит критические регрессии, но не тормозит разработку. Методика отбора и пример конфига.
Рассказываем, как сохранённый OpenTelemetry-трейс за 3 дня до того помог найти регрессию в 2 строки. Урок для всех, кто не хранит тестовые артефакты.
Пайплайн — это не линейка задач. Это граф зависимостей, который нужно проектировать так же осознанно, как микросервисы. Мы разбираем, как устроить поток от коммита до деплоя, чтобы он был быстрым, воспроизводимым и не ломался от одного упавшего сервиса.
Ключевая идея: разделяйте стадии по типу риска. Сборка и статический анализ — низкий риск, их можно гонять на каждый push. Интеграционные тесты — средний риск, их стоит запускать на merge-коммит. Деплой в стейджинг — высокий риск, и его нужно делать атомарным с возможностью отката за 30 секунд.
В наших статьях вы найдёте конкретные схемы: как выстроить trunk-based flow с feature-флагами вместо длинных feature-веток; как организовать blue-green деплой через ArgoCD без ручного переключения; и как настроить canary-релизы с автоматическим откатом при росте error rate выше 0.5%.
Отдельно разбираем архитектуру артефактов: почему хранить образы Docker в GitLab Container Registry и подписывать их cosign — это не «паранойя», а базовая гигиена. Приводим пример, когда несанкционированный образ в registry стал причиной инцидента на 4 часа.
Практический переход: от Git-flow к trunk-based за 6 недель. Примеры конфигов, метрики по времени до деплоя и что пошло не так на втором месяце.
Пошаговая настройка: Application-ресурс, синие/зелёные сервисы, HealthCheck и автоматический откат. Включая типичные ошибки в Helm-чартах.
Рассказываем про инцидент с несанкционированным образом и показываем, как настроить cosign + admission controller, чтобы поймать такое на этапе push.
Собираем лучшее из мира CI/CD и присылаем в четверг утром. Конкретные конфиги, реальные тайминги, без воды. Отписаться можно в один клик.
Основной фокус — GitLab CI, потому что он покрывает весь стек от репозитория до registry. Но мы также публикуем материалы по GitHub Actions, Jenkins и Argo Workflows. Каждый разбор опирается на реальный проект, а не на маркетинговые слайды.
Да, мы регулярно берём пайплайны читателей на разбор. Уберите секреты и приватные данные, приложите описание контекста (стек, размер команды, частота деплоев) — и мы разберём, где теряется время и что можно упростить.
Да, это отдельная под-рубрика в разделе «Архитектура пайплайнов». Разбираем ArgoCD, Helm, Kustomize, canary и blue-green стратегии. Каждый материал сопровождается рабочими манифестами и замерами времени отката.
В среднем — две статьи в неделю по этому разделу. Одна из них всегда практический гайд с конкретным конфигом, вторая — разбор или post-mortem. В редких случаях выходит сравнение инструментов или большой спецпроект на 20+ страниц.