Tradicionalmente, los sistemas de CI solo monitorean los niveles de calidad en una rama de integración, al realizar verificaciones de QA en la base de código donde los cambios ya están confirmados, observando regresiones y enviando notificaciones para intervención humana.
Pero cuando se detectan estas regresiones, la sucursal ya ha estado en problemas al menos desde que comenzó la verificación de control de calidad respectiva y permanecerá en ese estado (¡o incluso empeorará!) Hasta que se identifiquen a todos los culpables, se cometan las reparaciones y una nueva verificación de control de calidad confirma que se restableció el nivel de calidad de la sucursal. La rama puede considerarse bloqueada para el desarrollo normal durante todo este tiempo.
¿Existe una herramienta de CI capaz de evitar que ocurran tales regresiones, que realizaría verificaciones de control de calidad previas a la confirmación y permitiría las confirmaciones solo cuando la base de código actualizada con las confirmaciones respectivas también pasara esas verificaciones de control de calidad previas a la confirmación, garantizando así un mínimo nivel de calidad de la sucursal?
Actualización: se supone que las verificaciones de control de calidad automatizadas adecuadas con la cobertura adecuada para poder detectar las regresiones respectivas están disponibles para su invocación por las herramientas de CI.
fuente
Respuestas:
Por lo que puedo decir, está buscando una herramienta que rechace las confirmaciones que rompen la compilación; una herramienta de CI probablemente no podrá evitar regresiones al corregir su código, pero puede evitar que agregue código incorrecto al repositorio.
Atlassian tiene algunas aplicaciones interesantes de ganchos Git :
Si usa Git, los enlaces son muy potentes (y hay enlaces similares para SVN , Mercurial y otros sistemas de control de versiones), y puede resultarle útil usarlos para ejecutar comprobaciones previas a la confirmación.
La documentación de Git tiene una página sobre cómo crear un gancho para rechazar los empujes si no cumplen con ciertos criterios que podrían adaptarse fácilmente a este caso de uso.
Sin embargo, mucha gente argumentaría que rechazar commits es una mala idea en una
feature
rama: solo perderá el tiempo luchando contra su sistema de CI cuando la compilación se rompa por alguna razón, en lugar de corregir el error.En la
master
rama, podría tener sentido rechazar fusiones rotas, porque es posible que desee asegurarse de que siempre se compila. Para unafeature
rama, que va inevitablemente romper cosas, y puesto que el código no se va a producir ahora , tiene más sentido sólo para advertirle que en realidad rechazará su conjunto.fuente
Ninguna herramienta podría garantizar ninguna regresión, eso depende mucho más de sus pruebas que la herramienta que las ejecuta. Sin embargo, puede ayudar a evitar que las regresiones que se capturen entren en la rama de integración. Puede hacer esto con ganchos previos a la confirmación, pero a menudo es más fácil con las solicitudes de extracción (que esperamos que ya esté utilizando para la revisión del código de pares).
Si una rama está actualizada con su flujo ascendente (donde el PR se está fusionando), y sus pruebas pasan, entonces aún pasarán después de la fusión; el estado de la rama de destino después de la fusión coincidirá con el estado de la rama de origen antes de la fusión.
En general, no es particularmente difícil (dependiendo de las herramientas utilizadas) indicar si la rama de origen en un RP está actualizada con el destino y si tiene una compilación de CI pasajera. Puede usar esto como un requisito (por política y / o impuesto en el software) para fusionar la solicitud de extracción.
fuente
Las verdaderas herramientas de integración continua (a diferencia de las pruebas continuas) como Reitveld y Zuul pueden ayudar, aunque son tan buenas como las pruebas que escribe y las revisiones de código que realiza.
fuente
Use GitLAB, puede configurar los ajustes del proyecto para permitir solo una fusión cuando la tubería tenga éxito, por lo que puede tener una integración verdaderamente continua, combinar eso con agregar su QA a la lista de aprobaciones de fusión y con entornos dinámicos, puede tener garantía de calidad antes de unirte al maestro.
fuente
ApartCI es un sistema de CI diseñado exactamente para evitar regresiones, garantizando así un nivel de calidad de sucursal plano o creciente. Aún en beta.
Orquesta verificaciones centralizadas previas al compromiso de tal manera que se asegure que un cambio se confirme solo después de que se verifique, junto con todos los demás cambios comprometidos antes, para cumplir o superar el último nivel de calidad de la sucursal.
Esta es la diferencia clave en comparación con las verificaciones de precompromiso tradicionales impulsadas por el desarrollador, a menudo realizadas en paralelo, lo que deja espacio para regresiones causadas por cambios interferentes que nunca se probaron juntos.
La herramienta también está diseñada para escalar fácilmente , capaz de mantener tasas muy altas de cambios de candidatos entrantes y admitir cientos / miles de desarrolladores que trabajan en la misma rama de integración.
Descargo de responsabilidad: soy el autor de la herramienta y fundador de la compañía que lo ofrece. Disculpas por el anuncio.
fuente