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

Azure DevOps Services | Azure DevOps Server 2022 - Azure DevOps Server 2019

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

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

  1. Pipeline – Defina por quanto tempo os artefatos, símbolos, anexos, execuções e execuções de solicitação de pull devem ser mantidos.
  2. Versão (clássica) – Defina se deseja salvar builds e exibir as configurações de retenção padrão e máxima.
  3. Teste – Defina por quanto tempo as execuções de teste, resultados e anexos automatizados e manuais devem ser mantidos.

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

Observação

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 permanentemente destruídas. Saiba mais sobre a retenção de versão mais adiante neste artigo.

Pré-requisitos

Por padrão, os membros dos grupos Colaboradores, Administradores de Compilações, Administradores de Projeto e Administradores de Versão podem gerenciar as políticas de retenção.

Para gerenciar as políticas de retenção, você precisa ter uma das seguintes assinaturas:

Você também pode comprar o acesso mensal do Azure Test Plans e atribuir o nível de acesso Planos de Teste + Básicos. Confira Testando o acesso por função de usuário.

Configurar políticas de retenção

  1. Entre no projeto.

  2. Acesse o ícone de engrenagemguia Configurações das configurações do projeto.

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

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

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

Configurar políticas de retenção

  1. Entre no projeto.

  2. Acesse o ícone de engrenagemguia Configurações das configurações do projeto.

  3. Selecione Configurações ou Retenção de versão em Pipelines ou Retenção emTeste.

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

    Captura de tela das configurações de retenção nas Configurações do projeto.

Importante

O Azure Pipelines não dá mais suporte a políticas de retenção por pipeline. É recomendável usar 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 as execuções concluídas por mais do que um determinado número de dias. Usando políticas de retenção, é possível controlar quantos dias você deseja manter cada execução antes de excluí-la.

  1. Acesse o ícone de engrenagemguia Configurações das configurações do projeto.

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

    • Defina o número de dias para manutenção dos artefatos, símbolos e anexos.
    • Definir o número de dias para manutenção das execuções
    • Definir o número de dias para manutenção das execuções de solicitação de pull
    • 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 é por meio das configurações de 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 criado em seu pipeline.

  • Azure Repos: o Azure Pipelines retém o número configurado de execuções mais recentes do branch padrão do pipeline e de cada branch protegido do repositório. Um branch com políticas de branch configuradas é considerado um branch protegido.

    Por exemplo, considere um repositório com dois branches, main e release. Imagine que pipeline's default branch é o branch main e o branch release tem uma política de branch, tornando-o um branch protegido. Nesse caso, se você configurou a política para reter três execuções, as três execuções mais recentes de main e as três mais recentes do branch release serão retidas. Além disso, as três execuções mais recentes desse pipeline (independentemente do branch) também são retidas.

    Para esclarecer ainda mais essa lógica, digamos que a lista de execuções para esse pipeline seja a seguinte, com a execução mais recente na parte superior. A tabela mostra quais execuções serão retidas se você tiver configurado para reter as três execuções mais recentes (ignorando o efeito da configuração do número de dias):

    Executar # Branch Retido/Não retido Por quê?
    Executar 10 main Retido Três mais recentes para principal e três mais recentes para pipeline
    Executar 9 branch1 Retido Três mais recentes para pipeline
    Executar 8 branch2 Retido Três mais recentes para pipeline
    Executar 7 main Retido Três mais recentes para principal
    Executar 6 main Retido Três mais recentes para principal
    Executar 5 main Não mantido Nem os três mais recentes para principal, nem para pipeline
    Executar 4 main Não mantido Nem os três mais recentes para principal, nem para pipeline
    Executar 3 branch1 Não mantido Nem os três mais recentes para principal, nem para pipeline
    Executar 2 release Retido Três mais recentes para lançamento
    Executar 1 main Não mantido Nem os três mais recentes para principal, nem para pipeline
  • 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 do branch.

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

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

  • Logs
  • Todos os artefatos de pipeline e build
  • Todos os símbolos
  • Binários
  • Resultados do teste
  • Executar metadados
  • Rótulos (TFVC) ou marcas (Git) de origem

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

Quando as execuções são excluídas

Suas políticas de retenção são processadas uma vez por dia. O tempo em que as políticas obtêm variáveis processadas porque espalhamos o trabalho ao longo do dia para fins de balanceamento de carga. Não há opção para alterar esse processo.

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

  • Excede o número de dias definido nas configurações de retenção
  • Não é uma das execuções recentes, conforme definido nas configurações de retenção
  • Não está marcada para ser retida indefinidamente
  • Não é retida 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 uma execução de pipeline chamando a API de Concessão. Essa API pode ser invocada no 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 é implantada em um ambiente de teste pode ser retida por um período mais curto, enquanto uma execução de implantação no ambiente de produção pode ser retida 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 a 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.

Observação

Se alguma política de retenção atualmente se aplicar à execução, elas deverão ser removidas antes que a execução possa ser excluída. Para obter instruções, confira 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 versão para um pipeline de lançamento clássico determinam por quanto tempo uma versão e a execução vinculada a ela devem ser retidas. Usando essas políticas, você pode controlar por quantos dias deseja manter cada versão após a última modificação ou implantação e o número mínimo de versões que devem ser retidas 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. A configuração do número mínimo de versões a serem retidas tem precedência sobre o número de dias. Por exemplo, se você especificar para reter um mínimo de três versões, as três mais recentes serão retidas 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 lançamento, você pode personalizar políticas de retenção para versões do pipeline na guia Retenção.

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

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

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

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

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

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

  • Azure DevOps Services: https://dev.azure.com/{organization}/{project}/_settings/release?app=ms.vss-build-web.build-release-hub-group
  • 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 de quanto tempo as versões podem ser retidas para todos os pipelines de lançamento. Os autores de pipelines de lançamento 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 lançamento. Os autores de pipelines de build podem substituir esses valores.

A política de destruição ajuda você a manter as versõ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 lançamento 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 a pipelines de build clássicos. A página em https://{your_server}/{collection_name}/_settings/buildqueue rege os valores máximo e padrão.

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

Usar a tarefa Copiar Arquivos para salvar dados por mais tempo

Você pode usar a tarefa Copiar Arquivos para salvar seus dados de build 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 Build porque os dados salvos com a tarefa Publicar Artefatos de Build serão periodicamente limpos e excluídos.

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

Perguntas frequentes

Se eu marcar uma execução ou uma versão a ser retida indefinidamente, a política de retenção ainda se aplicará?

Não. 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 individual ou uma versão a ser retida indefinidamente. Ela permanecerá até que você pare de retê-la indefinidamente.

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

Se você usar versões clássicas para implantar em produção, personalize a política de retenção no pipeline de lançamento. Especifique o número de dias em que as versões implantadas na produção devem ser retidas. Além disso, indique que as execuções associadas a essa versão devem ser retidas. 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 definir estará nas configurações do projeto. Não é possível personalizar a retenção com base no ambiente no qual o build é implantado.

Eu não marquei execuções para serem retidas indefinidamente. No entanto, vejo um grande número de execuções sendo retidas. Como posso evitar isso?

Isso pode ocorrer por um dos seguintes motivos:

  • As execuções são marcadas por alguém em seu projeto para serem retidas indefinidamente.
  • As execuções são consumidas por uma versão e a versã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, você pode excluir manualmente as execuções.

Como funciona a configuração de "versões mínimas a serem mantidas"?

As versões mínimas a serem mantidas são definidas no nível do estágio. Ele indica que o Azure DevOps sempre manterá o número determinado de versões implantadas pela última fase, mesmo que as versões estejam fora do período de retenção. Uma versão será considerada em versões mínimas a serem mantidas para um estágio somente quando a implantação for iniciada nesse estágio. As implantações bem-sucedidas e com falha são consideradas. Versões pendentes de aprovação não são consideradas.

Como o período de retenção é decidido quando a versão é implantada em vários estágios com um período de retenção diferente?

O período de retenção final é decidido considerando dias para manter as configurações de todos os estágios em que a versão é implantada e o máximo de dias para manter entre elas. O mínimo de versões a serem mantidas é regido no nível do estágio e não é alterado com base na versão implantada em vários estágios ou não. A retenção de artefatos associados será aplicável quando a versão for implantada em um estágio para o qual ele é definido como true.

Exclui um estágio para o qual tenho algumas versões antigas. Qual retenção será considerada nesse caso?

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

Minha organização exige que mantenhamos builds e versões por mais tempo do que o permitido nas configurações. Como posso solicitar uma retenção mais longa?

A única maneira de reter uma execução ou uma versão mais longa do que o permitido por meio de configurações de retenção é marcá-la manualmente para ser retida indefinidamente. Não é possível definir uma configuração de retenção mais longa manualmente. Entre em contato com o Suporte do Azure DevOps para obter ajuda.

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

Perdi algumas execuções. Há uma maneira de recuperá-los?

Se você acredita que perdeu as 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 build tiver sido excluída manualmente mais de uma semana antes, não será possível recuperá-la. Se as execuções foram excluídas conforme o esperado devido a uma política de retenção, não será possível recuperar as execuções perdidas.

Como usar a funcionalidade Build.Cleanup dos agentes?

A definição de uma funcionalidade Build.Cleanup em agentes fará com que os trabalhos de limpeza do pool sejam direcionados apenas para esses agentes, deixando o restante livre para trabalhos regulares. 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 Limpeza pode ser habilitada acessando Agente>Funcionalidades e definindo Build.Cleanup igual a 1.

O que acontece com o compartilhamento de arquivos do Artifacts quando o build é excluído

Quando um build com compartilhamento de arquivos do Artifacts é excluído, uma nova tarefa de build é colocada na fila em um agente de build para limpeza desses arquivos. Um agente é escolhido para executar essa tarefa com base nos seguintes critérios: Há um agente com funcionalidade Build.Cleanup disponível? O agente que executou o build está disponível? Um agente do mesmo pool está disponível? Um agente de um pool semelhante está disponível? Algum agente está disponível?

Os resultados do teste automatizado que são publicados como parte de uma versão são mantidos até que a versão seja excluída?

Os resultados do 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 versão seja mantida. Se você precisar dos resultados do teste desde a versão, defina as configurações de retenção para execuções de teste automatizado nas configurações do Projeto como Nunca excluir. Isso garante que os resultados do teste sejam excluídos somente quando a versão for excluída.

Os resultados do teste manual são excluídos?

Não. Os resultados do teste manual não são excluídos.

Como fazer para preservar meus rótulos ou marcas de controle de versão?

Cuidado

Quaisquer rótulos ou marcas de controle de versão aplicados durante um pipeline de build que não sejam criados automaticamente a partir da tarefa Fontes serão preservados, mesmo que a build seja excluída. No entanto, todos os rótulos de controle de versão ou marcas que são criados automaticamente a partir da tarefa Fontes durante uma compilação são considerados parte dos artefatos da compilação e serão excluídos quando a compilação for excluída.

Se os rótulos ou marcas de controle de versão precisarem ser preservados, mesmo quando a compilação for excluída, eles precisarão ser aplicados como parte de uma tarefa no pipeline, rotulados manualmente fora do pipeline ou a compilação precisará ser mantida indefinidamente.

O que acontece com pipelines consumidos em outros pipelines?

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

O que acontece com pipelines consumidos em outros pipelines?

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