共用方式為


管線執行保留

Azure DevOps Services |Azure DevOps Server 2022 |Azure DevOps Server 2020

保留管線執行的時間超過設定 的專案設定 ,會藉由建立 保留租用來處理。 暫時保留租用通常是由自動程式所建立,以及藉由操作 UI 或Release Management保留成品時建立的永久租用,但也可以透過REST API加以操作。 以下是一些您可以新增至 yaml 管線以保留的工作範例。

必要條件

根據預設,參與者、組建管理員、專案管理員和版本管理員群組的成員都可以管理保留原則。

範例:覆寫簡短的專案層級保留視窗

在此範例中,專案設定為只在 30 天后刪除管線執行。

範例 1:專案設定保留原則

如果此專案中的管線很重要,且執行應該保留超過 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;

後續步驟

透過這些範例,您已瞭解如何使用自訂管線工作來管理執行保留期。

您已了解如何︰

  • 覆寫簡短保留時間範圍
  • 覆寫特定分支上執行的保留期
  • 當執行應保留更長的時間時更新保留租用