- Bazel es un sistema de compilación open source desarrollado por Google para compilar de forma eficiente monorepos a gran escala
- Compila proyectos complejos de manera precisa y rápida, y es especialmente eficaz al manejar bases de código grandes y dependencias en múltiples lenguajes
- Conceptos clave de Bazel
- Velocidad basada en la precisión: Bazel considera las compilaciones como funciones puras y garantiza que la misma entrada genere la misma salida
- Caché eficiente: en los entornos masivos de Google, el caché es esencial, y la precisión es lo que lo hace posible
- Compilaciones sin limpieza: permite compilaciones estables después de cambios en el código fuente sin necesidad de un "clean build"
- Cuándo usar Bazel
- Recomendado
- Monorepos a gran escala: cuando hay millones de líneas de código y se usan varios lenguajes
- Gestión de dependencias de distintos lenguajes: por ejemplo, entrenar modelos con Python y procesar datos con Scala
- Necesidad de CI/CD rápido y preciso: para aumentar la velocidad de desarrollo y evitar conflictos
- No recomendado
- Proyectos pequeños: cuando hay menos de 100 mil líneas de código y se usa un solo lenguaje
- Librerías open source: Bazel sirve para generar artefactos distribuibles, pero se queda corto para distribuir librerías reutilizables
- Puntos a considerar al adoptar Bazel
- La curva de aprendizaje inicial es alta, y se necesitan recursos adicionales para escribir y mantener archivos de compilación
- Es indispensable construir infraestructura como servidores de caché y configuración de ejecución remota
- Casos exitosos de Bazel
- Netflix
- Problema: en un repositorio con 250 mil a 300 mil líneas de código, el CI tardaba entre 45 minutos y 1 hora
- Solución: tras adoptar Bazel, el tiempo de compilación bajó de 20 minutos a 6 minutos
- Efecto: menos conflictos de merge y mejor velocidad de procesamiento de PR
- Open Systems
- Problema: tiempos de compilación lentos y flujo de trabajo ineficiente
- Solución: tras cambiar a Bazel, el ciclo de retroalimentación se redujo de 20 minutos a 5 minutos
- Lección: la capacitación de desarrolladores y la comunicación son importantes
- Ventajas y desventajas de adoptar Bazel
- Ventajas
- Tiempos de compilación rápidos: mejora la velocidad mediante caché y compilaciones incrementales
- Precisión y reproducibilidad: expresa con exactitud grafos de dependencias complejos
- Integración multilenguaje: soporte para varios lenguajes como Haskell, TypeScript y Python
- Desventajas
- Alto costo de adopción: la configuración inicial y la curva de aprendizaje son empinadas
- Necesidad de gestionar archivos de compilación: es obligatorio declarar entradas y salidas, y conviene usar herramientas de automatización
- JavaScript y tooling de frontend: puede ser difícil compatibilizarlo con flujos existentes como hot reloading
- Consejos para migrar a Bazel
- Formar un equipo clave: asegurar especialistas que entiendan Bazel y puedan configurarlo
- Capacitación y comunicación: al inicio de la adopción, es indispensable capacitar a los desarrolladores y definir expectativas
- Complejidad por lenguaje: cada lenguaje requiere configuraciones de compilación distintas
- Automatización de archivos de compilación: usar herramientas como Gazelle
- Conclusión
- Bazel sobresale al manejar monorepos a gran escala y dependencias complejas, pero su costo de adopción es alto
- Es adecuado para organizaciones que trabajan con millones de líneas de código y múltiples lenguajes
- Si se trata de proyectos pequeños o se busca una transición gradual, conviene evaluar alternativas como Earthly en lugar de Bazel
3 comentarios
Sería bueno que también se mencionaran casos de fracaso en la adopción de Bazel.
En el caso de AOSP, durante los últimos años se hicieron varias presentaciones en BazelCon sobre la migración desde el sistema de compilación existente (Soong) hacia Bazel.
https://developers.googleblog.com/en/…
Sin embargo, en el BazelCon de este año ya no hubo contenido compartido relacionado con AOSP, y en la documentación reciente sobre compilación de AOSP apareció un aviso de que la transición a Bazel fue suspendida.
Siendo el equipo de AOSP, uno pensaría que podrían haber recibido mucha ayuda con la migración a Bazel, así que el hecho de que hayan desistido de adoptarlo parece dejar muchas lecciones e implicaciones.
Quizá… tu software no necesite Bazel.
Jaja, Earthly se está haciendo publicidad a sí mismo en Earthly.
Bazel pone el énfasis en las compilaciones rápidas y las
pruebasrápidas. No se habla mucho de las pruebas.