No, no lo es, por dos razones:
Velocidad
Los compromisos deben ser rápidos. Un compromiso que toma 500 ms., Por ejemplo, es demasiado lento y alentará a los desarrolladores a cometer con más moderación. Dado que en cualquier proyecto más grande que Hello World, tendrá docenas o cientos de pruebas, tomará demasiado tiempo ejecutarlas durante la pre-confirmación.
Por supuesto, las cosas empeoran para proyectos más grandes con miles de pruebas que se ejecutan por minutos en una arquitectura distribuida, o semanas o meses en una sola máquina.
Lo peor es que no hay mucho que puedas hacer para hacerlo más rápido. Los proyectos Python pequeños que tienen, digamos, pruebas de cien unidades, toman al menos un segundo para ejecutarse en un servidor promedio, pero a menudo mucho más. Para una aplicación C #, tendrá un promedio de cuatro a cinco segundos, debido al tiempo de compilación.
Desde ese momento, puede pagar $ 10 000 extra por un mejor servidor que reducirá el tiempo, pero no mucho, o realizar pruebas en varios servidores, lo que solo ralentizará las cosas.
Ambos pagan bien cuando tiene miles de pruebas (así como pruebas funcionales, de sistema y de integración), lo que permite ejecutarlas en cuestión de minutos en lugar de semanas, pero esto no le ayudará en proyectos a pequeña escala. / p>
Lo que puedes hacer, en cambio, es:
-
Aliente a los desarrolladores a ejecutar pruebas fuertemente relacionadas con el código que modificaron localmente antes de realizar un compromiso. Posiblemente no pueden ejecutar miles de pruebas unitarias, pero pueden ejecutar de cinco a diez de ellas.
Asegúrese de que encontrar pruebas relevantes y ejecutarlas sea realmente fácil (y rápido). Visual Studio, por ejemplo, puede detectar qué pruebas pueden verse afectadas por los cambios realizados desde la última ejecución. Otros IDE / plataformas / idiomas / marcos pueden tener una funcionalidad similar.
-
Mantener el compromiso lo más rápido posible. Hacer cumplir las reglas de estilo está bien, porque a menudo, es el único lugar para hacerlo, y porque tales controles son a menudo increíblemente rápidos. Hacer el análisis estático está bien tan pronto como se mantiene rápido, lo que rara vez es el caso. La ejecución de las pruebas unitarias no está bien.
-
Ejecute pruebas unitarias en su servidor de integración continua.
-
Asegúrese de que los desarrolladores estén informados automáticamente cuando rompieron la compilación (o cuando las pruebas unitarias fallaron, que es prácticamente lo mismo si considera a un compilador como una herramienta que revisa algunos de los posibles errores que puede introducir en su código).
Por ejemplo, ir a una página web para comprobar las últimas compilaciones no es una solución. Deben ser informados automáticamente . Mostrar una ventana emergente o enviar un SMS son dos ejemplos de cómo pueden ser informados.
-
Asegúrese de que los desarrolladores entiendan que no es correcto romper la compilación (o que fallan las pruebas de regresión), y que tan pronto como suceda, su principal prioridad es solucionarlo. No importa si están trabajando en una función de alta prioridad que su jefe le pidió que enviara para mañana: fallaron la compilación, deberían arreglarla.
Seguridad
El servidor que aloja el repositorio no debe ejecutar código personalizado, como pruebas unitarias, especialmente por razones de seguridad. Esos motivos ya se explicaron en ¿Corredor de CI en el mismo servidor de GitLab?
Si, por otra parte, su idea es iniciar un proceso en el servidor de compilación desde el enganche de pre-confirmación, entonces ralentizará aún más las confirmaciones.