Сфера деятельности: Разработка игр
Используемые продукты JetBrains: TeamCity
Число сотрудников: 500-1000
Страна: США
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 стандартизовано, команда использует типовые шаблоны проектов, поэтому даже не на своем проекте специалисты могут быстро разобраться с любыми вопросами.
Компания использует систему контроля версий Perforce и движок Unreal Engine для разработки игр. TeamCity взаимодействует со специально разработанными скриптами C# для Unreal Engine. Этот уровень позволяет подключить любые решения для непрерывной интеграции к проектам на Unity и Unreal Engine.
Кроме того, команда использует AWS для билд-машин и хранилище Artifactory. Для этого они пользуются плагином TeamCity JFrog.
У CI/CD-решения, которое в Gearbox использовали раньше, был ряд ограничений. Во-первых, оно плохо интегрировалось с Perforce. Кроме того, предыдущий CI/CD-инструмент не поддерживал персональные сборки, которые есть в TeamCity, и было сложно передавать информацию на следующие шаги сборки.
«Наша компания довольно долго пользовалась одним инструментом. Мы давно хотели его заменить, но не могли найти ничего подходящего. А потом коллеги, которые раньше работали в другой геймдев-компании, сказали: "А мы вот пользовались TeamCity". Мы стали разбираться и поняли, что TeamCity решает массу наших проблем»,
— Филлип Петерсон, старший релиз-инженер
У одного из решений, которое пробовали использовать в Gearbox, настройка связей между шагами сборки требовала больших усилий. Например, если на одном из шагов был создан артефакт, имя которого нужно было передать следующему заданию, настроить передачу этой информации было крайне сложно. Зато в TeamCity это не вызывает никаких затруднений.
Еще одна большая проблема, над которой билась команда, — передача результатов сборки на следующий шаг. TeamCity позволяет решить ее с помощью зависимостей.
От нового CI/CD-решения команде требовались в первую очередь две вещи. Первая — возможность быстрого внесения массовых изменений в разные проекты. Раньше для этого нужно было каждый проект начинать с нуля. По мере того как проектов становилось все больше, команда стала искать решение с шаблонами, которые позволяли бы копировать настройки проекта, менять имя и запускать проект.
Второе требование к новому CI/CD-инструменту — удобный интерфейс для администраторов и пользователей.
«У одного из решений был очень неудобный интерфейс. Пользователь CI/CD-инструмента должен чувствовать, что это надежная система, что она не сломается, когда в ней работаешь. По-моему, у TeamCity очень продуманный интерфейс. Открывая разные страницы, понимаешь, что все работает как надо»,
— Стив Фортье, ведущий релиз-инженер
Благодаря продуманному интерфейсу преимущества TeamCity совершенно очевидны. Когда команда убедилась, что все работает как задумано, достаточно было продемонстрировать новый инструмент остальным, чтобы убедить их перейти на него.
Еще один фактор, который в Gearbox учитывали при выборе нового CI/CD-решения, — управление доступом. Команде требовалась возможность редактирования доступа пользователей к отдельным проектам.
В TeamCity можно создавать иерархии: если кому-то предоставлен доступ к проекту, он автоматически получает доступ ко всем подпроектам. Это было очень важно для команды Gearbox.
Узнав о TeamCity, команда Gearbox решила попробовать локальную версию. Однако возможности TeamCity Cloud очень порадовали IT-отдел компании, поскольку все, что им нужно было сделать, — это настроить аутентификацию.
В TeamCity Cloud можно использовать как билд-агенты, размещенные в облаке JetBrains, так и автономные агенты. Команда Gearbox пользуется автономными агентами — это позволяет им полностью настроить окружение запуска сборок.
При переходе на TeamCity команда начала настраивать все проекты заново. Однако старые билд-скрипты изначально были написаны так, чтобы работать с любой CI-системой, поэтому даже при настройке с нуля по сути им нужно было просто скопировать команды из старой системы в новую.
После нескольких обсуждений того, как лучше организовать проекты, команда смогла перейти с предыдущего CI-решения на TeamCity всего за полтора месяца.
Сейчас у Gearbox 340 коммитеров и 138 проектов в TeamCity Cloud.
Команда использует агенты, размещенные в собственных AWS-аккаунтах. Кроме того, сотрудники используют облачные профили TeamCity. В зависимости от параметров сборки TeamCity автоматически выбирает один из инстансов команды: «base», «high», «mega» или «GPU».
В течение переходного периода команда Gearbox использовала тот же образ машины Amazon (Amazon Machine Image, AMI), в котором они запускали прежнее CI/CD-решение, просто рядом с ним был установлен TeamCity. В результате Gearbox нужно было поддерживать только один AMI, который использовали обе системы — и старая, и новая. Это сделало миграцию еще проще.
Gearbox широко использует цепочки сборки на протяжении всего процесса CI/CD. Сборка игры на Unreal Engine состоит из 5 этапов: компиляции, подготовки данных, подготовки файлов для тестирования, упаковки и публикации.
Если игру нужно выпустить меньше чем через 12 часов, а где-то в цепочке происходит заполнение тома, и процесс останавливается, невозможно увеличить объем тома и запустить процесс заново — на это просто нет времени.
С помощью TeamCity команда Gearbox смогла разнести все части по отдельным сборкам. В результате, когда в ходе сборки происходит заполнение тома и его надо расширять, сборка завершается неудачей, но команда быстро с этим справляется: достаточно перемонтировать нужный том и перезапустить процесс с того места, где он был прерван. Это возможно благодаря встроенной оптимизации цепочек сборок в TeamCity. В ее основе — повторное использование сборок за счет зависимостей снэпшотов.
В Gearbox процесс устроен так: после того как разработчики выполнили локальные тесты, в дело вступает TeamCity и централизованно запускает полный набор тестов. Кроме того, CI/CD-система может динамически управлять этими тестами на машинах разных типов, запустив столько машин, сколько нужно в конкретный момент. После выполнения тестов машины будут отключены для оптимизации использования ресурсов.
Одна из самых сложных проблем, которую удалось решить благодаря TeamCity, — запуск новых проектов. Во всех остальных решениях, с которыми пробовала работать компания, нужно было настраивать проект с нуля. Со временем проекты стали настолько отличаться друг от друга, что для каждого из них требовался свой специалист. В результате стало трудно передавать информацию между командами, в процессе разработки начали возникать узкие места, вырос риск ошибок и нестыковок.
С переходом на TeamCity все стало намного проще. Благодаря шаблонам удобно делиться ресурсами, и теперь достаточно изучить один проект, чтобы иметь возможность работать с любыми другими проектами компании. Команда стала продуктивнее и может сосредоточиться на эффективном развитии.
В CI-решении, которое команда Gearbox использовала раньше, каждая сборка запускала редактор, и это могло занимать до часа. Теперь этот процесс можно выделить в отдельный шаг, а затем использовать полученные результаты везде, где необходимо. Это значительно экономит ресурсы инстансов EC2, поскольку не нужно много раз компилировать одно и то же.
Команда высоко оценила возможности Kotlin с точки зрения конфигурирования проектов. Даже те, у кого было мало опыта с Kotlin, успешно освоились и быстро начали с ним работать. «Конечно, требуется обучение, но в целом отношение было положительным», — отметил Стив Фортье.
Сейчас, если нужно изменить что-то одно в конкретном проекте, команда делает это через интерфейс. Если нужно поменять конфигурацию сборки для нескольких проектов — используется Kotlin. Возможность такого гибкого гибридного подхода к конфигурациям проектов — еще одно преимущество TeamCity, с точки зрения команды Gearbox.
Gearbox планирует расширить использование TeamCity за счет внедрения персональных сборок, чтобы повысить надежность коммитов, а также за счет предоставления рабочих сборок для тестирования. Кроме того, команда хочет ускорить сборку, сократить цепочки сборок и минимизировать количество сбоев.
Команда следит за производительностью серверов, продолжительностью сборки и любыми сбоями, а также планирует добавить новые метрики, такие как размер артефакта и время ожидания в очереди. Они стремятся использовать как можно больше настраиваемых возможностей TeamCity, чтобы повысить эффективность непрерывной интеграции, сэкономить время и обеспечить надежность сборки.
Переход на TeamCity Cloud позволил Gearbox улучшить CI/CD-процессы сразу с нескольких точек зрения.
Кроме того, TeamCity позволяет экономить ресурсы инстансов EC2, поскольку благодаря зависимостям не нужно компилировать одно и то же несколько раз.
Юрий Труфанов, главный технический директор технологической платформы
Мы остановились на гибридном решении, включающем в себя TeamCity Cloud Profiles и AWS. Кроме того, у нас есть локальные компьютеры для билд-агентов. Такое сочетание позволяет нам проводить любое количество сборок в течение рабочего дня, а в остальное время гарантирует наличие минимально необходимого количества агентов. В результате мы можем выполнять любые операции в любом удобном месте.
Иван Бабенков, ведущий разработчик, Picnic
Нам было необходимо решение, которое покрывало бы все наши сценарии использования CI. Кроме того, нам нужны были автономные агенты, чтобы отслеживать, какое ПО у нас запущено и какие именно инструменты используются. Благодаря TeamCity Cloud с использованием автономных агентов мы получили индивидуальное решение. Его удобно использовать нашей команде, насчитывающей 300 разработчиков, и в результате наша производительность вышла на новый уровень.
Тадеас Криш, сооснователь и технический директор Brightify
Мы смогли значительно улучшить процесс код-ревью и настроить вебхуки Space для сборки каждой ветки, прошедшей ревью, в TeamCity и развертывания ее в тестовой среде для проверки перед объединением с целевой веткой. А еще с помощью Space легче следить за рабочим графиком коллег.