Udostępnij przez


Retencja przebiegu rurociągu

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

Zachowywanie przebiegu potoku przez dłuższy czas niż skonfigurowane ustawienia projektu jest obsługiwane przez tworzenie umów przechowywania. Tymczasowe dzierżawy przechowania są często tworzone przez procesy automatyczne, a bardziej trwałe dzierżawy poprzez interfejs użytkownika lub gdy Release Management zachowuje artefakty, lecz mogą być również manipulowane za pośrednictwem interfejsu API REST. Oto kilka przykładów zadań, które można dodać do potoku YAML w celu ich zachowania.

Wymagania wstępne

Domyślnie członkowie grup Współautorzy, Administratorzy kompilacji, Administratorzy projektu i Administratorzy wydania mogą zarządzać zasadami przechowywania.

Przykład: przesłanianie krótkiego okna przechowywania na poziomie projektu

W tym przykładzie projekt jest skonfigurowany do usuwania przebiegów potoku po upływie zaledwie 30 dni.

Przykład 1: zasady przechowywania ustawień projektu

Jeśli potok w tym projekcie jest ważny i przebiegi powinny być przechowywane dłużej niż 30 dni, to zadanie zapewnia, że przebieg będzie ważny przez dwa lata poprzez dodanie nowego planu przechowywania.

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

Pytanie: czy potok może być zachowywany dla wartości mniejszych niż skonfigurowane wartości projektu?

Nie, dzierżawy nie działają w odwrotnej kolejności. Jeśli projekt jest skonfigurowany do przechowywania danych przez dwa lata, system nie usunie przebiegów potoków przez ten okres. Aby usunąć te przebiegi wcześniej, ręcznie ich usuń lub skorzystaj z odpowiadającego interfejsu API REST.

Przykład: tylko przebiegi na gałęziach o nazwie releases/* powinny być zachowywane przez długi czas

Jest to podobne do powyższych, ale warunek musi ulec zmianie:

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

Przykład: aktualizowanie okna retencji dla potoku o wielu etapach na podstawie powodzenia etapu

Rozważ dwustopniowy pipeline, który najpierw uruchamia proces budowania, a następnie wydawania. Po pomyślnym zakończeniu etapu Build przebieg jest zachowywany przez trzy dni, ale administrator projektu chce, aby etap Release zakończył się powodzeniem, co przedłuży dzierżawę do jednego roku.

Etap Build może zachować potok, tak jak w powyższych przykładach, ale z jednym dodatkiem: zapisując nową dzierżawę Id w zmiennej wyjściowej, dzierżawa może zostać zaktualizowana później po uruchomieniu etapu wydania.

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

Aby zaktualizować dzierżawę przechowywania , wymagane jest inne wywołanie interfejsu API REST.

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

Dalsze kroki

Na podstawie tych przykładów nauczyłeś się, jak używać niestandardowych zadań potoku do zarządzania przechowywaniem przebiegów.

Nauczyłeś się, jak:

  • Przesłanianie krótkiego okna przechowywania
  • Zmienianie zasad przechowywania uruchomień na określonych gałęziach
  • Aktualizowanie umowy przechowywania, gdy konieczne jest dłuższe przechowywanie przebiegu