Promover pacotes

Concluído

O Azure Artifacts permite atribuir pacotes a exibições para indicar que uma versão é de um determinado nível de qualidade.

Ao promover seletivamente pacotes, você pode planejar quando os pacotes tiverem determinada qualidade e estiverem prontos para serem liberados e dar suporte aos consumidores.

Conceitos básicos da promoção de pacotes

Você pode promover pacotes para uma das exibições disponíveis como indicador de qualidade.

Conceito de promoção:

  • Portões de qualidade: As exibições representam diferentes níveis de qualidade.
  • Ação explícita: A promoção é uma decisão explícita.
  • Nenhuma alteração de versão: A versão do pacote permanece a mesma.
  • Alteração de metadados: Somente a associação de exibição é alterada.

Visualizações padrão para promoção

As duas exibições Lançamento e Pré-lançamento podem ser suficientes, mas você pode criar mais exibições quando quiser níveis de qualidade mais granulares, se necessário, como alpha e beta.

Fluxos de trabalho comuns de promoção:

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

Regras de visibilidade do pacote

Os pacotes sempre serão exibidos na visualização Local, mas apenas em uma visualização específica depois de serem promovidos.

Listagem de pacotes baseada em visualização

Dependendo da URL usada para se conectar ao feed, os pacotes disponíveis serão listados.

Matriz de visibilidade:

Estado do pacote @Local @Prerelease @Release
Acabou de publicar Yes Não Não
Promovido a Pré-lançamento Yes Yes Não
Promovido a Lançamento Yes Yes Yes

Principais princípios:

  • @Local sempre mostra tudo: Cada pacote aparece em @Local independentemente da promoção.
  • Outras exibições exigem promoção: Os pacotes devem ser promovidos explicitamente para aparecerem em outras exibições.
  • Visibilidade cumulativa: Promover para @Release não remove de @Prerelease.

Fontes e visões upstream

As fontes upstream só serão avaliadas ao usar a exibição @Local do feed.

Fluxo de trabalho do pacote upstream

Depois de serem baixados e armazenados em cache na exibição @Local, você poderá ver e resolver os pacotes em outras exibições após serem promovidos.

Ciclo de vida do pacote upstream:

  1. Solicitar pacote: o consumidor solicita o pacote da exibição @Local.
  2. Verificação upstream: O Azure Artifacts verifica as fontes upstream se não estiverem no feed.
  3. Baixar e armazenar em cache: Pacote baixado do upstream e armazenado em cache em @Local.
  4. Apenas local: pacote agora disponível na exibição @Local.
  5. Promoção: O pacote pode ser promovido para os modos de exibição @Prerelease ou @Release.

Exemplo de fluxo de trabalho:

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:

  • Apenas upstream com @Local: outras exibições não disparam a avaliação da origem upstream.
  • Cache primeiro: depois de armazenado em cache, o pacote é tratado como qualquer outro pacote do feed.
  • Controle de promoção: controlar quais pacotes upstream são aprovados para produção.

Decidindo quando promover

Cabe a você decidir como e quando promover pacotes para uma exibição específica.

Critérios de promoção

Gatilhos comuns de promoção:

Promover para @Prerelease

  • Sucesso na criação: pacote criado com êxito no pipeline de CI.
  • Testes de unidade aprovados: Todos os testes de unidade são aprovados.
  • Qualidade do código: Critérios de qualidade de código cumpridos (cobertura, análise estática).
  • Validação inicial: Testes básicos de fumaça aprovados.

Promover para @Release

  • Testes de integração: Testes de integração aprovados com êxito.
  • Aprovação de QA: A equipe de garantia de qualidade aprova.
  • Verificação de segurança: Verificação de vulnerabilidades de segurança aprovada.
  • Desempenho validado: Os testes de desempenho atendem aos requisitos.
  • Documentação concluída: Notas de versão e documentação finalizadas.

Promoção manual versus automatizada

Promoção manual:

  • Julgamento humano: Requer decisão humana.
  • Critérios complexos: Quando os critérios são difíceis de automatizar.
  • Pacotes de alto risco: Pacotes críticos que exigem um escrutínio extra.

Promoção automatizada:

  • Critérios consistentes: Quando os critérios são claros e testáveis.
  • Versões frequentes: Equipes de desenvolvimento ágeis.
  • Pacotes de menor risco: Bibliotecas internas com boa cobertura de teste.

Automatizando a promoção de pacotes

Esse processo pode ser automatizado usando uma tarefa do Azure Pipelines como parte do pipeline de build.

Usando o Azure Pipelines para promoção

Tarefa do Azure Pipelines para promoção:

# 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

Exemplo de pipeline de vários estágios

Pipeline completo com portões de promoção:

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

Promoção manual por meio da interface da Web

Promover pacotes por meio do portal do Azure DevOps:

  1. Navegue até Artefatos: Vá para Artefatos no Azure DevOps.
  2. Selecione o feed: Escolha o feed que contém o pacote.
  3. Localizar pacote: Localize a versão do pacote para promover.
  4. Detalhes do pacote: Selecione o pacote para exibir detalhes.
  5. Botão Promover: Selecione o botão "Promover".
  6. Selecione o modo de exibição: Escolha o modo de exibição de destino (@Prerelease ou @Release).
  7. Confirmar: Confirme a promoção.

Políticas de promoção e retenção

Os pacotes que foram promovidos a uma exibição não serão excluídos com base nas políticas de retenção.

Proteção de retenção de dados

A promoção fornece proteção de retenção:

  • @Pacotes locais: Sujeito a políticas de retenção.
  • Pacotes promovidos: Protegidos contra exclusão automática.
  • Armazenamento de longo prazo: Pacotes liberados mantidos indefinidamente.

Comportamento da política de retenção:

View Política de Retenção Protegido
Somente @Local É aplicável Não
@Prerelease Aplica-se a @Local, não @Prerelease Yes
@Release Aplica-se a @Local, não @Release Yes

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

Configurando políticas de retenção

Definir políticas de retenção por feed:

  1. Configurações do feed: Navegue até as configurações de feed.
  2. Políticas de retenção: Selecione a seção de política de retenção.
  3. Configurar: Defina o máximo de dias para manter os pacotes.@Local
  4. Salvar: Aplique a política.

Práticas recomendadas:

  • Promover pacotes importantes: Certifique-se de que os pacotes importantes sejam promovidos.
  • Limpeza regular: Permitir que as políticas de retenção limpem pacotes não promovidos.
  • Balancear o armazenamento: Balancear entre os custos de armazenamento e as necessidades de retenção.

Práticas recomendadas de promoção

Critérios claros:

  • Critérios de promoção de documentos: Defina o que qualifica um pacote para cada exibição.
  • Aplicativo consistente: Aplique critérios consistentemente em todos os pacotes.
  • Alinhamento da equipe: Verifique se a equipe entende os fluxos de trabalho de promoção.

Automação:

  • Automatize quando possível: Automatize a promoção para critérios claros.
  • Portas manuais para pacotes críticos: use a aprovação manual para promoções de produção.
  • Teste antes da promoção: Sempre teste antes de promover.

Comunicação:

  • Notas sobre a versão: incluir notas sobre a versão ao promover para @Release.
  • Logs de alterações: Mantenha um registro de alterações do que foi modificado em cada versão.
  • Notificações: Notifique os consumidores quando os pacotes são promovidos a @Release.

Estratégia de reversão:

  • Mantenha as versões anteriores: Não exclua versões anteriores @Release .
  • Reversão rápida: Permitir que os consumidores revertam rapidamente para versões anteriores.
  • Fixação de versão: Dê suporte aos consumidores que aderem a versões específicas.

Monitoramento de promoções de pacotes

Acompanhe o histórico de promoção:

  • Logs de auditoria: O Azure DevOps registra todas as atividades de promoção.
  • Histórico de pacotes: Exibir o histórico de promoção para cada pacote.
  • Relatórios: Gere relatórios sobre padrões de promoção.

Métricas a serem controladas:

  • Tempo para promoção: quanto tempo de @Local para @Release.
  • Falhas de promoção: Pacotes que falham nos critérios de promoção.
  • Taxa de reversão: Com que frequência os pacotes precisam ser revertidos.
  • Velocidade de promoção: Número de promoções por período de tempo.