Con Continuous Integration, se desea probar cada uno de los cambios que reciba el código, cada Pull Request (en una rama diferente), pues si una rama no pasa las pruebas, no habría razón por la cual mezclarla a su rama destino, se puede dañar la versión en producción.
El ciclo comienza con Git, es muy importante que el código esté versionado, debe haber una historia de los cambios, esto es fundamental; y por consiguiente, el código debe estar hospedado en un repositorio remoto
Teniendo ya el código, debemos tener pruebas para ejecutar. Para este paso, se debe contar con un servidor de automatización (Jenkins, por ejemplo). Este servicio descargaría los últimos cambios del repositorio en la(s) rama(s) correspondiente(s), y ejecuta las pruebas unitarias. Si éstas pasan, se continúa con el ciclo; si no, lo rompe. De esta manera, se tiene la confianza de que el sitio en producción se mantendrá estable.
Hasta este punto, tenemos un historial de eventos: Si las pruebas de cierto commit pasaron, si el flujo continuó o se detuvo, sabemos quién realizó cada commit, etc.
Dentro de este mismo flujo, podemos implementar más soluciones aparte de las pruebas unitarias, como una integración con una herramienta de análisis de código.
El punto base con CI mantenemos estable el entorno de producción, mantenemos buenos styles guides y mantenemos código limpio.
La salida de todo CI es un artefacto.
El artefacto debe ser la unidad que va a ser desplegada en los ambientes, debe ser algo inmutable.
Es muy importante establecer un límite de aceptación en cuanto al porcentaje del Code Coverage, pero no confiarnos de ese porcentaje, y mantener activa la práctica de hacer Code Review, es algo que no puede ser confiado por las pruebas unitarias. Los Code Review son mucho más poderosos, porque: garantiza que nuestros compañeros sepan lo que está sucediendo en los nuevos features del servicio. Siempre debe haber un proceso de Pull Requests Review, y tiene mucho más valor que un Code Coverage.
¿Quieres ver más aportes, preguntas y respuestas de la comunidad?