Implementación de restricciones de combinación de ramas
Las restricciones de combinación de ramas en los sistemas de control de versiones hospedados por Azure DevOps y GitHub son esenciales para controlar la calidad del código, facilitar la colaboración y mejorar la estabilidad en los proyectos de desarrollo de software. Ayudan a las organizaciones a aplicar revisiones de código, validar la finalización correcta de pruebas automatizadas y evitar las inserciones forzadas en ramas designadas. Estas restricciones ayudan a mantener la integridad del código base, a evitar cambios accidentales y a garantizar que solo los cambios comprobados y aprobados se combinen en ramas de producción.
Los conceptos generales de las restricciones de combinación de ramas son independientes de la plataforma. Aunque su implementación difiere un poco entre Azure DevOps y GitHub, también hay una gran cantidad de similitudes, lo que proporciona, en su mayor parte, la paridad de características entre ellas.
Azure DevOps
En Azure DevOps, puede implementar restricciones de combinación de ramas mediante directivas basadas en protección de ramas.
Para implementar la protección de ramas, vaya al repositorio en el portal de Azure DevOps y seleccione la rama a la que desea aplicar restricciones de combinación. Como alternativa, puede limitar la protección a las ramas actuales y futuras que coinciden con un patrón especificado. Como parte de la configuración de protección, puede aplicar las siguientes directivas de rama:
- Requerir un número mínimo de revisores: garantiza que los cambios no se puedan combinar sin el número necesario de aprobaciones.
- Comprobar elementos de trabajo vinculados: fomenta la rastreabilidad comprobando los elementos vinculados en las solicitudes de cambios
- Comprobar la resolución de comentarios: comprueba que todos los comentarios se han resuelto en las solicitudes de cambios
- Limitar los tipos de combinación: controla el historial de ramas limitando los tipos disponibles de combinación cuando se completan las solicitudes de cambios. Esto incluye la opción de habilitar o deshabilitar selectivamente los siguientes tipos de combinación:
- Combinación básica (sin avance rápido): conserva el historial exactamente como sucedió durante el desarrollo.
- Fusión mediante cambio de base y avance rápido: crea un historial lineal reproduciendo las confirmaciones de la rama de origen en el destino sin una confirmación de combinación.
- Fusión mediante combinación con "squash": crea un historial lineal al condensar las confirmaciones de la rama de origen en una única confirmación nueva en la rama de destino.
- Fusión mediante cambio de base con confirmación de fusión mediante combinación: crea un historial semilineal reproduciendo las confirmaciones de la rama de origen en la de destino y, a continuación, creando una confirmación de fusión.
Opcionalmente, puedes configurar las siguientes restricciones:
- Validación de compilación: valida el código mediante la combinación previa y la creación de cambios de solicitud de cambios.
- Comprobaciones de estado: requiere otros servicios para publicar un estado correcto para las solicitudes de cambios completas. Las comprobaciones de estado son tareas automatizadas que se desencadenan durante el proceso de solicitud de cambios para comprobar determinados criterios antes de permitir que la solicitud de cambios se combine en la rama de destino. En Azure DevOps, las comprobaciones de estado están asociadas a canalizaciones de compilación y canalizaciones de versión.
- Incluir automáticamente revisores: designa revisores de código para que se incluyan automáticamente cuando las solicitudes de cambios modifiquen determinadas áreas del código.
También tiene la opción de bloquear una rama, lo que hace que sea de solo lectura.
Tenga en cuenta que Azure DevOps proporciona dos opciones para omitir los requisitos de directiva de un repositorio. Para implementarlas, debe modificar la configuración de seguridad predeterminada del repositorio estableciendo los permisos para realizar las siguientes acciones en Permitir:
- Omitir las directivas cuando finalicen las solicitudes de incorporación de cambios.
- Omitir las directivas al insertar.
Es esencial asegurarse de que estos permisos se conceden únicamente a personas designadas que comprendan las implicaciones de estas acciones en el cumplimiento de los estándares de la organización y puedan ejercer un criterio sólido sobre su uso.
GitHub
En GitHub, puede implementar restricciones de combinación de ramas mediante reglas de protección de rama. Las reglas de protección de rama definen si los colaboradores pueden eliminar o forzar la inserción en la rama y establecer requisitos para las inserciones en la rama, como pasar comprobaciones de estado o un historial de confirmaciones lineales. Al igual que con Azure DevOps, puede aplicarlas a ramas específicas en función de la coincidencia de patrones de nombre.
Para implementar reglas de protección de ramas, vaya al repositorio en la interfaz web de GitHub, en la pestaña Configuración y, en el menú de navegación, seleccione el elemento de menú Ramas. Esto le permitirá acceder a la configuración de reglas de protección de rama. Como parte de la configuración de protección, puede aplicar las reglas siguientes:
- Requerir una solicitud de cambios antes de combinar: requiere que los colaboradores envíen solicitudes de cambios para su revisión y aprobación antes de combinar sus cambios.
- Requerir comprobaciones de estado para pasar antes de combinar: designa comprobaciones de estado que deben pasar antes de permitir combinaciones. Cuando se habilita, las confirmaciones primero se deben enviarse a otra rama, luego combinarse o enviarse directamente a una rama que coincida con esta regla después de que las comprobaciones de estado se hayan superado.
- Requerir la resolución de conversaciones antes de combinar: garantiza que todas las discusiones y comentarios relacionados con los cambios de código se resuelvan antes de combinar solicitudes de cambios.
- Requerir confirmaciones firmadas: mandatos que se firman en ramas protegidas con firmas comprobadas, mejorando la seguridad y garantizando la autenticidad de las contribuciones de código.
- Requerir historial lineal: impide las confirmaciones de mezcla en ramas protegidas, aplicando un historial lineal, lo que facilita el seguimiento y, si es necesario, invierte los cambios. Esto significa eficazmente que las solicitudes de cambios deben usar una combinación de squash o una combinación de base.
- Requerir que las implementaciones se realicen correctamente antes de la combinación: dicta que los cambios propuestos en las solicitudes de cambios se prueban y validan exhaustivamente antes de integrarse en el código base.
- Bloquear rama: como su equivalente en Azure Devops, restringe el acceso de escritura a la rama, lo que la convierte en de solo lectura.
- No permitir la omisión de la configuración anterior: elimina la posibilidad de que los administradores y los usuarios hayan concedido el permiso de protección de ramas de omisión.
- Permitir inserciones forzadas: permite a los usuarios con privilegios de inserción forzar los cambios de inserción. Al igual que con Azure DevOps, esto está pensado solo como una medida de emergencia.
- Permitir eliminaciones: permite a los usuarios con privilegios de inserción eliminar ramas protegidas. Aunque esta flexibilidad puede agilizar la administración de las ramas, también supone un riesgo de eliminación accidental o malintencionada y debe controlarse cuidadosamente para evitar la pérdida de datos y mantener la integridad de los repositorios.