Монорепозиторий: один pipeline, много пакетов — как читать CI-лог
Как разбирать CI-логи в monorepo: affected packages, workspace paths, matrix jobs, cache noise и почему важно понять не только что упало, но и какой пакет сломался.
В монорепозитории один pipeline может проверять десятки пакетов: frontend, backend, shared UI, SDK, infra modules. Когда он падает, фраза «CI красный» почти ничего не говорит. Нужно понять какой пакет, какой шаг и какой владелец.
Эта статья для команд, которые уже используют workspaces, Nx, Turborepo, pnpm, Bazel или просто большой репозиторий с несколькими сервисами.
Коротко: что усложняет monorepo
Affected packages — это набор пакетов, которых касается изменение. Workspace path — путь вроде packages/api или apps/web. Matrix job — один job, размноженный по версиям/пакетам/окружениям.
В monorepo лог часто шумит кэшем и параллельными задачами. Первичный вопрос: падение локализовано или ломает общий слой?
Что искать в логе
- путь пакета:
packages/billing,apps/web; - имя workspace/package;
- task name:
test,build,lint,typecheck; - matrix value: node version, OS, package name;
- cache hit/miss;
- общий файл: lockfile, tsconfig, Dockerfile, shared lib.
Типичные сценарии
1. Упал один leaf package. Обычно это изменение конкретной команды; RCA должен назвать путь и test case.
2. Упал shared package. Ошибка разъезжается по нескольким сервисам, но причина одна.
3. Кэш скрыл проблему. На одном runner всё зелёное, на другом dependency переустановилась и сборка упала.
4. Matrix умножила лог. Красная одна ячейка, но UI показывает общий failure.
Как не утонуть
Сначала найдите самый первый failed task, а не последний traceback. Затем сопоставьте путь с владельцем. Если лог смешанный, фильтруйте по workspace prefix или task id.
Где тут Exlogare
Для monorepo хороший RCA должен говорить не «pipeline failed», а «упал packages/api на typecheck после изменения shared type». Exlogare получает лог и возвращает короткое объяснение в MR/PR. Для подключения используйте generic ingest, GitLab CI или GitHub Actions.
Читайте также
- Статусы в GitLab, GitHub и Bitbucket: мини-словарь для DevOps
- GitHub Actions reusable workflows: кто виноват — caller или workflow_call
Чеклист
- Найдите workspace/package.
- Найдите первый failed task.
- Отделите shared layer от leaf package.
- Проверьте cache hit/miss.
- Смотрите конкретную matrix cell.
- В RCA указывайте пакет и владельца, если это возможно.