Poner fin al dolor: Repensando CI para Monorepos Grandes

Rate this content
Bookmark

Escalar bases de código grandes, especialmente monorepos, puede ser una pesadilla en los sistemas de Integración Continua (CI). El panorama actual de las herramientas de CI tiende a ser orientado a máquinas, de bajo nivel y exigente en términos de mantenimiento. Lo peor es que a menudo están desconectadas de las necesidades y el flujo de trabajo real del desarrollador.

¿Por qué es un obstáculo el CI? Porque los sistemas de CI actuales son comodines, sin una comprensión específica de tu base de código. No pueden aprovechar el contexto en el que operan para ofrecer optimizaciones.

En esta charla, exploraremos el futuro del CI, diseñado específicamente para bases de código grandes y monorepos. Imagina un sistema de CI que comprenda la estructura de tu espacio de trabajo, paralelice dinámicamente las tareas en máquinas utilizando datos históricos, y haga todo esto con una configuración mínima y de alto nivel. Repensemos el CI, haciéndolo más inteligente, eficiente y alineado con las necesidades del desarrollador.

FAQ

Un monorepo es un repositorio que contiene múltiples proyectos o productos, que pueden tener interdependencias entre sí. La estructura de un proyecto en un monorepo debe garantizar consistencia en la configuración y versiones utilizadas, y permitir movilidad entre proyectos para facilitar su mantenimiento y automatización.

Los principales desafíos incluyen la optimización de la configuración de CI para manejar múltiples proyectos simultáneamente, la necesidad de ejecutar tareas en paralelo para evitar tiempos de espera largos en cada PR, y la complejidad de mantener y ajustar la configuración de CI conforme el monorepo crece y cambia.

NX es una herramienta de gestión de monorepos que ofrece funciones como la ejecución paralela de tareas y la capacidad de ejecutar solo nodos afectados por cambios recientes. Esto ayuda a optimizar el tiempo de CI y a manejar las dependencias dentro del monorepo de manera eficiente.

NX Replay es una característica de NX que actúa como una caché de cálculos distribuida. Calcula una clave hash basada en diversas fuentes, como código fuente y variables de entorno, y almacena los resultados de las tareas junto con esta clave. Si un cálculo posterior coincide con la clave hash, NX puede reproducir los resultados sin necesidad de recomputación.

NX permite la distribución de tareas en múltiples máquinas y la generación dinámica de tareas para pruebas de extremo a extremo, lo que ayuda a reducir significativamente los tiempos de ejecución de CI. Además, su capacidad para detectar y reejecutar tareas inestables mejora la confiabilidad de los procesos de CI.

La escalabilidad dinámica de NX permite adaptar el número de máquinas utilizadas en función del volumen de tareas, optimizando los recursos y reduciendo costos. Esto asegura una distribución eficiente y la capacidad de manejar fluctuaciones en la carga de trabajo sin configuración manual continua.

NX facilita la división dinámica de pruebas de extremo a extremo en tareas más pequeñas que pueden distribuirse entre varias máquinas. Esto permite una ejecución más rápida y eficiente de las pruebas, reduciendo los cuellos de botella y mejorando el rendimiento general de CI.

Juri Strumpflohner
Juri Strumpflohner
25 min
15 Nov, 2023

Comments

Sign in or register to post your comment.

Video Summary and Transcription

La charla de hoy analiza la reevaluación del CI en monorepos, con un enfoque en aprovechar el gráfico implícito de dependencias de proyectos para optimizar los tiempos de compilación y gestionar la complejidad. Se destaca el uso de NX Replay y NX Agents como una forma de mejorar la eficiencia del CI mediante el almacenamiento en caché de cálculos anteriores y la distribución de tareas en múltiples máquinas. Se discuten la distribución detallada y la detección de fallas como métodos para mejorar la eficiencia de la distribución y garantizar una configuración limpia. Habilitar la distribución con NX Agents simplifica el proceso de configuración, y NX Cloud ofrece escalabilidad dinámica y reducción de costos. En general, la charla explora estrategias para mejorar la escalabilidad y eficiencia de los flujos de CI en monorepos.

1. Introducción a Repensar CI en Monorepos

Short description:

Hoy, me gustaría hablar sobre cómo podríamos repensar cómo funciona CI en monorepos. Mi nombre es Joris Sturmfloner y he estado utilizando monorepos durante seis años. También soy miembro del equipo principal de NX y un experto desarrollador de Google en tecnologías web y Angular.

[♪ música tocando ♪ Muy bien. Hoy me gustaría hablar un poco sobre cómo podríamos repensar cómo funciona CI en comparación con la situación actual de CI que tenemos, con un enfoque particular en monorepos y monorepos grandes potencialmente. Cómo podríamos optimizar eso. Antes de continuar, mi nombre es Joris Sturmfloner. He estado utilizando monorepos durante probablemente seis años. Desde hace unos cuatro años, también soy miembro del equipo principal de NX, que es una herramienta de gestión de monorepos. Y también soy un experto desarrollador de Google en tecnologías web y Angular y también soy instructor en AgHead, donde publico cursos sobre desarrollo web y herramientas para desarrolladores.

2. Consideraciones para CI en Monorepos

Short description:

Al trabajar con monorepos, debemos considerar la experiencia local del desarrollador, la automatización y las reglas, y los pipelines de tareas. Las soluciones de CI actuales no están optimizadas para monorepos y requieren un mantenimiento manual a nivel bajo. Los desarrolladores desean una forma de definir su estructura de CI a alto nivel y necesitan estrategias para garantizar la escalabilidad y la velocidad y el rendimiento manejables.

Entonces, cuando nos adentramos en la dirección de un monorepo, no es gratuito, ¿verdad? Hay algunas consideraciones que deben tenerse en cuenta. Una de las más importantes es, obviamente, la experiencia local del desarrollador. ¿Cómo estructuramos un proyecto en un monorepo? ¿Cómo nos aseguramos de tener consistencia en cómo se configuran estos productos? ¿Qué versión utilizan? ¿Cómo se configuran de manera que también podamos tener cierta movilidad entre proyectos, potencialmente, y también nos ayude a mantenerlos? La automatización y las reglas en torno a esos proyectos también son una parte muy importante, especialmente en lo que respecta al mantenimiento y la longevidad de dicho monorepo.

También cosas como características de los pipelines de tareas, poder ejecutar cosas en paralelo. Porque claramente en un monorepo, ya no ejecutamos solo un proyecto, sino potencialmente una serie de proyectos donde también hay dependencias. Y por lo tanto, necesitamos poder construir productos dependientes primero antes de ejecutar nuestro proyecto. Y esas son cosas que no queremos hacer manualmente, sino que queremos tener soporte de herramientas. Pero hoy me gustaría centrarme específicamente en el elefante en la habitación cuando hablamos de monorepos, que a menudo no se le presta atención de inmediato, lo cual es un error, que es CI. Porque claramente hay algo: la situación actual de CI no está optimizada para monorepos porque está muy orientada a la máquina, por lo que debemos centrarnos en instrucciones exactas que queremos procesar. Necesitamos tener un enfoque muy instructivo. También es muy detallado en ese sentido. Requiere mucho mantenimiento porque, como mencioné, ya no ejecutamos solo un proyecto y ya está. Ejecutamos una serie de proyectos. Ejecutamos múltiples proyectos. Y por lo tanto, necesitamos tener estrategias para ajustar el CI para asegurarnos de que incluso cuando cambia la estructura de nuestro monorepo, cuando se agregan más productos al monorepo, siga funcionando. También diría que está un poco alejado de lo que los desarrolladores desean, porque como desarrollador, me gustaría tener una forma más a alto nivel de definir mi estructura de CI, mi ejecución de CI, mi pipeline de CI, en el sentido de decir, hey, quiero ejecutar todos estos proyectos que se han modificado, por ejemplo, en ese PR, en lugar de tener que ajustar cada aspecto de ese proyecto. Y como dije antes, realmente no funcionan para monorepos, están diseñados para ser mucho más generales y para espacios de trabajo de proyectos individuales en general. Así que hoy me gustaría adentrarme en algunos de estos aspectos, específicamente en lo que respecta a la velocidad y el rendimiento, porque eso es algo importante en lo que debemos prestar atención, porque de lo contrario nuestro monorepo sería un problema. Porque si tenemos una buena colaboración local dentro de los equipos, pero nuestro pipeline tarda más de una hora en cada PR, eso será un problema.

Check out more articles and videos

We constantly think of articles and videos that might spark Git people interest / skill us up or help building a stellar career

Elevando Monorepos con los Espacios de Trabajo de npm
DevOps.js Conf 2022DevOps.js Conf 2022
33 min
Elevando Monorepos con los Espacios de Trabajo de npm
Top Content
Aprenda más sobre cómo aprovechar las características predeterminadas de los espacios de trabajo de npm para ayudarlo a administrar su proyecto monorepo, mientras también explora algunas de las nuevas características de npm cli.
¿Por qué es tan lento el CI?
DevOps.js Conf 2022DevOps.js Conf 2022
27 min
¿Por qué es tan lento el CI?
Todos nos hemos preguntado esto mientras esperamos una eternidad a que termine nuestro trabajo de CI. Un CI lento no solo arruina la productividad del desarrollador, rompiendo nuestra concentración, sino que también cuesta dinero en tarifas de computación en la nube y desperdicia enormes cantidades de electricidad. Vamos a adentrarnos en por qué ocurre esto y cómo podemos solucionarlo con herramientas mejores y más rápidas.
Despliegue Atómico para Hipsters de JavaScript
DevOps.js Conf 2024DevOps.js Conf 2024
25 min
Despliegue Atómico para Hipsters de JavaScript
Desplegar una aplicación no es un proceso fácil. Te encontrarás con muchos problemas y puntos de dolor que resolver para que funcione correctamente. Lo peor es: ahora que puedes desplegar tu aplicación en producción, ¿cómo no vas a poder desplegar también todas las ramas del proyecto para tener acceso a vistas previas en vivo? ¿Y poder hacer un revert rápido a pedido?Afortunadamente, el clásico conjunto de herramientas de DevOps tiene todo lo que necesitas para lograrlo sin comprometer tu salud mental. Al mezclar expertamente Git, herramientas de Unix y llamadas a API, y orquestar todo ello con JavaScript, dominarás el secreto de los despliegues atómicos seguros.No necesitarás depender de servicios comerciales: ¡conviértete en el maestro perfecto de las herramientas y netlifica tu aplicación desde casa!
Cómo construir tuberías de CI/CD para una aplicación de microservicios
DevOps.js Conf 2021DevOps.js Conf 2021
33 min
Cómo construir tuberías de CI/CD para una aplicación de microservicios
Top Content
Los microservicios presentan muchas ventajas para ejecutar software moderno, pero también traen nuevos desafíos tanto para las tareas de despliegue como operativas. Esta sesión discutirá las ventajas y desafíos de los microservicios y revisará las mejores prácticas para desarrollar una arquitectura basada en microservicios.Discutiremos cómo la orquestación de contenedores usando Kubernetes o Red Hat OpenShift puede ayudarnos y lo uniremos todo con un ejemplo de tuberías de Integración Continua y Entrega Continua (CI/CD) en OpenShift.
Microfrontends Federados a Gran Escala
React Summit 2023React Summit 2023
31 min
Microfrontends Federados a Gran Escala
Top Content
La charla será una historia de cómo Personio pasó de renderizar a través de una arquitectura PHP monolítica, a una aplicación Next JS orientada a microfrontends, impulsada por la Federación de Módulos y la cadena de herramientas del monorepositorio NX.
Escala tu aplicación de React sin micro-frontends
React Summit 2022React Summit 2022
21 min
Escala tu aplicación de React sin micro-frontends
A medida que tu equipo crece y se convierte en múltiples equipos, el tamaño de tu base de código también crece. Llegas a las 100k líneas de código y el tiempo de compilación se acerca peligrosamente a los 10 minutos 😱 Pero eso no es todo, tus verificaciones estáticas de CI (linting, cobertura de tipos, código muerto) y pruebas también están tardando cada vez más...¿Cómo puedes mantener a tus equipos avanzando rápidamente y enviando funciones a los usuarios de manera regular si tus PRs tardan una eternidad en ser probados y desplegados?Después de explorar algunas opciones, decidimos seguir el camino de Nx. ¡Veamos cómo migrar una gran base de código a Nx y aprovechar sus compilaciones incrementales!

Workshops on related topic

React a Escala con Nx
React Summit 2023React Summit 2023
145 min
React a Escala con Nx
Top Content
Featured WorkshopFree
Isaac Mann
Isaac Mann
Vamos a utilizar Nx y algunos de sus plugins para acelerar el desarrollo de esta aplicación.
Algunas de las cosas que aprenderás:- Generar un espacio de trabajo Nx prístino- Generar aplicaciones frontend React y APIs backend dentro de tu espacio de trabajo, con proxies preconfigurados- Crear librerías compartidas para reutilizar código- Generar nuevos componentes enrutados con todas las rutas preconfiguradas por Nx y listas para usar- Cómo organizar el código en un monorepositorio- Mover fácilmente las librerías alrededor de tu estructura de carpetas- Crear historias de Storybook y pruebas e2e de Cypress para tus componentes
Tabla de contenidos: - Lab 1 - Generar un espacio de trabajo vacío- Lab 2 - Generar una aplicación React- Lab 3 - Ejecutores- Lab 3.1 - Migraciones- Lab 4 - Generar una librería de componentes- Lab 5 - Generar una librería de utilidades- Lab 6 - Generar una librería de rutas- Lab 7 - Añadir una API de Express- Lab 8 - Mostrar un juego completo en el componente de detalle de juego enrutado- Lab 9 - Generar una librería de tipos que la API y el frontend pueden compartir- Lab 10 - Generar historias de Storybook para el componente de interfaz de usuario compartido- Lab 11 - Prueba E2E del componente compartido
Monorepos de Node con Nx
Node Congress 2023Node Congress 2023
160 min
Monorepos de Node con Nx
Top Content
WorkshopFree
Isaac Mann
Isaac Mann
Varias apis y varios equipos en el mismo repositorio pueden causar muchos dolores de cabeza, pero Nx te tiene cubierto. Aprende a compartir código, mantener archivos de configuración y coordinar cambios en un monorepo que puede escalar tanto como tu organización. Nx te permite dar estructura a un repositorio con cientos de colaboradores y elimina las desaceleraciones de CI que normalmente ocurren a medida que crece la base de código.
Índice de contenidos:- Laboratorio 1 - Generar un espacio de trabajo vacío- Laboratorio 2 - Generar una api de node- Laboratorio 3 - Ejecutores- Laboratorio 4 - Migraciones- Laboratorio 5 - Generar una biblioteca de autenticación- Laboratorio 6 - Generar una biblioteca de base de datos- Laboratorio 7 - Añadir un cli de node- Laboratorio 8 - Limites de módulo- Laboratorio 9 - Plugins y Generadores - Introducción- Laboratorio 10 - Plugins y Generadores - Modificación de archivos- Laboratorio 11 - Configuración de CI- Laboratorio 12 - Caché distribuida
Aporta Calidad y Seguridad al pipeline de CI/CD
DevOps.js Conf 2022DevOps.js Conf 2022
76 min
Aporta Calidad y Seguridad al pipeline de CI/CD
WorkshopFree
Elena Vilchik
Elena Vilchik
En esta masterclass repasaremos todos los aspectos y etapas al integrar tu proyecto en el ecosistema de Calidad y Seguridad del Código. Tomaremos una aplicación web simple como punto de partida y crearemos un pipeline de CI que active el monitoreo de calidad del código. Realizaremos un ciclo completo de desarrollo, comenzando desde la codificación en el IDE y abriendo una Pull Request, y te mostraré cómo puedes controlar la calidad en esas etapas. Al final de la masterclass, estarás listo para habilitar esta integración en tus propios proyectos.
Despliega una aplicación de componentes web y configura un flujo de integración continua
DevOps.js Conf 2022DevOps.js Conf 2022
111 min
Despliega una aplicación de componentes web y configura un flujo de integración continua
Workshop
Philippe Ozil
Philippe Ozil
Únete a nosotros en un masterclass en el que desplegarás una aplicación Node.js simple construida con componentes web y configurarás un flujo de integración continua (CI). Aprenderás sobre el poder del Lightning Web Runtime (LWR) y las GitHub Actions.
Potenciando tu CI/CD con GitHub Actions
DevOps.js Conf 2022DevOps.js Conf 2022
155 min
Potenciando tu CI/CD con GitHub Actions
Workshop
David Rubio Vidal
David Rubio Vidal
Obtendrás conocimiento sobre los conceptos de GitHub Actions, como:- El concepto de secretos de repositorio.- Cómo agrupar pasos en trabajos con un propósito determinado.- Dependencias y orden de ejecución de trabajos: ejecutar trabajos en secuencia y en paralelo, y el concepto de matriz.- Cómo dividir la lógica de los eventos de Git en diferentes archivos de flujo de trabajo (en empuje de rama, en empuje a master/principal, en etiqueta, en implementación).- Para respetar el concepto de DRY (No te repitas), también exploraremos el uso de acciones comunes, tanto dentro del mismo repositorio como desde un repositorio externo.