Industria: Desarrollo de juegos
Productos de JetBrains utilizados: TeamCity
Tamaño de la organización: 500-1000
País: Estados Unidos
Gearbox Entertainment Company es una galardonada empresa de entretenimiento interactivo y una fuerza transmedia en expansión con sede en Frisco, Texas. Durante las últimas 3 décadas, Gearbox Entertainment ha desarrollado y publicado algunas de las franquicias, personajes y experiencias más memorables e icónicas de la historia de los videojuegos, como la serie de juegos Borderlands, entre muchos otros.
Gearbox es una empresa estadounidense de videojuegos con sede en Frisco, Texas, cerca de Dallas. Fundada en 1999, Gearbox ha producido algunos de los videojuegos más emblemáticos de la historia, como Half-Life, Brothers in Arms y Borderlands.
Nos sentamos con Steve Fortier, ingeniero principal de versiones de Gearbox, y Phillip Peterson, ingeniero sénior de versiones, para hablar de cómo la compañía fue capaz de estandarizar y mejorar sus procesos de CI/CD con la ayuda de JetBrains TeamCity.
Steve y Phillip forman parte del equipo central de ingeniería de versiones de Gearbox. El equipo está repartido entre Quebec, Montreal y Frisco, y se encarga de dar servicio a todos los proyectos de la empresa, configurando la automatización para satisfacer las necesidades de cada uno. Cada vez que se inicia un nuevo proyecto, el equipo crea inmediatamente un depósito en Perforce y se asegura de que haya un proyecto en TeamCity vinculado a él.
El equipo trata de dedicar a una persona por proyecto. Todos y cada uno de los ingenieros de versiones forman parte tanto del equipo de versiones como de un proyecto de juego. Esto permite al equipo responder a las necesidades de automatización de cada proyecto.
También permite a los ingenieros de versiones compartir conocimientos sobre las mejores prácticas de TeamCity y saltar si otro proyecto necesita ayuda. Gracias a las prácticas estandarizadas de CI/CD y a las plantillas de proyecto reutilizables, pueden reaccionar rápidamente ante cualquier problema.
El equipo trabaja con Perforce como sistema de control de versiones y Unreal como motor de juego. Han creado scripts en C# que se asientan sobre Unreal y con los que interactúa TeamCity. Esta capa es independiente de CI y les permite trabajar con proyectos de Unity y Unreal.
El equipo también utiliza AWS para máquinas de compilación y almacenamiento a través de Artifactory, para lo que utiliza el complemento TeamCity JFrog.
La solución anterior de CI/CD que utilizaba Gearbox tenía algunas limitaciones. En concreto, la solución estaba mal integrada con Perforce. La herramienta de CI/CD que utilizaba el equipo tampoco ofrecía compilaciones personales, que sí están disponibles en TeamCity, y pasar información entre los pasos de compilación resultaba todo un reto.
«Teníamos un producto que habíamos utilizado internamente durante mucho tiempo. Intentamos cambiar a otro producto de la competencia, pero ninguna de las dos opciones funcionó. Así que unos colegas nuestros que venían de otra empresa de juegos nos dijeron: "Usábamos una cosa llamada TeamCity". Lo investigamos y nos dimos cuenta de que TeamCity resolvía muchos de nuestros problemas».
— Phillip Peterson, ingeniero sénior de versiones
En una de las opciones de la competencia que Gearbox estaba utilizando, el proceso de establecer una conexión entre dos pasos de compilación era bastante engorroso. Por ejemplo, tenían un paso de compilación que produciría un artefacto. Entonces pasaban el nombre de ese artefacto a un trabajo posterior. Era una pesadilla conseguir que esa conversación entre dos etapas de compilación se pusiera en marcha. En cambio, esto parecía extremadamente fácil en TeamCity.
Otro aspecto con el que el equipo estaba luchando era pasar resultados de compilación entre pasos de compilación, y TeamCity les permitió conseguirlo con una dependencia.
En una nueva solución de CI/CD, el equipo buscaba dos características principales. Una de ellas era la posibilidad de aplicar cambios masivos en todos los proyectos con facilidad. Antes, tenían que empezar cada proyecto desde cero. A medida que crecía el número de proyectos, el equipo empezó a buscar plantillas que les permitieran copiar y pegar la configuración del proyecto, cambiarle el nombre y ejecutarlo.
El segundo requisito era una interfaz de usuario amigable que facilitara el trabajo de los usuarios finales y los administradores con la nueva herramienta de CI/CD.
«Uno de los competidores tenía una interfaz de usuario muy poco práctica. La sensación que debe tener un usuario cuando entra en un sistema de CI/CD es que es muy robusto, que no se vendrá abajo cuando intente hacer algo en él. Creo que TeamCity tiene una interfaz de usuario muy bien pulida. Cuando navegas por ella confías en que es un sistema que funciona bien».
— Steve Fortier, ingeniero principal de versiones
La pulida interfaz de usuario de TeamCity facilitó su venta. Una vez que el equipo demostró que el concepto funcionaría, con solo mostrarlo a los usuarios les convenció rápidamente para cambiar a la nueva solución de CI/CD.
Otro factor en la elección de Gearbox de una nueva solución de CI/CD fue la gestión de accesos y su funcionamiento en TeamCity. El equipo buscaba una forma de editar el acceso de los usuarios por proyecto.
En TeamCity, puede crear jerarquías en las que las personas tengan acceso a un proyecto y luego puedan acceder a todos sus subproyectos. Esto marcó una gran diferencia para Gearbox.
Cuando el equipo conoció TeamCity, probó inicialmente la versión local. Sin embargo, la opción de elegir TeamCity Cloud hizo muy feliz al departamento informático de Gearbox, sabiendo que lo único que tenían que hacer era configurar la autenticación. Además, la transición fue mucho más rápida de lo que habían calculado si la hubieran instalado in situ.
Los usuarios de TeamCity Cloud pueden escoger entre agentes de compilación alojados en JetBrains o autoalojados. El equipo de Gearbox utiliza agentes autoalojados, lo que les permite personalizar por completo el entorno en el que ejecutan sus compilaciones.
Al pasar a TeamCity, el equipo comenzó a configurar todos sus proyectos desde cero. Sin embargo, habían hecho deliberadamente que sus antiguos scripts de compilación fueran independientes del sistema de CI. Esto significaba que, aunque empezaron configurando muchos proyectos nuevos en TeamCity, básicamente estaban copiando y pegando en ellos comandos existentes del sistema antiguo.
Con un par de talleres para debatir cómo organizar los proyectos, el equipo fue capaz de cambiar de la antigua solución de CI a TeamCity en solo 6 semanas.
Actualmente, Gearbox cuenta con 340 autores y 138 proyectos en TeamCity Cloud.
El equipo emplea agentes alojados en sus propias cuentas de AWS. También hacen uso de los perfiles en la nube de TeamCity. En función de las necesidades de una compilación, TeamCity selecciona automáticamente entre las instancias «base», «high», «mega» o «GPU» que utiliza el equipo.
Durante el período de transición, Gearbox tomó la Amazon Machine Image (AMI) que estaban usando para su anterior solución CI/CD e instaló TeamCity justo al lado. De este modo, Gearbox solo tenía que mantener una única AMI, ya que esta misma era utilizada tanto por el sistema antiguo como por el nuevo. Esto facilitó aún más el proceso de migración.
Gearbox utiliza cadenas de compilación en gran medida a través de su proceso de CI/CD. El proceso de Unreal pasa por 5 etapas: compilación, elaboración, almacenamiento provisional, empaquetado y publicación.
Si un juego tiene que publicarse en menos de 12 horas, y en algún punto de esa cadena un volumen se llena y detiene el proceso, es imposible ampliar el volumen y volver a empezar. Sencillamente, no hay tiempo suficiente para hacerlo.
Con la ayuda de TeamCity, el equipo de Gearbox pudo dividir cada una de esas piezas en su propia compilación. De este modo, si el volumen se llena y hay que ampliarlo durante el proceso de compilación, la compilación falla, pero el equipo puede solucionarlo rápidamente. Pueden reiniciar el proceso donde lo dejaron, volver a montar ese volumen persistente y continuar desde donde estaba. Esto es posible gracias a las optimizaciones integradas en la cadena de compilación de TeamCity, que se ven facilitadas por la reutilización de compilaciones cuando se emplean dependencias de instantáneas.
En Gearbox, una vez que los desarrolladores ejecutan pruebas locales, TeamCity puede hacer mucho más, ejecutando todo el conjunto de pruebas de forma centralizada. El sistema CI/CD también puede orquestar dinámicamente estas ejecuciones de prueba en distintos tipos de máquinas, poniendo en marcha tantas máquinas como sea necesario en un momento dado y apagándolas después para optimizar los recursos.
Uno de los mayores retos que TeamCity ayudó a resolver a Gearbox fue la puesta en marcha de nuevos proyectos. Con las alternativas que habían probado, había que configurar cada proyecto desde cero. A medida que los proyectos crecían con el tiempo, se desviaban unos de otros, llegando a ser tan diferentes que la empresa necesitaba un experto en la materia por proyecto. Esto dificultaba el intercambio de conocimiento entre equipos, lo que provocaba cuellos de botella en el proceso de desarrollo y aumentaba el riesgo de errores e incoherencias.
Desde que el equipo adoptó TeamCity como su solución de CI/CD, las cosas se han vuelto mucho más fáciles. Gracias a la creación de plantillas, el equipo puede compartir recursos entre proyectos. Una vez que te familiarizas con un proyecto, te familiarizas con todos. Esto ayudó al equipo a aumentar la productividad y centrarse en un desarrollo eficiente.
En la anterior solución de CI de Gearbox, cada compilación creaba el editor, lo que podía durar hasta una hora. Ahora, el equipo puede convertir ese paso en su propia compilación, que luego se reutiliza en todas partes. Esto ha ayudado al equipo a ahorrar significativamente en términos de instancias EC2, ya que no tienen que compilar lo mismo varias veces.
Cuando Gearbox empezó a utilizar Kotlin para la configuración de proyectos, el equipo estaba muy entusiasmado. Incluso aquellos con poca experiencia con Kotlin fueron capaces de entenderlo y empezar a usarlo rápidamente. «Hay una curva de aprendizaje pero, en general, la acogida fue positiva», declaró Steve Fortier.
Actualmente, cuando el equipo necesita cambiar una cosa en un proyecto, utiliza la interfaz de usuario. Si necesitan cambiar el funcionamiento de una configuración de compilación concreta en varios proyectos, utilizarán Kotlin. La capacidad de utilizar con flexibilidad este enfoque híbrido para las configuraciones de proyectos es otro de los aspectos destacados de TeamCity para Gearbox.
Gearbox tiene como objetivo mejorar su uso de TeamCity mediante la implementación de compilaciones personales para aumentar la confianza en las confirmaciones y proporcionar compilaciones funcionales para las pruebas de control de calidad. El equipo también busca mejorar la velocidad de compilación, abreviar las cadenas y minimizar los fallos.
Actualmente realizan un seguimiento del rendimiento del servidor, la duración de la compilación y los fallos de compilación, pero tienen previsto incluir métricas más detalladas, como el tamaño del artefacto y la duración de la cola. Su objetivo es aprovechar la gama de funciones personalizables de TeamCity para establecer un proceso de CI más eficaz que ahorre tiempo y garantice la fiabilidad de sus compilaciones.
El cambio a TeamCity Cloud ha mejorado las prácticas de CI/CD de Gearbox de varias maneras.
TeamCity también ayuda a Gearbox a conseguir ahorros significativos en cuanto a instancias EC2, ya que la capacidad de utilizar dependencias permite evitar compilar lo mismo varias veces.
Yuri Trufanov, director técnico ejecutivo de la plataforma tecnológica
Terminamos con una solución de nube híbrida que incluía TeamCity Cloud Profiles y AWS. Además, disponíamos de ordenadores locales para los agentes de compilación. Esta combinación nos permitió acomodar cualquier número de compilaciones a lo largo del día, al tiempo que nos proporcionaba un mínimo de agentes para las horas no laborables. Así que podíamos ejecutar lo que quisiéramos donde quisiéramos.
Ivan Babiankou, ingeniero de software de Picnic
Buscábamos una solución gestionada para todos nuestros usos de IC. Además, necesitábamos agentes autohospedados para controlar qué software se ejecuta y qué herramientas exactas se utilizan. TeamCity Cloud con agentes autohospedados es una solución a medida que encanta a nuestro equipo, compuesto por más de 300 ingenieros, y que mejora muchísimo nuestra productividad.
Tadeas Kriz, director tecnológico y cofundador de Brightify
Nuestras revisiones de código han mejorado significativamente y hemos podido aprovechar los webhooks de Space con TeamCity para compilar cada rama revisada e implementarla en nuestro QA para poder probar la rama antes de combinarla. Ahora también es más fácil saber quién está fuera de la oficina.