para cuando algo se compromete a dominar
Normalmente configuro mi CI para que se ejecute en cada confirmación. Las ramas no se fusionan en master hasta que la rama ha sido probada. Si confía en ejecutar pruebas en el maestro, eso abre una ventana para que se rompa la compilación.
La ejecución de las pruebas en una máquina CI tiene que ver con resultados reproducibles. Debido a que el servidor CI tiene un entorno limpio conocido extraído de su VCS, sabe que los resultados de la prueba son correctos. Cuando se ejecuta localmente, puede olvidar confirmar el código necesario para que lo aprueben, o tener un código no confirmado que los haga pasar cuando deberían fallar.
También puede ahorrar tiempo a los desarrolladores al ejecutar diferentes suites en paralelo, especialmente si algunas son pruebas lentas de varios minutos que probablemente no se ejecutarán localmente después de cada cambio.
En mi trabajo actual, nuestra implementación de producción está cerrada cuando CI pasa todas las pruebas. Los scripts de implementación evitarán la implementación a menos que estén pasando. Esto hace que sea imposible olvidar accidentalmente ejecutarlos.
El hecho de que CI sea parte del flujo de trabajo también quita la carga de los desarrolladores. Como desarrollador, ¿usualmente ejecuta un linter, un analizador estático, una prueba unitaria, una cobertura de código y una prueba de integración para cada cambio? CI puede, de forma completamente automática y sin necesidad de pensarlo, reduciendo la fatiga de la decisión.