Un colega mío me dijo que está pensando en hacer que nuestro servidor de CI revierta las confirmaciones que fallaron en la compilación, por lo que el HEAD
en master
siempre es estable (como al pasar la compilación al menos).
¿Es esta una buena práctica o puede ser más problemático que simplemente dejar master
roto hasta que el desarrollador lo arregle?
Mi idea es que revertir la confirmación hará más compleja la tarea de leer la confirmación y la corrección (el desarrollador tendrá que revertir la reversión y luego la corrección, que también saturará el git log
) y deberíamos dejarlo El cometer y luego cometer el arreglo. Aunque veo algunas ventajas en tener master
estable, esta reversión de fallos no me convence.
editar: no importa si es master
o cualquier otra rama de desarrollo, pero la pregunta sigue siendo la misma: ¿debe el sistema de CI revertir una confirmación que falló en la compilación?
otra edición (de longitud): Ok, estamos usando git
de una manera extraña. Creemos que el concepto de sucursales va en contra del CI real, ya que comprometerse con una sucursal lo aísla de los otros desarrolladores y sus cambios, y agrega tiempo cuando tiene que reintegrar su sucursal y lidiar con posibles conflictos. Si todos se comprometen a master
, estos conflictos se reducen al mínimo y cada confirmación pasa todas las pruebas.
Por supuesto, esto te obliga a presionar solo la estabilidad (o romper la compilación) y a programar más cuidadosamente para no romper la compatibilidad hacia atrás o hacer cambios de características al introducir nuevas características.
Hay compensaciones al hacer CI de una o de otra manera, pero eso está fuera del alcance de la pregunta (consulte pregunta relacionada para esto). Si lo prefiere, puedo reformular la pregunta: un pequeño equipo de desarrolladores trabaja en conjunto en una rama de características. Si un desarrollador confirma algo que rompe la compilación de esa rama, ¿debería el sistema de CI revertir el compromiso o no?