Сфера деятельности: Разработка игр

Используемые продукты JetBrains: TeamCity

Число сотрудников: 500-1000

Страна: США

Как Gearbox оптимизирует CI/CD-пайплайн с помощью TeamCity

Gearbox Entertainment Company — американская компания, занимающаяся разработкой компьютерных игр и трансмедийных проектов, обладатель множества отраслевых наград. Главный офис компании находится в г. Фриско (шт. Техас). За три десятилетия Gearbox Entertainment создала несколько культовых игр, персонажей и произведений, в том числе «Borderlands».

О компании

Gearbox — американская компания-разработчик компьютерных игр, основанная в 1999 году. Главный офис компании находится в г. Фриско (шт. Техас). Gearbox создала такие легендарные игры, как Half-Life, Brothers in Arms и Borderlands.

Мы обсудили с ведущим релиз-инженером Gearbox Стивом Фортье и старшим релиз-инженером Филлипом Петерсоном, как их компании удалось стандартизировать и оптимизировать CI/CD-пайплайн с помощью JetBrains TeamCity.

О команде

Стив и Филлип входят в основную команду Gearbox, отвечающую за релизы. Это распределенная команда, участники которой работают в Квебек-Сити, Монреале и Фриско. В их задачи входит обслуживание всех проектов компании, то есть настройка автоматизации для их нужд. С появлением нового проекта команда сразу создает репозиторий в Perforce и привязывает к нему проект в TeamCity.

Обычно команда назначает одного сотрудника, ответственного за каждый проект. Каждый релиз-инженер одновременно входит и в команду по выпуску, и в команду игрового проекта. Благодаря этому команда точно знает, какая автоматизация требуется для каждого проекта.

Кроме того, релиз-инженеры могут делиться информацией о лучших практиках работы с TeamCity и при необходимости подключаться к другим проектам. Использование CI/CD стандартизовано, команда использует типовые шаблоны проектов, поэтому даже не на своем проекте специалисты могут быстро разобраться с любыми вопросами.

Стек технологий Gearbox

Компания использует систему контроля версий Perforce и движок Unreal Engine для разработки игр. TeamCity взаимодействует со специально разработанными скриптами C# для Unreal Engine. Этот уровень позволяет подключить любые решения для непрерывной интеграции к проектам на Unity и Unreal Engine.

Кроме того, команда использует AWS для билд-машин и хранилище Artifactory. Для этого они пользуются плагином TeamCity JFrog.


Почему потребовалось новое CI/CD-решение

У CI/CD-решения, которое в Gearbox использовали раньше, был ряд ограничений. Во-первых, оно плохо интегрировалось с Perforce. Кроме того, предыдущий CI/CD-инструмент не поддерживал персональные сборки, которые есть в TeamCity, и было сложно передавать информацию на следующие шаги сборки.

«Наша компания довольно долго пользовалась одним инструментом. Мы давно хотели его заменить, но не могли найти ничего подходящего. А потом коллеги, которые раньше работали в другой геймдев-компании, сказали: "А мы вот пользовались TeamCity". Мы стали разбираться и поняли, что TeamCity решает массу наших проблем»,

— Филлип Петерсон, старший релиз-инженер

TeamCity упрощает создание связей между шагами сборки

У одного из решений, которое пробовали использовать в Gearbox, настройка связей между шагами сборки требовала больших усилий. Например, если на одном из шагов был создан артефакт, имя которого нужно было передать следующему заданию, настроить передачу этой информации было крайне сложно. Зато в TeamCity это не вызывает никаких затруднений.

Еще одна большая проблема, над которой билась команда, — передача результатов сборки на следующий шаг. TeamCity позволяет решить ее с помощью зависимостей.


Критерии выбора нового CI/CD-решения

Внесение массовых изменений в разные проекты

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

Удобный интерфейс

Второе требование к новому CI/CD-инструменту — удобный интерфейс для администраторов и пользователей.

«У одного из решений был очень неудобный интерфейс. Пользователь CI/CD-инструмента должен чувствовать, что это надежная система, что она не сломается, когда в ней работаешь. По-моему, у TeamCity очень продуманный интерфейс. Открывая разные страницы, понимаешь, что все работает как надо»,

— Стив Фортье, ведущий релиз-инженер

Пример интерфейса TeamCity
Пример интерфейса TeamCity

Благодаря продуманному интерфейсу преимущества TeamCity совершенно очевидны. Когда команда убедилась, что все работает как задумано, достаточно было продемонстрировать новый инструмент остальным, чтобы убедить их перейти на него.

Управление доступом

Еще один фактор, который в Gearbox учитывали при выборе нового CI/CD-решения, — управление доступом. Команде требовалась возможность редактирования доступа пользователей к отдельным проектам.

В TeamCity можно создавать иерархии: если кому-то предоставлен доступ к проекту, он автоматически получает доступ ко всем подпроектам. Это было очень важно для команды Gearbox.

Выбор между TeamCity Cloud и TeamCity On-Premises

Узнав о TeamCity, команда Gearbox решила попробовать локальную версию. Однако возможности TeamCity Cloud очень порадовали IT-отдел компании, поскольку все, что им нужно было сделать, — это настроить аутентификацию.

В TeamCity Cloud можно использовать как билд-агенты, размещенные в облаке JetBrains, так и автономные агенты. Команда Gearbox пользуется автономными агентами — это позволяет им полностью настроить окружение запуска сборок.

TeamCity Cloud с локальными билд-агентами
TeamCity Cloud с локальными билд-агентами

Процесс перехода

При переходе на TeamCity команда начала настраивать все проекты заново. Однако старые билд-скрипты изначально были написаны так, чтобы работать с любой CI-системой, поэтому даже при настройке с нуля по сути им нужно было просто скопировать команды из старой системы в новую.

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


Метрики CI/CD

Сейчас у Gearbox 340 коммитеров и 138 проектов в TeamCity Cloud.

Команда использует агенты, размещенные в собственных AWS-аккаунтах. Кроме того, сотрудники используют облачные профили TeamCity. В зависимости от параметров сборки TeamCity автоматически выбирает один из инстансов команды: «base», «high», «mega» или «GPU».

В течение переходного периода команда Gearbox использовала тот же образ машины Amazon (Amazon Machine Image, AMI), в котором они запускали прежнее CI/CD-решение, просто рядом с ним был установлен TeamCity. В результате Gearbox нужно было поддерживать только один AMI, который использовали обе системы — и старая, и новая. Это сделало миграцию еще проще.


Цепочки сборок в TeamCity

Gearbox широко использует цепочки сборки на протяжении всего процесса CI/CD. Сборка игры на Unreal Engine состоит из 5 этапов: компиляции, подготовки данных, подготовки файлов для тестирования, упаковки и публикации.

Пример цепочки сборки в Gearbox
Пример цепочки сборки в Gearbox

Если игру нужно выпустить меньше чем через 12 часов, а где-то в цепочке происходит заполнение тома, и процесс останавливается, невозможно увеличить объем тома и запустить процесс заново — на это просто нет времени.

С помощью TeamCity команда Gearbox смогла разнести все части по отдельным сборкам. В результате, когда в ходе сборки происходит заполнение тома и его надо расширять, сборка завершается неудачей, но команда быстро с этим справляется: достаточно перемонтировать нужный том и перезапустить процесс с того места, где он был прерван. Это возможно благодаря встроенной оптимизации цепочек сборок в TeamCity. В ее основе — повторное использование сборок за счет зависимостей снэпшотов.

Тестирование в Gearbox: от локального к централизованному с динамической оркестрацией

В Gearbox процесс устроен так: после того как разработчики выполнили локальные тесты, в дело вступает TeamCity и централизованно запускает полный набор тестов. Кроме того, CI/CD-система может динамически управлять этими тестами на машинах разных типов, запустив столько машин, сколько нужно в конкретный момент. После выполнения тестов машины будут отключены для оптимизации использования ресурсов.


Оптимизация настройки проектов и совместного использования ресурсов с помощью TeamCity

Делиться знаниями стало проще

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

Повышение продуктивности

С переходом на TeamCity все стало намного проще. Благодаря шаблонам удобно делиться ресурсами, и теперь достаточно изучить один проект, чтобы иметь возможность работать с любыми другими проектами компании. Команда стала продуктивнее и может сосредоточиться на эффективном развитии.

Значительная экономия ресурсов инстансов EC2

В CI-решении, которое команда Gearbox использовала раньше, каждая сборка запускала редактор, и это могло занимать до часа. Теперь этот процесс можно выделить в отдельный шаг, а затем использовать полученные результаты везде, где необходимо. Это значительно экономит ресурсы инстансов EC2, поскольку не нужно много раз компилировать одно и то же.

Конфигурация как код

Команда высоко оценила возможности Kotlin с точки зрения конфигурирования проектов. Даже те, у кого было мало опыта с Kotlin, успешно освоились и быстро начали с ним работать. «Конечно, требуется обучение, но в целом отношение было положительным», — отметил Стив Фортье.

Сейчас, если нужно изменить что-то одно в конкретном проекте, команда делает это через интерфейс. Если нужно поменять конфигурацию сборки для нескольких проектов — используется Kotlin. Возможность такого гибкого гибридного подхода к конфигурациям проектов — еще одно преимущество TeamCity, с точки зрения команды Gearbox.


Планы на будущее

Gearbox планирует расширить использование TeamCity за счет внедрения персональных сборок, чтобы повысить надежность коммитов, а также за счет предоставления рабочих сборок для тестирования. Кроме того, команда хочет ускорить сборку, сократить цепочки сборок и минимизировать количество сбоев.

Команда следит за производительностью серверов, продолжительностью сборки и любыми сбоями, а также планирует добавить новые метрики, такие как размер артефакта и время ожидания в очереди. Они стремятся использовать как можно больше настраиваемых возможностей TeamCity, чтобы повысить эффективность непрерывной интеграции, сэкономить время и обеспечить надежность сборки.


Заключение

Переход на TeamCity Cloud позволил Gearbox улучшить CI/CD-процессы сразу с нескольких точек зрения.

  • Простота внедрения позволила команде перейти с прежнего CI-решения на TeamCity всего за 6 недель.
  • Интеграция между TeamCity и Perforce помогла оптимизировать CI/CD-пайплайн в целом и не тратить время на поиск обходных путей.
  • Используя шаблоны проектов TeamCity, команда стандартизировала запуск новых проектов и тратит на это гораздо меньше времени и сил.
  • Благодаря облачному решению и удобному интерфейсу TeamCity, команде удалось значительно упростить обслуживание проектов.

Кроме того, TeamCity позволяет экономить ресурсы инстансов EC2, поскольку благодаря зависимостям не нужно компилировать одно и то же несколько раз.

Похожие истории клиентов

Playrix

Юрий Труфанов, главный технический директор технологической платформы

Мы остановились на гибридном решении, включающем в себя TeamCity Cloud Profiles и AWS. Кроме того, у нас есть локальные компьютеры для билд-агентов. Такое сочетание позволяет нам проводить любое количество сборок в течение рабочего дня, а в остальное время гарантирует наличие минимально необходимого количества агентов. В результате мы можем выполнять любые операции в любом удобном месте.

Picnic

Иван Бабенков, ведущий разработчик, Picnic

Нам было необходимо решение, которое покрывало бы все наши сценарии использования CI. Кроме того, нам нужны были автономные агенты, чтобы отслеживать, какое ПО у нас запущено и какие именно инструменты используются. Благодаря TeamCity Cloud с использованием автономных агентов мы получили индивидуальное решение. Его удобно использовать нашей команде, насчитывающей 300 разработчиков, и в результате наша производительность вышла на новый уровень.

Brightify

Тадеас Криш, сооснователь и технический директор Brightify

Мы смогли значительно улучшить процесс код-ревью и настроить вебхуки Space для сборки каждой ветки, прошедшей ревью, в TeamCity и развертывания ее в тестовой среде для проверки перед объединением с целевой веткой. А еще с помощью Space легче следить за рабочим графиком коллег.

Другие истории клиентов