¿Por qué Bazel?

Informar un problema Ver código fuente Nocturno · 8.4 · 8.3 · 8.2 · 8.1 · 8.0 · 7.6

Bazel es una herramienta de compilación rápida, correcta y extensible con pruebas integradas que admite varios lenguajes, repositorios y plataformas en un ecosistema líder en la industria.

Bazel es rápido

Bazel sabe exactamente qué archivos de entrada necesita cada comando de compilación, lo que evita trabajo innecesario, ya que solo vuelve a ejecutar la compilación cuando el conjunto de archivos de entrada cambia entre cada compilación. Ejecuta comandos de compilación con el mayor paralelismo posible, ya sea en la misma computadora o en nodos de compilación remotos. Si la estructura de compilación lo permite, puede ejecutar miles de comandos de compilación o prueba al mismo tiempo.

Esto se admite en varias capas de almacenamiento en caché, en la memoria, en el disco y en la granja de compilación remota, si está disponible. En Google, solemos alcanzar tasas de aciertos de caché superiores al 99%.

Bazel es correcto

Bazel garantiza que tus archivos binarios se compilen solo a partir de tu propio código fuente. Las acciones de Bazel se ejecutan en zonas de pruebas individuales, y Bazel hace un seguimiento de cada archivo de entrada de la compilación, y solo vuelve a ejecutar los comandos de compilación cuando es necesario. Esto mantiene tus archivos binarios actualizados para que el mismo código fuente siempre genere el mismo archivo binario, bit por bit.

Despídete de las invocaciones interminables de make clean y de la búsqueda de errores fantasma que, de hecho, se resolvieron en el código fuente que nunca se compiló.

Bazel es extensible

Aprovecha todo el poder de Bazel escribiendo tus propias reglas y macros para personalizar Bazel según tus necesidades específicas en una amplia variedad de proyectos.

Las reglas de Bazel se escriben en Starlark, nuestro lenguaje de programación interno que es un subconjunto de Python. Starlark hace que la escritura de reglas sea accesible para la mayoría de los desarrolladores y, al mismo tiempo, crea reglas que se pueden usar en todo el ecosistema.

Pruebas integradas

El ejecutor de pruebas integrado de Bazel conoce y ejecuta solo las pruebas que deben volver a ejecutarse, y usa la ejecución remota (si está disponible) para ejecutarlas en paralelo. Detecta las inestabilidades de forma anticipada con la ejecución remota para ejecutar rápidamente una prueba miles de veces.

Bazel proporciona herramientas para subir los resultados de las pruebas a una ubicación central, lo que facilita la comunicación eficiente de los resultados de las pruebas, ya sea en la CI o por parte de desarrolladores individuales.

Compatibilidad con diferentes idiomas

Bazel admite muchos lenguajes de programación comunes, incluidos C++, Java, Kotlin, Python, Go y Rust. Puedes compilar varios archivos binarios (por ejemplo, backend, IU web y app para dispositivos móviles) en la misma invocación de Bazel sin limitarte a la herramienta de compilación idiomática de un solo lenguaje.

Compatibilidad con varios repositorios

Bazel puede recopilar código fuente de varias ubicaciones: no es necesario que vendas tus dependencias (aunque puedes hacerlo), sino que puedes indicarle a Bazel la ubicación de tu código fuente o artefactos precompilados (p.ej., un repositorio de Git o Maven Central), y él se encarga del resto.

Compatibilidad con múltiples plataformas

Bazel puede compilar proyectos de forma simultánea para varias plataformas, como Linux, macOS, Windows y Android. También proporciona potentes capacidades de compilación cruzada para compilar código para una plataforma mientras se ejecuta la compilación en otra.

Ecosistema amplio

A los líderes de la industria les encanta Bazel, y han creado una gran comunidad de desarrolladores que usan Bazel y contribuyen a su desarrollo. Encuentra herramientas, servicios y documentación, incluidas ofertas de consultoría y SaaS que Bazel puede usar. Explora extensiones, como la compatibilidad con lenguajes de programación en nuestros repositorios de software de código abierto.