Promoción de paquetes

Completado

Azure Artifacts tiene la noción de promover paquetes a vistas para indicar que una versión es de un nivel de calidad determinado.

Al promover de forma selectiva los paquetes, puede planear cuándo los paquetes tienen una determinada calidad y están listos para ser lanzados y apoyados por los consumidores.

Aspectos básicos de la promoción de paquetes

Puede promover paquetes a una de las vistas disponibles como indicador de calidad.

Concepto de promoción:

  • Puertas de calidad: Las vistas representan diferentes niveles de calidad.
  • Acción explícita: La promoción es una decisión explícita.
  • Sin cambio de versión: La versión del paquete sigue siendo la misma.
  • Cambio de metadatos: Solo cambia la asociación de vista.

Vistas predeterminadas para la promoción

Las dos vistas de versión de lanzamiento y versión preliminar pueden ser suficientes, pero puede crear más vistas cuando desee niveles de calidad más específicos si es necesario, como alpha y beta.

Flujos de trabajo de promoción comunes:

@Local → @Prerelease → @Release
@Local → @Alpha → @Beta → @RC → @Release

Reglas de visibilidad de paquetes

Los paquetes siempre se mostrarán en la vista Local, pero solo en una vista específica después de ser promovidos.

Lista de paquetes basada en vistas

En función de la dirección URL usada para conectarse a la fuente, se mostrarán los paquetes disponibles.

Matriz de visibilidad:

Estado del paquete @Local @Prerelease @Release
Acaba de publicar No No
Promocionado a versión preliminar No
Ascendido a versión

Principios clave:

  • @Local siempre muestra todo: Cada paquete aparece en @Local independientemente de la promoción.
  • Es necesario promocionar otras vistas: Los paquetes deben ser promocionados explícitamente para que aparezcan en otras vistas.
  • Visibilidad acumulativa: La promoción a @Release no quita de @Prerelease.

Fuentes y vistas de datos iniciales

Los orígenes ascendentes solo se evaluarán cuando se use la vista @Local de la fuente.

Flujo de trabajo del paquete ascendente

Una vez descargados y copiados en caché en la vista @Local, puede ver y resolver los paquetes en otras vistas después de promoverlos a estas.

Ciclo de vida del paquete fuente:

  1. Paquete de solicitud: el consumidor solicita un paquete desde la vista @Local.
  2. Verificación de fuentes anteriores: Azure Artifacts comprueba las fuentes superiores si no están disponibles en el feed.
  3. Descargar y almacenar en caché: Paquete descargado de la cadena ascendente y almacenada en caché en @Local.
  4. Solo local: ahora el paquete está disponible en la vista @Local.
  5. Promoción: El paquete se puede promocionar a las vistas de @Prerelease o @Release.

Flujo de trabajo de ejemplo:

Developer requests lodash@4.17.21 from @Local view
↓
Azure Artifacts checks npmjs.com (upstream source)
↓
Package downloaded and cached in @Local view
↓
Package available in feed, can be promoted
↓
Promote to @Release for production use

Notas importantes:

  • Solo ascendente con @Local: otras vistas no activan la evaluación de la fuente ascendente.
  • Caché primero: una vez almacenado en caché, el paquete se trata como cualquier otro paquete de fuente.
  • Control de promoción: controle qué paquetes ascendentes se aprueban para producción.

Decidir cuándo promover

Es decisión del usuario decidir cómo y cuándo promover paquetes a una vista específica.

Criterios de promoción

Desencadenadores de promoción comunes:

Promover a @Prerelease

  • Creación correcta: paquete creado correctamente en la canalización de CI.
  • Pruebas unitarias superadas: Se superan todas las pruebas unitarias.
  • Calidad del código: Criterios de calidad del código que se cumplen (cobertura, análisis estático).
  • Validación inicial: Pruebas básicas de humo superadas.

Promover a @Release

  • Pruebas de integración: Pruebas de integración superadas correctamente.
  • Aprobación de QA: El equipo de control de calidad aprueba.
  • Examen de seguridad: Examen de vulnerabilidades de seguridad pasado.
  • Rendimiento validado: Las pruebas de rendimiento cumplen los requisitos.
  • Documentación completa: Notas de lanzamiento y documentación completas.

Promoción manual frente a automatizada

Promoción manual:

  • Juicio humano: Requiere decisión humana.
  • Criterios complejos: Cuando los criterios son difíciles de automatizar.
  • Paquetes de alto riesgo: Paquetes críticos que requieren un examen adicional.

Promoción automatizada:

  • Criterios coherentes: Cuando los criterios son claros y comprobables.
  • Versiones frecuentes: Equipos de desarrollo rápidos.
  • Paquetes de menor riesgo: Bibliotecas internas con una buena cobertura de pruebas.

Automatización de la promoción de paquetes

Este proceso se puede automatizar mediante una tarea de Azure Pipelines como parte de la canalización de compilación.

Uso de Azure Pipelines para la promoción

Tarea de Azure Pipelines para la promoción:

# Promote package to Prerelease view
- task: UniversalPackages@0
  inputs:
    command: "publish"
    publishDirectory: "$(Build.ArtifactStagingDirectory)"
    feedsToUsePublish: "internal"
    vstsFeedPublish: "MyFeed"
    vstsFeedPackagePublish: "my-package"
    packagePublishDescription: "Package from build $(Build.BuildNumber)"

# Promote to Release view after tests
- task: AzureCLI@2
  inputs:
    azureSubscription: "Azure Subscription"
    scriptType: "bash"
    scriptLocation: "inlineScript"
    inlineScript: |
      az artifacts universal promote \
        --organization https://dev.azure.com/MyOrg \
        --feed MyFeed \
        --name my-package \
        --version $(packageVersion) \
        --view Release

Ejemplo de canalización de varias fases

Tubería completa con puertas de promoción:

trigger:
  - main

stages:
  # Build and publish to Local
  - stage: Build
    jobs:
      - job: BuildPackage
        steps:
          - script: dotnet pack -o $(Build.ArtifactStagingDirectory)
            displayName: "Build package"

          - task: NuGetCommand@2
            inputs:
              command: "push"
              packagesToPush: "$(Build.ArtifactStagingDirectory)/**/*.nupkg"
              nuGetFeedType: "internal"
              publishVstsFeed: "MyFeed"

  # Promote to Prerelease after unit tests
  - stage: PromoteToPrerelease
    dependsOn: Build
    jobs:
      - job: RunTests
        steps:
          - script: dotnet test
            displayName: "Run unit tests"

          - task: AzureCLI@2
            displayName: "Promote to Prerelease"
            inputs:
              azureSubscription: "Azure Subscription"
              scriptType: "bash"
              scriptLocation: "inlineScript"
              inlineScript: |
                az artifacts universal promote \
                  --organization https://dev.azure.com/MyOrg \
                  --feed MyFeed \
                  --name MyPackage \
                  --version $(Build.BuildNumber) \
                  --view Prerelease

  # Promote to Release after integration tests and approval
  - stage: PromoteToRelease
    dependsOn: PromoteToPrerelease
    jobs:
      - job: IntegrationTests
        steps:
          - script: dotnet test --filter Category=Integration
            displayName: "Run integration tests"

      - deployment: PromoteToRelease
        dependsOn: IntegrationTests
        environment: "Production-Approval"
        strategy:
          runOnce:
            deploy:
              steps:
                - task: AzureCLI@2
                  displayName: "Promote to Release"
                  inputs:
                    azureSubscription: "Azure Subscription"
                    scriptType: "bash"
                    scriptLocation: "inlineScript"
                    inlineScript: |
                      az artifacts universal promote \
                        --organization https://dev.azure.com/MyOrg \
                        --feed MyFeed \
                        --name MyPackage \
                        --version $(Build.BuildNumber) \
                        --view Release

Promoción manual a través de la interfaz web

Promoción de paquetes a través del portal de Azure DevOps:

  1. Vaya a Artefactos: Vaya a Artefactos en Azure DevOps.
  2. Seleccionar canal: Elija el canal que contiene el paquete.
  3. Buscar paquete: Busque la versión del paquete que se va a promover.
  4. Detalles del paquete: Seleccione el paquete para ver los detalles.
  5. Botón Promover: Seleccione el botón "Promover".
  6. Seleccionar vista: Elija la vista de destino (@Prerelease o @Release).
  7. Confirmar: Confirme la promoción.

Directivas de promoción y retención

Los paquetes que se promocionen a una vista no se eliminan según las directivas de retención.

Protección de retención

La promoción proporciona protección de retención:

  • @Paquetes locales: Sujeto a directivas de retención.
  • Paquetes promocionados: Protegido contra la eliminación automática.
  • Almacenamiento a largo plazo: Los paquetes liberados se mantienen indefinidamente.

Comportamiento de la política de retención:

Ver Directiva de retención Protegido
Solo @Local Se aplica No
@Prerelease Se aplica a @Local, no @Prerelease
@Release Se aplica a @Local, no @Release

Example:

Feed retention policy: Keep only last 30 days in @Local

Package version 1.0.0:
- Published to @Local on Day 1
- Promoted to @Release on Day 5
- Day 31: Still available because promoted to @Release
- Would be deleted if not promoted

Configuración de directivas de retención

Establecer directivas de retención por fuente:

  1. Configuración de fuente: Vaya a la configuración de fuente.
  2. Directivas de retención: Seleccione la sección Directiva de retención.
  3. Configurar: Establezca los días máximos para mantener los paquetes en @Local.
  4. Guardar: aplicación de la directiva.

Procedimientos recomendados:

  • Promover paquetes importantes: Asegúrese de que se promocionan paquetes importantes.
  • Limpieza normal: deje que las directivas de retención limpien los paquetes no promocionados.
  • Equilibrar el almacenamiento: Equilibrio entre los costos de almacenamiento y las necesidades de retención.

Procedimientos recomendados de promoción

Criterios claros:

  • Criterios de promoción de documentos: defina lo que califica un paquete para cada vista.
  • Aplicación coherente: Aplicar criterios de forma coherente en todos los paquetes.
  • Alineación del equipo: Asegúrese de que el equipo comprende los flujos de trabajo de promoción.

Automatización:

  • Automatizar siempre que sea posible: Automatizar la promoción para criterios claros.
  • Puertas manuales para paquetes críticos: use la aprobación manual para promociones de producción.
  • Pruebas antes de la promoción: Pruebe siempre antes de promocionar.

Comunicación:

  • Notas de la versión: incluya notas de la versión al promocionar a @Release.
  • Registros de cambios: Mantenga el registro de cambios de lo que ha cambiado en cada versión.
  • Notificaciones: Notificar a los consumidores cuando los paquetes se promueven a @Release.

Estrategia de reversión:

  • Mantener versiones anteriores: No elimine las versiones anteriores @Release .
  • Reversión rápida: Permitir que los consumidores vuelvan rápidamente a versiones anteriores.
  • Fijación de versiones: Admitir que los usuarios se fijen a versiones específicas.

Supervisión de promociones de paquetes

Seguimiento del historial de promociones:

  • Registros de auditoría: Azure DevOps registra todas las actividades de promoción.
  • Historial de paquetes: Ver el historial de promociones de cada paquete.
  • Informes: Generar informes sobre patrones de promoción.

Métricas para realizar el seguimiento:

  • Tiempo para promover: Cuánto tiempo de @Local a @Release.
  • Errores de promoción: Paquetes que no cumplen los criterios de promoción.
  • Tasa de reversión: Frecuencia con la que se deben revertir los paquetes.
  • Velocidad de promoción: Número de promociones por período de tiempo.