Promover pacotes
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:
- Solicitar pacote: o consumidor solicita o pacote da exibição @Local.
- Verificação upstream: O Azure Artifacts verifica as fontes upstream se não estiverem no feed.
- Baixar e armazenar em cache: Pacote baixado do upstream e armazenado em cache em @Local.
- Apenas local: pacote agora disponível na exibição @Local.
- 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:
- Navegue até Artefatos: Vá para Artefatos no Azure DevOps.
- Selecione o feed: Escolha o feed que contém o pacote.
- Localizar pacote: Localize a versão do pacote para promover.
- Detalhes do pacote: Selecione o pacote para exibir detalhes.
- Botão Promover: Selecione o botão "Promover".
- Selecione o modo de exibição: Escolha o modo de exibição de destino (@Prerelease ou @Release).
- 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:
- Configurações do feed: Navegue até as configurações de feed.
- Políticas de retenção: Selecione a seção de política de retenção.
- Configurar: Defina o máximo de dias para manter os pacotes.@Local
- 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.