Definir políticas de retenção para compilações, versões e testes

Serviços de DevOps do Azure | Azure DevOps Server 2022 - Azure DevOps Server 2019

As Políticas de retenção permitem-lhe definir quanto tempo deve manter as execuções, as versões e os testes armazenados no sistema. Para economizar espaço de armazenamento, você deseja excluir execuções, testes e versões mais antigos.

As seguintes políticas de retenção estão disponíveis no Azure DevOps nas configurações do seu Project:

  1. Pipeline - Defina por quanto tempo manter artefatos, símbolos, anexos, execuções e execuções de solicitação pull.
  2. Release (classic) - Defina se deseja salvar compilações e exibir as configurações de retenção padrão e máxima.
  3. Teste - Defina por quanto tempo manter execuções, resultados e anexos de teste automatizados e manuais.

Políticas de retenção de configurações do projeto

Nota

Se você estiver usando um servidor local, também poderá especificar padrões de política de retenção para um projeto e quando as versões forem destruídas permanentemente. Saiba mais sobre a retenção de versões mais adiante neste artigo.

Pré-requisitos

Por predefinição, os membros dos grupos Contribuidores, Administradores da Compilação, Administradores de Projeto e Administradores da Versão podem gerir políticas de retenção.

Para gerir as políticas de retenção, tem de ter uma das seguintes subscrições:

Também pode comprar acesso mensal para os Planos de Teste do Azure e atribuir o nível de acesso Básico + Planos de Teste. Veja Testar o acesso por função de utilizador.

Configurar políticas de retenção

  1. Inicie sessão no seu projeto.

  2. Vá para a ícone de engrenagem guia Configurações das configurações do seu projeto.

  3. Selecione Retenção de liberação em Pipelines ou Retenção em Teste.

    • Selecione Retenção de liberação para configurar suas políticas de retenção de liberação e configurar quando excluir ou destruir permanentemente as liberações.
    • Selecione Retenção para configurar por quanto tempo manter as execuções de teste manuais e automatizadas.

    Captura de tela das configurações de retenção nas configurações do Project para DevOps 2019.

Configurar políticas de retenção

  1. Inicie sessão no seu projeto.

  2. Vá para a ícone de engrenagem guia Configurações das configurações do seu projeto.

  3. Selecione Configurações ou Retenção de liberação em Pipelines ou Retenção em Teste.

    • Selecione Configurações para configurar políticas de retenção para execuções, artefatos, símbolos, anexos e execuções de solicitação pull.
    • Selecione Retenção de liberação para configurar suas políticas de retenção de liberação e configurar quando excluir ou destruir permanentemente as liberações.
    • Selecione Retenção para configurar por quanto tempo manter as execuções de teste manuais e automatizadas.

    Captura de ecrã das definições de retenção nas definições do Project.

Importante

O Azure Pipelines não dá mais suporte a políticas de retenção por pipeline. Recomendamos o uso de regras de retenção no nível do projeto.

Definir políticas de retenção de execução

Na maioria dos casos, você não precisa reter execuções concluídas por mais do que um determinado número de dias. Usando políticas de retenção, você pode controlar quantos dias deseja manter cada execução antes de excluí-la.

  1. Vá para a ícone de engrenagem guia Configurações das configurações do seu projeto.

  2. Selecione Configurações na seção Pipelines.

    • Defina o número de dias para manter artefatos, símbolos e anexos.
    • Definir o número de dias para manter as execuções
    • Definir o número de dias para manter as execuções de pull request
    • Definir o número de execuções recentes a serem mantidas para cada pipeline

Aviso

O Azure DevOps não dá mais suporte a regras de retenção por pipeline. A única maneira de configurar políticas de retenção para YAML e pipelines clássicos é através das configurações do projeto descritas acima. Não é mais possível configurar políticas de retenção por pipeline.

A configuração do número de execuções recentes a serem mantidas para cada pipeline requer um pouco mais de explicação. A interpretação dessa configuração varia de acordo com o tipo de repositório que você cria em seu pipeline.

  • Azure Repos: o Azure Pipelines retém o número configurado de execuções mais recentes para a ramificação padrão do pipeline e para cada ramificação protegida do repositório. Uma ramificação que tenha quaisquer políticas de ramificação configuradas é considerada uma ramificação protegida.

    Como exemplo, main considere um repositório com duas ramificações e release. Imagine que é pipeline's default branch o main ramo, e o release ramo tem uma política de ramo, tornando-o um ramo protegido. Nesse caso, se você configurou a política para manter três execuções, as três últimas execuções e main as release três últimas execuções da ramificação serão mantidas. Além disso, as três últimas corridas deste gasoduto (independentemente do ramal) também são mantidas.

    Para esclarecer ainda mais essa lógica, digamos que a lista de execuções para este pipeline é a seguinte, com a execução mais recente no topo. A tabela mostra quais execuções serão mantidas se você tiver configurado para manter as três últimas execuções (ignorando o efeito da configuração de número de dias):

    Executar # Filial Retido / Não retido Porquê?
    Executar 10 main Retido Últimas 3 para principal e Últimas 3 para pipeline
    Execução 9 Filial1 Retido Últimas 3 para pipeline
    Execução 8 ramo2 Retido Últimas 3 para pipeline
    Execução 7 main Retido Últimas 3 para principal
    Execução 6 main Retido Últimas 3 para principal
    Execução 5 main Não retido Nem os 3 mais recentes para o principal, nem para o gasoduto
    Execução 4 main Não retido Nem os 3 mais recentes para o principal, nem para o gasoduto
    Execução 3 Filial1 Não retido Nem os 3 mais recentes para o principal, nem para o gasoduto
    Execução 2 Lançamento Retido Últimos 3 para lançamento
    Execução 1 main Não retido Nem os 3 mais recentes para o principal, nem para o gasoduto
  • Todos os outros repositórios Git: o Azure Pipelines retém o número configurado de execuções mais recentes para todo o pipeline.

  • TFVC: O Azure Pipelines retém o número configurado de execuções mais recentes para todo o pipeline, independentemente da ramificação.

Quais partes da execução são excluídas

As seguintes informações são excluídas quando uma execução é excluída:

  • Registos
  • Todos os artefatos de pipeline e construção
  • Todos os símbolos
  • Binários
  • Resultados do teste
  • Executar metadados
  • Rótulos de origem (TFVC) ou tags (Git)

Pacotes universais, NuGet, npm e outros pacotes não estão vinculados à retenção de pipelines.

Quando são execuções excluídas

As suas políticas de retenção são processadas uma vez por dia. O tempo que as políticas são processadas variáveis porque distribuímos o trabalho ao longo do dia para fins de balanceamento de carga. Não há opção para alterar este processo.

Uma execução será excluída se todas as seguintes condições forem verdadeiras:

  • Excede o número de dias configurado nas definições de retenção
  • Não é uma das execuções recentes conforme configurado nas configurações de retenção
  • Não está marcado para ser mantido indefinidamente
  • Não é retido por uma versão

Definir automaticamente a concessão de retenção em execuções de pipeline

As concessões de retenção são usadas para gerenciar o tempo de vida das execuções de pipeline além dos períodos de retenção configurados. As concessões de retenção podem ser adicionadas ou excluídas em um pipeline executado chamando a API de Concessão. Essa API pode ser invocada dentro do pipeline usando um script e usando variáveis predefinidas para runId e definitionId.

Uma concessão de retenção pode ser adicionada em uma execução de pipeline por um período específico. Por exemplo, uma execução de pipeline que implanta em um ambiente de teste pode ser retida por um período mais curto, enquanto uma execução implantada em um ambiente de produção pode ser mantida por mais tempo.

Definir manualmente a concessão de retenção em execuções de pipeline

Você pode definir manualmente uma execução de pipeline para ser retida usando o menu Mais ações na página Detalhes da execução do pipeline.

reter manualmente uma execução

Excluir uma execução

Você pode excluir execuções usando o menu Mais ações na página Detalhes da execução do pipeline.

Nota

Se alguma política de retenção se aplicar atualmente à execução, ela deverá ser removida antes que a execução possa ser excluída. Para obter instruções, consulte Detalhes da execução do pipeline - excluir uma execução.

Excluir uma execução

Definir políticas de retenção de versão

As políticas de retenção de liberação para um pipeline de liberação clássico determinam por quanto tempo uma versão e a execução vinculada a ela são mantidas. Usando essas políticas, você pode controlar quantos dias deseja manter cada versão depois que ela foi modificada ou implantada pela última vez e o número mínimo de versões que devem ser mantidas para cada pipeline.

O temporizador de retenção em uma versão é redefinido sempre que uma versão é modificada ou implantada em um estágio. O número mínimo de libertações a manter tem precedência sobre o número de dias. Por exemplo, se você especificar manter um mínimo de três liberações, as três mais recentes serão mantidas indefinidamente - independentemente do número de dias especificado. No entanto, você pode excluir manualmente essas versões quando não precisar mais delas. Consulte as perguntas frequentes abaixo para obter mais detalhes sobre como funciona a retenção de versão.

Como autor de um pipeline de versão, você pode personalizar políticas de retenção para versões do seu pipeline na guia Retenção .

A política de retenção para YAML e pipelines de compilação é a mesma. Você pode ver as configurações de retenção do seu pipeline em Configurações do Projeto para Pipelines na seção Configurações .

Política global de retenção de versões

Se você estiver usando um Team Foundation Server local ou Azure DevOps Server, você pode especificar padrões de política de retenção de liberação e máximos para um projeto. Você também pode especificar quando as versões são destruídas permanentemente (removidas da guia Excluído no explorador de compilação).

Configurações de retenção de liberação local

Se você estiver usando os Serviços de DevOps do Azure, poderá exibir, mas não alterar, essas configurações para seu projeto.

As configurações da política de retenção de versão global podem ser revisadas nas configurações de retenção de versão do seu projeto:

  • Serviços de DevOps do Azure: https://dev.azure.com/{organization}/{project}/_settings/release?app=ms.vss-build-web.build-release-hub-group
  • No local: https://{your_server}/tfs/{collection_name}/{project}/_admin/_apps/hub/ms.vss-releaseManagement-web.release-project-admin-hub

A política de retenção máxima define o limite superior para quanto tempo as liberações podem ser retidas para todos os pipelines de liberação. Os autores de pipelines de liberação não podem definir configurações para suas definições além dos valores especificados aqui.

A política de retenção padrão define os valores de retenção padrão para todos os pipelines de versão. Os autores de pipelines de compilação podem substituir esses valores.

A política de destruição ajuda você a manter as liberações por um determinado período de tempo depois que elas são excluídas. Essa política não pode ser substituída em pipelines de liberação individuais.

Definir políticas de retenção no nível da coleção

Para servidores locais, você também pode definir as políticas de retenção no nível da coleção com regras de retenção personalizadas. Essas políticas de retenção se aplicam aos pipelines de compilação clássicos. A página em https://{your_server}/{collection_name}/_settings/buildqueue rege seus valores máximos e valores padrão.

Uma captura de tela mostrando como configurar políticas de retenção no nível de coleção.

Use a tarefa Copiar arquivos para salvar dados por mais tempo

Você pode usar a tarefa Copiar arquivos para salvar seus dados de compilação e artefato por mais tempo do que o definido nas políticas de retenção. A tarefa Copiar arquivos é preferível à tarefa Publicar artefatos de compilação porque os dados salvos com a tarefa Publicar artefatos de compilação serão limpos e excluídos periodicamente.

- task: CopyFiles@2
  displayName: 'Copy Files to: \\mypath\storage\$(Build.BuildNumber)'
  inputs:
    SourceFolder: '$(Build.SourcesDirectory)'
    Contents: '_buildOutput/**'
    TargetFolder: '\\mypath\storage\$(Build.BuildNumber)'

FAQ

Se eu marcar uma execução ou uma liberação para ser retida indefinidamente, a política de retenção ainda se aplica?

N.º Nem a política de retenção do pipeline nem os limites máximos definidos pelo administrador são aplicados quando você marca uma execução ou liberação individual para ser retida indefinidamente. Ele permanecerá até que você pare de retê-lo indefinidamente.

Como especifico que as execuções implantadas na produção serão mantidas por mais tempo?

Se você usar versões clássicas para implantar na produção, personalize a política de retenção no pipeline de versão. Especifique o número de dias em que as versões implantadas na produção devem ser mantidas. Além disso, indique que as execuções associadas a essa liberação devem ser mantidas. Isso substituirá a política de retenção de execução.

Se você usar pipelines YAML de vários estágios para implantar na produção, a única política de retenção que você pode configurar está nas configurações do projeto. Não é possível personalizar a retenção com base no ambiente no qual a compilação é implantada.

Não marquei corridas para serem retidas indefinidamente. No entanto, vejo um grande número de corridas sendo mantidas. Como posso evitar isso?

Tal pode dever-se a uma das seguintes razões:

  • As execuções são marcadas por alguém do seu projeto para serem retidas indefinidamente.
  • As execuções são consumidas por uma versão, e a liberação mantém um bloqueio de retenção nessas execuções. Personalize a política de retenção de versão conforme explicado acima.

Se você acredita que as execuções não são mais necessárias ou se as versões já foram excluídas, então você pode excluir manualmente as execuções.

Como funciona a configuração de "liberações mínimas a manter"?

As libertações mínimas a manter são definidas ao nível das fases. Isso indica que o Azure DevOps sempre manterá o número determinado de últimas versões implantadas para um estágio, mesmo que as versões estejam fora do período de retenção. Uma versão será considerada sob versões mínimas para manter por um estágio somente quando a implantação tiver começado nesse estágio. As implantações bem-sucedidas e fracassadas são consideradas. Liberações pendentes de aprovação não são consideradas.

Como o período de retenção é decidido quando a liberação é implantada em vários estágios com diferentes períodos de retenção?

O período de retenção final é decidido considerando dias para manter as configurações de todos os estágios em que a liberação é implantada e levando no máximo dias para manter entre eles. As liberações mínimas a serem mantidas são regidas no nível do estágio e não mudam com base na liberação implantada em vários estágios ou não. Reter artefatos associados será aplicável quando a liberação for implantada em um estágio para o qual ela esteja definida como true.

Eu apaguei um estágio para o qual eu tenho alguns lançamentos antigos. Que retenção será considerada para este caso?

Como o estágio é excluído, as configurações de retenção no nível do estágio não são aplicáveis agora. O Azure DevOps voltará à retenção padrão no nível do projeto para esse caso.

Minha organização exige que mantenhamos compilações e lançamentos por mais tempo do que o permitido nas configurações. Como posso pedir uma retenção mais longa?

A única maneira de manter uma execução ou uma liberação por mais tempo do que o permitido através das configurações de retenção é marcá-la manualmente para ser retida indefinidamente. Não é possível configurar manualmente uma configuração de retenção mais longa. Entre em contato com o Suporte do Azure DevOps para obter assistência.

Você também pode explorar a possibilidade de usar as APIs REST para baixar informações e artefatos sobre as execuções e carregá-los em seu próprio armazenamento ou repositório de artefatos.

Perdi algumas corridas. Há alguma forma de as recuperar?

Se você acredita que perdeu execuções devido a um bug no serviço, crie um tíquete de suporte imediatamente para recuperar as informações perdidas. Se uma definição de compilação foi excluída manualmente mais de uma semana antes, não será possível recuperá-la. Se as execuções foram excluídas como esperado devido a uma política de retenção, não será possível recuperar as execuções perdidas.

Como faço para usar a Build.Cleanup capacidade dos agentes?

Definir uma Build.Cleanup capacidade nos agentes fará com que os trabalhos de limpeza do pool sejam direcionados apenas para esses agentes, deixando o restante livre para fazer trabalho regular. Quando uma execução de pipeline é excluída, os artefatos armazenados fora do Azure DevOps são limpos por meio de um trabalho executado nos agentes. Quando o pool de agentes fica saturado com trabalhos de limpeza, isso pode causar um problema. A solução para isso é designar um subconjunto de agentes no pool que são os agentes de limpeza. Se algum agente tiver Build.Cleanup definido, somente esses agentes executarão os trabalhos de limpeza, deixando o restante dos agentes livres para continuar executando trabalhos de pipeline. A funcionalidade de Limpeza pode ser ativada navegando até Recursos do Agente> e definindo Build.Cleanup igual a .1

O que acontece com artefatos de compartilhamento de arquivos quando a compilação é excluída

Quando uma compilação com artefatos de compartilhamento de arquivos é excluída, uma nova tarefa de compilação é enfileirada em um agente de compilação para limpar esses arquivos. Um agente é escolhido para executar essa tarefa com base nos seguintes critérios: Existe um agente com Build.Cleanup capacidade disponível? O agente que executou a compilação está disponível? Existe um agente do mesmo pool disponível? Está disponível um agente de um grupo semelhante? Existe algum agente disponível?

Os resultados de testes automatizados publicados como parte de uma versão são retidos até que a versão seja excluída?

Os resultados de teste publicados em um estágio de uma versão são retidos conforme especificado pela política de retenção configurada para os resultados do teste. Os resultados do teste não são retidos até que a liberação seja mantida. Se você precisar dos resultados do teste desde a liberação, defina as configurações de retenção para execuções de teste automatizado nas configurações do projeto de acordo com Nunca excluir. Isso garante que os resultados do teste sejam excluídos somente quando a versão for excluída.

Os resultados dos testes manuais são eliminados?

N.º Os resultados dos testes manuais não são excluídos.

Como devo proceder para preservar as tags ou etiquetas de controlo de versão?

Atenção

Todos os rótulos de controle de versão ou tags aplicados durante um pipeline de compilação que não sejam criados automaticamente a partir da tarefa Códigos-fonte serão preservados, mesmo que a compilação seja excluída. No entanto, as tags ou etiquetas de controlo da versão criadas automaticamente a partir da tarefa Origens durante uma compilação serão consideradas parte dos artefactos da compilação e serão eliminadas quando a compilação for eliminada.

Se as tags ou etiquetas de controlo de versões tiverem de ser preservadas, mesmo quando a compilação é eliminada, terão de ser aplicadas como parte de uma tarefa no pipeline, etiquetadas manualmente fora do pipeline ou a compilação deverá ser mantida indefinidamente.

O que acontece com os dutos que são consumidos em outros gasodutos?

As versões clássicas retêm pipelines que consomem automaticamente.

O que acontece com os dutos que são consumidos em outros gasodutos?

As versões clássicas retêm pipelines que consomem automaticamente. Se você estiver usando YAML, você também pode criar um pipeline YAML de vários estágios para representar sua liberação e consumir outro pipeline YAML nele como um recurso. O pipeline de recursos será retido automaticamente enquanto o pipeline de liberação for mantido.