Introducción
El control de versiones es un aspecto fundamental del desarrollo de software y la administración de paquetes. A medida que evoluciona el software, el versionado adecuado garantiza que las dependencias se sigan con precisión, los cambios se comuniquen eficazmente y los sistemas permanezcan estables.
¿Por qué importa el control de versiones?
El software cambia con el tiempo. Los requisitos del software no se mantienen iguales.
Evolución del software:
- Crecimiento de la funcionalidad: La funcionalidad que ofrece y su uso aumentará, cambiará y adaptará en función de los comentarios.
- Evolución de la plataforma: El hospedaje de una aplicación también puede evolucionar, con nuevos sistemas operativos, marcos nuevos y versiones.
- Correcciones de errores: La implementación original puede contener fallos y errores.
- Cambio continuo: Independientemente del motivo del cambio, es poco probable que el software sea estable y no sea necesario cambiar.
Impacto en la dependencia:
Dado que el software que construyes toma dependencias de otros componentes, lo mismo ocurre con los componentes y paquetes que construyes o utilizas mientras desarrollas tu software.
El control de versiones correcto es esencial para mantener un código base para realizar un seguimiento de qué parte de software se está usando actualmente.
Control de versiones y administración de dependencias
El control de versiones también es relevante para la administración de dependencias, ya que se relaciona con las versiones de los paquetes y los componentes que contienen.
Seguimiento de dependencias:
Cada dependencia se identifica por su nombre y versión. Permite realizar un seguimiento de los paquetes exactos que se usan.
- Identificación única: Name + version identifica de forma única un paquete.
- Ciclo de vida independiente: Cada uno de los paquetes tiene su ciclo de vida y tasa de cambio.
- Control de versiones: Permite un control preciso sobre qué versiones de paquete se usan.
Ventajas del control de versiones adecuado:
- Compilaciones reproducibles: Asegúrese de que las compilaciones generan resultados coherentes.
- Resolución de dependencias: Los administradores de paquetes pueden resolver las versiones correctas.
- Evaluación del impacto: Comprenda el ámbito de los cambios en las nuevas versiones.
- Funcionalidad de reversión: Vuelva a versiones anteriores cuando surjan problemas.
Paquetes inmutables
A medida que los paquetes obtienen nuevas versiones, el código base puede elegir cuándo usar una nueva versión de los paquetes que consume.
Especificación de versión
Para ello, especifica la versión específica del paquete que requiere. Esto implica que los propios paquetes siempre deben tener una nueva versión cuando cambien.
Por qué importa la inmutabilidad:
Cada vez que se publica un paquete en una fuente, no se debe permitir que vuelva a cambiar. Si se cambia, corre el riesgo de introducir posibles cambios importantes en el código.
Principio básico:
En esencia, un paquete publicado es inmutable.
Reglas de inmutabilidad de paquetes
No se permite reemplazar o actualizar una versión existente de un paquete. La mayoría de las fuentes de paquetes no permiten realizar operaciones que cambiarían la versión actual.
Impacto de la inmutabilidad:
- Fiabilidad: Los consumidores pueden confiar en que una versión no cambia inesperadamente.
- Consistencia: Todos los consumidores obtienen el mismo paquete para una versión determinada.
- Seguridad: Evita la modificación malintencionada de las versiones existentes.
- Auditabilidad: El historial de versiones permanece intacto y rastreable.
Progresión de versiones
Independientemente del tamaño del cambio, un paquete solo se puede actualizar introduciendo una nueva versión.
La nueva versión debe indicar el tipo de cambio y el impacto que podría tener.
La numeración de versiones comunica:
- Ámbito de los cambios: Actualizaciones principales, secundarias o de revisión.
- Compatibilidad: cambios importantes frente a cambios no importantes.
- Nivel de calidad: Versión preliminar frente a versión estable.
- Objetivo: Qué pretende lograr la actualización.
Introducción al módulo
En este módulo se explican las estrategias de control de versiones para el empaquetado, los procedimientos recomendados para el control de versiones y la promoción de paquetes.
Temas tratados:
- Aspectos básicos del control de versiones de artefactos: Descripción de los tipos y esquemas de versión.
- Control de versiones semántico: Adopción de SemVer 2.0 para una comunicación coherente.
- Vistas de Azure Artifacts: uso de las vistas @Local, @Prerelease y @Release.
- Promoción de paquetes: Transferir paquetes entre niveles de calidad.
- Control de versiones automatizado: inserción de paquetes desde canalizaciones de CI/CD.
- Procedimientos recomendados: Implementación de estrategias de control de versiones eficaces.
Objetivos de aprendizaje
Después de completar este módulo, los alumnos y profesionales pueden:
- Descripción de la importancia del control de versiones: Reconozca por qué el control de versiones adecuado es fundamental para la administración de dependencias y la estabilidad del software.
- Implementar estrategias de control de versiones: Diseñe y aplique esquemas efectivos de numeración de versiones para los paquetes.
- Usa el versionado semántico: Aplica los principios de Versionado Semántico (SemVer 2.0) para una comunicación coherente de las versiones.
- Administrar la calidad del paquete: Use las vistas de Azure Artifacts para separar los paquetes por nivel de calidad.
- Promoción de paquetes: traslado de paquetes por etapas de control de calidad desde la versión preliminar hasta la producción.
- Automatización del control de versiones: Inserte paquetes desde canalizaciones de compilación con los números de versión adecuados.
- Aplicar procedimientos recomendados: Siga los estándares del sector para la administración de versiones y paquetes.
Prerrequisitos
- Descripción de DevOps: Conocimientos básicos de lo que es DevOps y sus conceptos.
- Conocimientos de control de versiones: La familiaridad con los principios de control de versiones es útil, pero no es necesaria.
- Experiencia de entrega de software: Beneficioso para tener experiencia en una organización que entrega software.
- Acceso a Azure DevOps: Debe crear una organización de Azure DevOps y un proyecto de equipo para algunos ejercicios. Si aún no lo tiene, consulte:
- Conceptos básicos de administración de paquetes: Descripción de los paquetes, las fuentes y la administración de dependencias de los módulos anteriores.