Site icon AppTractor

Как мы ускорили сборки для Android и iOS на 50%

Представьте себе, что вы ждете каждой проверки кода до и после слияния более 50 минут. Звучит мучительно, верно? А теперь представьте, что вы проходите через эту каторгу 200 с лишним раз в неделю. Такова была наша реальность, пока мы, команда Test and Release Infrastructure (TRI), не решили, что хватит.

Переходим к сегодняшнему дню. Эти 50-минутные ожидания исчезли. Время сборки Android и iOS теперь составляет менее 20 минут. Вот подробная информация о том, как мы добились этого волшебства — да, это потребовало веселых экспериментов и немного пота (но, к счастью, без слез).

Что сработало (так называемый секретный соус)

1. Новые, более лучшие машины

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

И да, мы смирились с немного более высокими затратами. Новые машины стоят дороже, но благодаря более быстрой сборке они стоят каждого пенни.

2. Больше распараллеливания, меньше «узких мест».

Конвейеры CI похожи на переполненные перекрестки. Слишком много всего происходит в одном месте? Затык и пробка. Мы перестроили наши конвейеры, чтобы задачи двигались плавно:

 3. Кэширование — король

Зачем изобретать колесо — или, в данном случае, заново собирать неизменный код?

4. Обновления цепочки инструментов (они же «весенняя чистка»)

Иногда все, что вам нужно, — это обновление. Мы попрощались с KAPT (обработка аннотаций Kotlin) и приняли KSP, который быстрее и изящнее. Вместе с улучшением Kotlin это сократило время сборки Android еще на 30%.

Что не сработало (но попробовать стоило)

XCRemoteCache не помог

Мы возлагали большие надежды на XCRemoteCache, инструмент для удаленного кэширования iOS. Но после нескольких месяцев головной боли из-за пропусков кэша и загадочных сбоев в сборке мы были вынуждены отказаться от него. Извлеченный урок? Не каждый инструмент подходит для любой системы. Bazel — следующий в нашем плане.

Результаты: цифры и настроения

Основные выводы (что мы узнали)

  1. Маленькие победы имеют значение: Даже сокращение времени CI на несколько секунд дает большую разницу на сотнях PR. Разработчики замечают и ценят такие изменения.
  2. Скорость + стабильность = счастливые разработчики: Медленные, глючные сборки могут снизить производительность. Исправление ошибок и добавление логики повторных попыток позволило сделать работу плавной, быстрой и без разочарований.
  3. Сокращение отходов, ответственно: Новые машины означают рост затрат, но более разумное распределение ресурсов (привет, план экономии и группы автомасштабирования EC2!) позволяет держать ситуацию под контролем.

Итог

Улучшение времени сборки — это не просто улучшение CI, это создание лучшего опыта для разработчиков. А когда ваши разработчики счастливы, выигрывают все.

Если вы хотите работать в компании, которая ценит и оптимизирует инженерную простоту и превосходство, мы принимаем вас на работу!

Источник

Exit mobile version