管線執行保留
Azure DevOps Services |Azure DevOps Server 2022 |Azure DevOps Server 2020
保留管線執行的時間超過設定 的專案設定 ,會藉由建立 保留租用來處理。 暫時保留租用通常是由自動程式所建立,以及藉由操作 UI 或Release Management保留成品時建立的永久租用,但也可以透過REST API加以操作。 以下是一些您可以新增至 yaml 管線以保留的工作範例。
必要條件
根據預設,參與者、組建管理員、專案管理員和版本管理員群組的成員都可以管理保留原則。
範例:覆寫簡短的專案層級保留視窗
在此範例中,專案設定為只在 30 天后刪除管線執行。
如果此專案中的管線很重要,且執行應該保留超過 30 天,此工作會 新增保留租用,以確保執行有效兩年。
- 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;
問題:管線可以保留 小於 設定的專案值嗎?
否,租用無法在反向運作。 如果專案設定為保留兩年,管線執行系統將不會移除執行兩年。 若要稍早刪除這些執行,請手動刪除它們或使用對等的 REST API。
範例:只在名為 releases/*
的分支上執行,應該保留很長的時間
這類似于上述,只有條件需要變更:
- 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;
範例:根據階段成功更新多階段管線的保留時間範圍
請考慮先執行組建和發行的兩階段管線。 成功時, Build
階段會保留執行三天,但專案管理員希望成功 Release
階段將租用延長至一年。
階段 Build
可以保留上述範例中的管線,但有一個新增專案:藉由將新的租用 Id
儲存在輸出變數中,稍後可以在發行階段執行時更新租用。
- 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";
若要 更新 保留租用 ,需要不同的 REST API 呼叫。
- 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;
後續步驟
透過這些範例,您已瞭解如何使用自訂管線工作來管理執行保留期。
您已了解如何︰
- 覆寫簡短保留時間範圍
- 覆寫特定分支上執行的保留期
- 當執行應保留更長的時間時更新保留租用