다음을 통해 공유


파이프라인 실행 보존

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

구성된 프로젝트 설정 보다 오랫동안 파이프라인 실행을 유지하면 보존 임대를 만들어 처리됩니다. 임시 보존 임대는 UI를 조작하거나 Release Management 아티팩트가 보존되는 경우 자동 프로세스 및 영구 임대에 의해 생성되는 경우가 많지만 REST API를 통해 조작할 수도 있습니다. 다음은 보존을 위해 yaml 파이프라인에 추가할 수 있는 작업의 몇 가지 예입니다.

필수 구성 요소

기본적으로 기여자, 빌드 관리자, 프로젝트 관리자 및 릴리스 관리자 그룹의 구성원은 보존 정책을 관리할 수 있습니다.

예: 짧은 프로젝트 수준 보존 기간 재정의

이 예제에서 프로젝트는 30일 후에만 파이프라인 실행을 삭제하도록 구성됩니다.

예제 1: 프로젝트 설정 보존 정책

이 프로젝트의 파이프라인이 중요하고 실행이 30일 이상 보존되어야 하는 경우 이 작업은 새 보존 임대를 추가하여 실행이 2년 동안 유효한지 확인합니다.

- 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;

질문: 파이프라인을 구성된 프로젝트 값보다 게 유지할 수 있나요?

아니요, 임대는 반대로 작동하지 않습니다. 프로젝트가 2년 동안 유지되도록 구성된 경우 파이프라인 실행 시스템은 2년 동안 실행을 제거하지 않습니다. 이러한 실행을 이전에 삭제하려면 수동으로 삭제하거나 해당하는 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;

예: 스테이지 성공에 따라 다단계 파이프라인에 대한 보존 기간 업데이트

먼저 빌드를 실행한 다음 릴리스를 실행하는 2단계 파이프라인을 고려합니다. 성공하면 스테이지는 Build 3일 동안 실행을 유지하지만 프로젝트 관리자는 임대를 1년으로 연장하는 성공적인 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;

다음 단계

이러한 예제에서는 사용자 지정 파이프라인 작업을 사용하여 실행 보존을 관리하는 방법을 알아보았습니다.

구체적으로 다음 작업 방법을 알아보았습니다.

  • 짧은 보존 기간 재정의
  • 특정 분기에서 실행에 대한 보존 재정의
  • 실행을 더 오래 보존해야 하는 경우 보존 임대 업데이트