Un sistema de compilación es una de las partes más importantes de una organización de ingeniería porque cada desarrollador interactúa con él potencialmente docenas o cientos de veces al día. Es necesario un sistema de compilación con todas las funciones para permitir la productividad del desarrollador a medida que la organización escala. Para los desarrolladores individuales, es sencillo simplemente compilar su código, por lo que un sistema de compilación puede parecer excesivo. Pero a mayor escala, tener un sistema de compilación ayuda a administrar las dependencias compartidas, como confiar en otra parte del código base o en un recurso externo, como una biblioteca. Los sistemas de compilación ayudan a garantizar que tenga todo lo que necesita para compilar su código antes de que comience a compilarse. Los sistemas de compilación también aumentan la velocidad cuando se configuran para ayudar a los ingenieros a compartir recursos y resultados.
Esta sección cubre parte de la historia y los conceptos básicos de la construcción y los sistemas de construcción, incluidas las decisiones de diseño que se tomaron para hacer Bazel. Si está familiarizado con los sistemas de compilación basados en artefactos, como Bazel, Buck y Pants, puede omitir esta sección, pero es una descripción general útil para comprender por qué los sistemas de compilación basados en artefactos son excelentes para habilitar la escala.
¿Por qué un sistema de construcción?
Si no ha usado un sistema de compilación antes, comience aquí. Esta página explica por qué debería usar un sistema de compilación y por qué los compiladores y los scripts de compilación no son la mejor opción una vez que su organización comienza a escalar más allá de unos pocos desarrolladores.
Sistemas de compilación basados en tareas
Esta página analiza los sistemas de compilación basados en tareas (como Make, Maven y Gradle) y algunos de sus desafíos.
Sistemas de construcción basados en artefactos
Esta página analiza los sistemas de compilación basados en artefactos en respuesta a los puntos débiles de los sistemas de compilación basados en tareas.
Esta página cubre compilaciones distribuidas o compilaciones que se ejecutan fuera de su máquina local. Esto requiere una infraestructura más robusta para compartir recursos y generar resultados (¡y es donde ocurre la verdadera magia!)
Esta página cubre algunas complicaciones de las dependencias a gran escala y estrategias para contrarrestar esas complicaciones.