No, no lo es, por dos razones:
Velocidad
Los commits deben ser rápidos. Una confirmación que tarda 500 ms., Por ejemplo, es demasiado lenta y alentará a los desarrolladores a comprometerse 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 el precompromiso.
Por supuesto, las cosas empeoran para proyectos más grandes con miles de pruebas que se ejecutan durante minutos en una arquitectura distribuida, o semanas o meses en una sola máquina.
La peor parte es que no hay mucho que puedas hacer para hacerlo más rápido. Los pequeños proyectos de Python que tienen, por ejemplo, cien pruebas unitarias, tardan al menos un segundo en ejecutarse en un servidor promedio, pero a menudo mucho más tiempo. Para una aplicación C #, tendrá un promedio de cuatro y cinco segundos, debido al tiempo de compilación.
A partir de ese momento, puede pagar $ 10 000 adicionales por un mejor servidor que reducirá el tiempo, pero no mucho, o ejecutar 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 lo ayudará en proyectos a pequeña escala.
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 una confirmación. Posiblemente no puedan ejecutar miles de pruebas unitarias, pero pueden ejecutar cinco de diez.
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 IDEs / plataformas / idiomas / marcos pueden tener una funcionalidad similar.
Mantenga 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 a menudo son increíblemente rápidos. Hacer análisis estático está bien tan pronto como se mantenga rápido, lo cual rara vez es el caso. Ejecutar 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 rompan la compilación (o cuando fallaron las pruebas unitarias, que es prácticamente lo mismo si considera un compilador como una herramienta que verifica algunos de los posibles errores que puede introducir en su código).
Por ejemplo, ir a una página web para verificar 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 romper la compilación (o las pruebas de regresión fallidas) no está bien, 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 pidió enviar 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. ¿Esas razones ya se explicaron en el corredor de CI en el mismo servidor de GitLab?
Si, por otro lado, su idea es iniciar un proceso en el servidor de compilación desde el enlace previo a la confirmación, entonces disminuirá aún más las confirmaciones.