Arcadia CI

Язык буткемпа: Java
Технологии: ClickHouse, Spring, Temporal, YDB

Arcadia CI — высокоуровневая входная точка для всего, что связано с автоматизацией процесса разработки в монорепозитории Яндекса: сборка, тестирование и развёртывание.

Система запускает, следит за выполнением, собирает метрики и хранит результаты всех проверок всех пулл-реквестов, регулярных процессов и релизов, включая отведение веток, хотфиксы и откаты.

Мы предоставляем командам внутри Яндекса инструменты аналитики, поиска тестов, их метрики и историю выполнения, автоматические мьюты и механизмы аудита.

Через нашу систему каждый рабочий день проходит:

  • 1,3 миллиарда результатов сборок и тестов;
  • 240 тысяч пользовательских процессов;
  • 8 тысяч релизов.

Стек

Технология Комментарий
Java 21 (Spring) Основной язык программирования.
Lombok Больше сахара и меньше бойлерплейта.
**Temporal (внутри PostgreSQL)** Распределённая отказоустойчивая система выполнения кода.
YDB Основная база данных.
ClickHouse Для публичной статистики и метрик.

Команда

У нас небольшая распределённая мультифункциональная команда. Обитаем в Белграде, Москве и Питере. Нам помогает пара фронтенд-разработчиков и дизайнер. На встречах стараемся сидеть с включенными камерами.

Мы прислушиваемся друг к другу и ищем истину в диалоге, помогаем и открыты к конструктивной критике.

Переживаем за продукт всем сердцем — к работе подходим очень ответственно и не толерантны к проблемам, ничего не замалчиваем и не заметаем под ковёр.

Процесс разработки больше всего похож на Kanban.

Особенности

  • Сочетаем в себе big data, highload и сложный продукт. Соответствующий баланс присутствует и в задачах: есть и оптимизации, и рефакторинги, и custdev.
  • Почти никакой код не проходит мимо наших систем. Сами пользуемся ежедневно.
  • Самые продвинутые и требовательные разработчики Яндекса — наши ближайшие и ценнейшие пользователи. Они знают нас по именам. И мы их не подводим :)
  • Цели и задачи мы ставим себе сами, придумываем челленджи, ищем пути к совершенству.
  • Уделяем много внимания нашей внутренней пользовательской документации и гордимся ею — ежедневно в ней находят ответы около ста человек.

Что надо иметь в виду

  • Высокий порог входа и большой скоуп — каждый из нас и швец, и жнец, и на дуде игрец. Нужно быстро схватывать, понимать устройство всей экосистемы в целом, так как мы очень плотно работаем со смежными командами.
  • Как и в любом инфраструктурном продукте, разработка требует повышенного уровня продуманности, стабильности, надёжности и качества: архитектуры, кода, тестов и документации. У нас нет тестировщиков и документаторов — автор полностью отвечает за своё творение.
  • Мы исповедуем DevOps и у нас есть on-call дежурства: раз в неделю нужно следить за мониторингами и курировать редкие инциденты. Ночи и выходные почти всегда спокойные.
  • Также мы сами себе техподдержка и помогаем пользователям — нашим коллегам. Нужно уметь работать с людьми, слушать их боль и выявлять сценарии, нельзя бездумно бросаться делать новые фичи.
  • В зону нашей ответственности не входят непосредственно среды исполнения и кластер распределённой сборки — этим занимаются более низкоуровневые системы: Distbuild, Tasklets и Sandbox.

Вызовы

  • Наша основная задача — надёжное масштабирование под растущую нагрузку. Множество новых команд подключаются к нашим системам и рассчитывают на нас, а любой простой обходится компании очень дорого.
  • Параллельно нужно реализовывать новые возможности по запросам пользователей с оглядкой на внешних конкурентов (TeamCity, GitHub Actions, и т. п.), соблюдая хрупкий баланс между гибкостью и захламлённостью.
  • Также мы работаем над инструментами, которые помогут командам в монорепозитории массово улучшать качество своих тестов и двигать разработку в направлении green trunk.
  • При этом важно не только не повышать, но и снижать кривую обучения — делать сервис удобным, прозрачным и понятным «‎из коробки», а на возникающие вопросы иметь исчерпывающую документацию и готовые продуманные рецепты под основные сценарии.

Дополнительные материалы

Страница запуска

Страница запуска

Страница релиза

Страница релиза

Статус выполнения тестов

Статус выполнения тестов

Следующая