La primera respuesta a una pregunta antigua, recientemente activa , vinculada a un video que habla sobre cómo se realiza el repositorio de Google.
Una cosa interesante que se mencionó es el hecho de que todo está construido desde la fuente, sin depender de binarios. Esto ayuda a evitar problemas con las dependencias que se vuelven obsoletas pero que todavía se usan en otros proyectos, un problema que realmente encontré mucho.
¿Cómo es técnicamente posible? Si intento lo mismo en mi empresa, incluso teniendo en cuenta la gran brecha entre la escala de la base de código de mi empresa y la escala de Google, no sería posible por dos razones:
El IDE (Visual Studio) dejará de responder rápidamente, dado que sufre mucho incluso con soluciones pequeñas que contienen, por ejemplo, 50 proyectos.
Cualquier análisis estático se vería reducido por el tamaño de toda la base de código. Por ejemplo, las métricas de código o la comprobación estática de contratos de código difícilmente serían posibles (los contratos de código probablemente tomarían días o semanas).
Con la integración continua, la compilación también llevaría una gran cantidad de tiempo y destruiría los servidores tan pronto como se modificara un proyecto con muchas dependencias, lo que requeriría la recompilación de un gran árbol de proyectos.
¿Cómo puede una pequeña empresa sortear esos problemas y ser capaz de:
Use el IDE sin verse afectado por el bajo rendimiento,
¿Compilar el código después de cada confirmación sin destruir el servidor, incluso cuando las consecuencias de un cambio requieren que se vuelva a compilar una gran cantidad de la base de código?
fuente
Respuestas:
Está asumiendo un proceso de compilación tradicional, y el proceso de Google es cualquier cosa menos tradicional. Hay una serie de artículos en el blog de Herramientas de ingeniería que explican su proceso con cierto detalle, elaborando sobre la presentación de 2010: Herramientas para la integración continua a escala de Google :
Para resumir, utilizan un sistema de construcción distribuido personalizado que permite un alto grado de paralelismo y automatización, aprovechando al máximo su infraestructura existente. También depende en gran medida del almacenamiento en caché, con una tasa de aciertos de caché general del 90%.
Pero, ¿cómo puede aplicar todo esto en su empresa? El primer paso es distribuir la compilación, y para eso necesitarías:
En un entorno de desarrollo de gcc, configurar una granja de compilación es relativamente fácil. distcc se encarga de la distribución y ccache se encarga del almacenamiento en caché, y funcionan muy bien juntos. No conozco ninguna herramienta similar para el ecosistema de Microsoft (supongo que está utilizando un lenguaje de Microsoft basado en su elección de IDE), pero sí sé que MSBuild puede ejecutar compilaciones en paralelo , aprovechando las CPU de varios núcleos . No es realmente una granja de compilación, pero ciertamente es un paso en la dirección correcta.
fuente
Dicho esto, desconfiaría de la "construcción justo a tiempo", a menos que el código que se está implementando en toda la empresa se haya verificado como parte de un ciclo de lanzamiento formal (más o menos), y no sea solo un azar construcción nocturna H
Tener 5000 desarrolladores que acceden a 2000 proyectos que se encuentran en un estado continuo de flujo parece una receta para el desastre, y Google contrata a personas muy inteligentes, por lo que estoy bastante seguro de que eso no es lo que realmente está sucediendo.
fuente