Инженеры выпускают код быстрее, поэтому мы сделали наш CI автономным, чтобы не отставать

Фото: Sleeba Thomas (Unsplash) — https://unsplash.com/photos/a-large-cargo-ship-in-a-body-of-water-zD_8rQ4Z6Jk?utm_source=dev48&utm_medium=referral

Источник: Posthog•

Инженеры выпускают код быстрее, поэтому мы сделали наш CI автономным, чтобы не отставать

PostHog выпускает код с огромной скоростью, и за последние месяцы этот темп только вырос благодаря внедрению LLM. Мы перешли от слияния 1354 PR в октябре…

PostHog выпускает код с огромной скоростью, и за последние месяцы этот темп только вырос благодаря внедрению LLM. Мы перешли от слияния 1354 PR в октябре 2025 года к более чем 6500 PR в октябре 2026 года на данный момент (рост более чем на 380%).

В задачу команды Developer Experience входит обеспечение максимально быстрого выпуска кода инженерами PostHog при одновременном балансировании качества кода и стабильности CI. На самом деле, у нас есть цель сделать создание 10 000 пулл-реквестов в месяц простым делом. Тем не менее, успевать за обслуживанием CI только за счет ручного наблюдения и реагирования сложно.

Поэтому мы вдохновились тем, как процессы выстроены в других отделах PostHog. В этом октябре 11% объединенных PR были автономными — это значит, что PostHog открыл их самостоятельно после того, как скаут (запланированный агент, который исследует данные вашего продукта) нашел то, с чем стоит поработать.

Мы увидели это и решили ответить тем же. Те же автономные агенты, которые увеличивают наш объем PR, могут помочь нам справляться с обслуживанием CI. Вот как мы всё это настроили:

Мы гордимся тем, что являемся проектом с открытым исходным кодом и используем GitHub для размещения нашего монорепозитория. Это означает, что большинство связанных с CI данных хранится на GitHub, и их можно оттуда запрашивать. Но частые запросы к этим данным приводят к исчерпанию лимитов (rate limits), да и в любом случае было бы крайне неэффективно постоянно запрашивать у GitHub в основном неизменяемые данные (например, объединенные PR и завершенные запуски воркфлоу за прошлую неделю). Прежде всего, PostHog — это продуктовая дата-компания! Поэтому мы решили перенести данные CI/CD в собственный продукт и посмотреть, какие функции и идеи мы сможем оттуда извлечь.

Для этого мы используем наш складской источник (warehouse source) GitHub, который непрерывно синхронизирует данные репозитория. В частности, нас интересовали данные о пулл-реквестах, запусках воркфлоу и задачах воркфлоу (workflow jobs).

Изначально мы рассматривали существующие сервисы для анализа данных CI и помощи команде DevEx в лучшем понимании поведения разработчиков и их проблем, но обнаружили, что большинство этих сервисов созданы вокруг измерения производительности инженерных команд. Нас это не совсем интересовало.

Вместо этого мы создали собственный внутренний продукт под названием Engineering Analytics. Его основное видение таково:

Это продуктовая аналитика, но «пользователи» — это пулл-реквесты, а «события» — то, что с ними происходит на пути к продакшену.

Это продуктовая аналитика, но «пользователи» — это пулл-реквесты, а «события» — то, что с ними происходит на пути к продакшену.

При создании этого инструмента мы воспользовались множеством готовых примитивов анализа данных, логики и визуализации, которые уже были разработаны для других продуктов PostHog. Мы опирались на их лучшие практики, просто добавив данные CI/CD и требования нашего собственного продукта.

Под капотом Engineering Analytics представляет собой тщательно подобранное представление по тем областям, которые волнуют команду DevEx: наша система CI, очередь слияния (merge queue) и тесты.

Помимо того, что это удобное место для инженеров, где можно быстро получить общее представление о состоянии CI, мы с самого начала включили поддержку MCP, чтобы наши агенты могли запрашивать конкретные данные при расследовании проблем с CI или в поиске возможностей для оптимизации. Таким образом, агентам не нужно полагаться на GitHub API, и мы можем лучше контролировать данные и агентские сценарии. Это также позволяет нам создавать и использовать специальные skills инструменты, подобные investigating-ci-failures, которые помогают агентам находить коммит, сломавший определенную задачу CI, а затем проверять, исправил ли ее более поздний коммит.

Engineering Analytics интегрируется с возможностями автономности PostHog и генерирует собственные «сигналы» (выводы вместе с подтверждающими данными), которые агенты затем исследуют автономно и потенциально пытаются исправить путем открытия пулл-реквестов.

Эти сигналы генерируются с помощью трех детерминированных детекторов, которые работают с полученными данными GitHub (каждый представляет собой уже готовый запрос):

  • Нестабильная проверка (Flaky check): задача, которая завершается с ошибкой, а затем успешно проходит при перезапуске того же коммита.

Нестабильная проверка (Flaky check): задача, которая завершается с ошибкой, а затем успешно проходит при перезапуске того же коммита.

  • Сломанная ветка по умолчанию: воркфлоу, который продолжает давать сбои в нашей основной ветке.

Сломанная ветка по умолчанию: воркфлоу, который продолжает давать сбои в нашей основной ветке.

  • Регрессия длительности: воркфлоу, который стал работать медленнее, чем в предыдущем периоде.

Регрессия длительности: воркфлоу, который стал работать медленнее, чем в предыдущем периоде.

Эти детекторы привели к реальным исправлениям, таким как:

Благодаря Engineering Analytics в сочетании с автономностью мы выпустили с тех пор более десятка связанных улучшений.

Поиск правильного соотношения сигнала и шума требует определенных экспериментов и тонкой настройки промптов. Для нас наличие детерминированных детекторов помогло удерживать агентов, работающих на сигналах, в рамках данных, которые, как мы знаем, важны для нас и которые мы ожидаем постоянно обрабатывать.

Помимо полезности подхода с приоритетом MCP, интерфейс Engineering Analytics завоевал популярность внутри команды DevEx, в первую очередь как универсальное решение («one-stop shop»), где мы можем получить полезный обзор всех контролируемых нами областей одним взглядом. Из-за этого мы работаем над оптимизацией производительности продукта путем перехода от нерегулярных (ad-hoc) запросов к предварительно вычисленным таблицам и оптимизации запросов везде, где это возможно. В качестве приятного бонуса от того, что UI и MCP используют общий слой запросов, оптимизации здесь также идут на пользу производительности агентов, обращающихся к этим инструментам.

Наконец, как только мы загрузили данные GitHub и связанные с ними данные CI, команда придумала и другие способы создания полезных функций на их основе. Например, недавно мы выпустили функцию «CI Explorer», которая визуализирует наши CI-воркфлоу в виде графиков. Это гораздо более интуитивно понятно (не говоря уже о скорости), чем щелкать по статичному интерфейсу GitHub.

Мы продолжаем формировать Engineering Analytics как внутренний бета-продукт, но вы уже сегодня можете создать что-то подобное, объединив источники хранилища (warehouse sources) с нашим MCP и скаутами. Для этого:

  • Загрузите данные CI в хранилище. Подключите источник GitHub и синхронизируйте таблицы пулл-реквестов, запусков воркфлоу и задач воркфлоу. Добавьте вебхуки, чтобы поддерживать запуски и задачи в актуальном состоянии в реальном времени.

Загрузите данные CI в хранилище. Подключите источник GitHub и синхронизируйте таблицы пулл-реквестов, запусков воркфлоу и задач воркфлоу. Добавьте вебхуки, чтобы поддерживать запуски и задачи в актуальном состоянии в реальном времени.

  • Позвольте вашему агенту делать запросы к ним. Подключите своего агента (или агентов) к MCP PostHog и попросите его найти что-то конкретное, например, какой CI-воркфлоу замедлился на этой неделе.

Позвольте вашему агенту делать запросы к ним. Подключите своего агента (или агентов) к MCP PostHog и попросите его найти что-то конкретное, например, какой CI-воркфлоу замедлился на этой неделе.

  • Сделайте систему автономной. Настройте автономный режим и подключите приложение GitHub, чтобы агенты могли открывать пулл-реквесты от вашего имени. Затем попробуйте написать скаут, который следит за вашими недавно синхронизированными таблицами. В качестве отправной точки рассмотрите что-то вроде наших детерминированных детекторов, но в документации есть и другие идеи для пользовательских скаутов.

Сделайте систему автономной. Настройте автономный режим и подключите приложение GitHub, чтобы агенты могли открывать пулл-реквесты от вашего имени. Затем попробуйте написать скаут, который следит за вашими недавно синхронизированными таблицами. В качестве отправной точки рассмотрите что-то вроде наших детерминированных детекторов, но в документации есть и другие идеи для пользовательских скаутов.

Ваша CI/CD-платформа уже собирает все эти данные. Почему бы не заставить их работать на вас!

О чём эта статья

Ещё в разделе «Маркетинг и реклама»

Все →

Ещё от Posthog