Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Serviços de DevOps do Azure | Azure DevOps Server | Azure DevOps Server 2022
A retenção de uma execução de pipeline por mais tempo do que as configurações de projeto definidas é tratada pela criação de concessões de retenção. As concessões de retenção temporárias geralmente são criadas por processos automáticos e concessões mais permanentes manipulando a interface do usuário ou quando o Release Management retém artefatos, mas também podem ser manipuladas por meio da API REST. Aqui estão alguns exemplos de tarefas que pode adicionar ao seu pipeline YAML para retenção.
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.
Exemplo: Anular uma janela de retenção curta ao nível do projeto
Neste exemplo, o projeto é configurado para excluir execuções de pipeline após apenas 30 dias.
Se um pipeline neste projeto for importante e as execuções deverem ser mantidas por mais de 30 dias, essa tarefa garantirá que a execução seja válida por dois anos adicionando uma nova concessão de retenção.
- task: PowerShell@2
condition: and(succeeded(), not(canceled()))
name: RetainOnSuccess
displayName: Retain on Success
inputs:
failOnStderr: true
targetType: 'inline'
script: |
$contentType = "application/json";
$headers = @{ Authorization = 'Bearer $(System.AccessToken)' };
$rawRequest = @{ daysValid = 365 * 2; definitionId = $(System.DefinitionId); ownerId = 'User:$(Build.RequestedForId)'; protectPipeline = $false; runId = $(Build.BuildId) };
$request = ConvertTo-Json @($rawRequest);
$uri = "$(System.CollectionUri)$(System.TeamProject)/_apis/build/retention/leases?api-version=6.0-preview.1";
Invoke-RestMethod -uri $uri -method POST -Headers $headers -ContentType $contentType -Body $request;
Pergunta: um pipeline pode ser retido por menos do que os valores de projeto configurados?
Não, os contratos de arrendamento não funcionam ao contrário. Se um projeto estiver configurado para ser mantido por dois anos, o sistema não removerá execuções de pipeline durante esse período. Para excluir essas execuções anteriormente, exclua-as manualmente ou use a API REST equivalente.
Exemplo: Somente execuções em ramificações nomeadas releases/* devem ser mantidas por um longo tempo
Isso é semelhante ao acima, apenas a condição precisa mudar:
- task: PowerShell@2
condition: and(succeeded(), not(canceled()), startsWith(variables['Build.SourceBranch'], 'releases/'))
name: RetainReleaseBuildOnSuccess
displayName: Retain Release Build on Success
inputs:
failOnStderr: true
targetType: 'inline'
script: |
$contentType = "application/json";
$headers = @{ Authorization = 'Bearer $(System.AccessToken)' };
$rawRequest = @{ daysValid = 365 * 2; definitionId = $(System.DefinitionId); ownerId = 'User:$(Build.RequestedForId)'; protectPipeline = $false; runId = $(Build.BuildId) };
$request = ConvertTo-Json @($rawRequest);
$uri = "$(System.CollectionUri)$(System.TeamProject)/_apis/build/retention/leases?api-version=6.0-preview.1";
Invoke-RestMethod -uri $uri -method POST -Headers $headers -ContentType $contentType -Body $request;
Exemplo: Atualização da janela de retenção para um pipeline de múltiplos estágios com base no sucesso do estágio
Considere um pipeline de dois estágios que primeiro executa uma compilação e, em seguida, uma versão. Quando bem-sucedida, a fase Build mantém a execução por três dias, mas o administrador do projeto deseja que uma fase Release bem-sucedida estenda o período para um ano.
O Build estágio pode manter o pipeline como nos exemplos acima, mas com uma adição: guardando os novos leases Id em uma variável de saída, os leases podem ser atualizados posteriormente quando o estágio de liberação for executado.
- task: PowerShell@2
condition: and(succeeded(), not(canceled()))
name: RetainOnSuccess
displayName: Retain on Success
inputs:
failOnStderr: true
targetType: 'inline'
script: |
$contentType = "application/json";
$headers = @{ Authorization = 'Bearer $(System.AccessToken)' };
$rawRequest = @{ daysValid = 365; definitionId = $(System.DefinitionId); ownerId = 'User:$(Build.RequestedForId)'; protectPipeline = $false; runId = $(Build.BuildId) };
$request = ConvertTo-Json @($rawRequest);
$uri = "$(System.CollectionUri)$(System.TeamProject)/_apis/build/retention/leases?api-version=6.0-preview.1";
$newLease = Invoke-RestMethod -uri $uri -method POST -Headers $headers -ContentType $contentType -Body $request;
$newLeaseId = $newLease.Value[0].LeaseId
echo "##vso[task.setvariable variable=newLeaseId;isOutput=true]$newLeaseId";
Para atualizar uma concessão de retenção , é necessária uma chamada de API REST diferente.
- stage: Release
dependsOn: Build
jobs:
- job: default
variables:
- name: NewLeaseId
value: $[ stageDependencies.Build.default.outputs['RetainOnSuccess.newLeaseId']]
steps:
- task: PowerShell@2
condition: and(succeeded(), not(canceled()))
name: RetainOnSuccess
displayName: Retain on Success
inputs:
failOnStderr: true
targetType: 'inline'
script: |
$contentType = "application/json";
$headers = @{ Authorization = 'Bearer $(System.AccessToken)' };
$rawRequest = @{ daysValid = 365 };
$request = ConvertTo-Json $rawRequest;
$uri = "$(System.CollectionUri)$(System.TeamProject)/_apis/build/retention/leases/$(newLeaseId)?api-version=7.1-preview.2";
Invoke-RestMethod -uri $uri -method PATCH -Headers $headers -ContentType $contentType -Body $request;
Próximos passos
Com esses exemplos, você aprendeu a usar tarefas de pipeline personalizadas para gerenciar a retenção de execução.
Você aprendeu a:
- Anular uma janela de retenção curta
- Substituir retenção para execuções em ramificações específicas
- Atualizar uma concessão de retenção quando um processo deve ser mantido por um período ainda mais prolongado