Y también quiero ejecutarlo en diferentes sistemas operativos, porque puede haber alguna parte en la CLI que funcione, no sé, en Windows, pero no funciona en Mac, y quiero identificar eso. Y eso, por supuesto, es algo que en un sistema local será, bueno, difícil de hacer, y ahí es donde brilla el CICD. ¿Correcto, también obtienes, por supuesto, otras mejoras allí? Obtienes las notificaciones cuando algo falla, así que tienes algo todos los días que puedes buscar si tienes un problema, y deberías, por supuesto, tener en cuenta las dependencias dinámicas para eso.
Lo que quiero decir con esto es, por supuesto, puedes, digamos, endurecer todo. Puedes hacer, por ejemplo, que todas tus plantillas que hagas se hagan con dependencias fijas en, por ejemplo, NPM, para que siempre dependas de, no sé, hemos visto listas de emojis que dicen que uno, dos, tres deberían ser la versión, y eso, por supuesto, es hasta cierto punto recomendable, pero hacer todas las dependencias de manera fija ciertamente no es recomendable, porque si todas las pruebas siempre están verdes, siempre se mantendrán verdes, pero tus usuarios reales, ellos no harán todas sus dependencias, por supuesto, fijas, así que generalmente dirán, oh, simplemente no me importa. Si, digamos, hubo un cambio de versión de parche aquí, quiero tomarlo porque, no sé, podría contener una solución rápida para una vulnerabilidad de seguridad, y así deberías seguir eso, porque tus usuarios finales también lo harán, ¿verdad? Y así, un cambio en, por ejemplo, tu utilidad podría, por supuesto, ser bueno para activar tus pruebas, pero en general, incluso si tu utilidad no cambió, aún deberías ejecutar las pruebas y luego simplemente actualizar las dependencias solo para emular lo que harían los usuarios reales. Así que siempre ten en cuenta el equilibrio entre tener todo confiable y reproducible en tus pruebas y tenerlo lo más cercano posible a la realidad. Y en algún punto intermedio es donde quieres estar, eso es lo que debes considerar.
Ahora, las pruebas de matriz en, por ejemplo, Azure DevOps funcionan así. En otras tuberías de CI/CD, por ejemplo, GitHub Actions, funciona de manera muy similar. También es un archivo YAML, pero, por supuesto, algunos nombres son diferentes. Lo que haces allí generalmente es definir una clave llamada estrategia, y allí puedes tener una matriz. Luego ingresas una lista de nombres buenos. Por ejemplo, asignas Linux node 12 para donde quieres ejecutar en Linux, que es la versión de nodo 12. Y luego dentro, en realidad puedes tener cualquier tipo de variable que desees. Entonces, estos nombres son inventados, nombre de imagen y versión de nodo. Lo que realmente haces es que luego usas estos nombres de variables cuando, por ejemplo, asignas una cierta imagen o cuando instalas una cierta versión de nodo, y luego puedes hacer referencia a las variables que asignaste. Y lo que Azure DevOps realmente hará es ejecutar todas estas cosas en paralelo, al menos hasta el nivel de paralelismo permitido por Azure DevOps. Entonces, si solo tienes uno porque estás en el nivel gratuito, entonces aún los ejecutarás secuencialmente, pero simplemente ejecutarás todos estos como puedes ver aquí en una ejecución. ¿Correcto? Entonces aquí puedes ver, ahora tenemos los trabajos de Linux ejecutando las diferentes versiones de nodo. Tenemos el trabajo de Windows, pero todos se ejecutan en paralelo. Windows tardó mucho más. Ahí puedes ver que Windows es simplemente, bueno, creo que tiene un rendimiento no tan bueno en la instalación de NPM, esa fue la razón aquí, pero eso se probará al mismo tiempo. ¿Correcto? Lo que puedes obtener son lotes agradables. Entonces, cada uno de tus, digamos, sub-pipeline de métricas también puede tener un lote dedicado. Entonces puedes tener un lote para todo el conjunto de cosas que ves aquí arriba, pero también puedes tener un lote para cada pipeline. Y eso te da, por ejemplo, un buen nivel de indicador que puedes, por ejemplo, usar en algún panel interno o en alguna página. Entonces, cuando obtienes un estado parcialmente exitoso o incluso rojo una vez, entonces es hora de investigar.
Comments