Udostępnij za pośrednictwem


Przechowywanie przebiegów potoku

Azure DevOps Services | Azure DevOps Server 2022 r. | Azure DevOps Server 2020 r.

Zachowywanie uruchomienia potoku dłużej niż skonfigurowane ustawienia projektu jest obsługiwane przez tworzenie dzierżaw przechowywania. Dzierżawy przechowywania tymczasowego są często tworzone przez procesy automatyczne i bardziej trwałe dzierżawy, manipulując interfejsem użytkownika lub gdy Release Management zachowuje artefakty, ale mogą być również manipulowane za pośrednictwem interfejsu API REST. Poniżej przedstawiono kilka przykładów zadań, które można dodać do potoku yaml na potrzeby przechowywania.

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, a przebiegi powinny być przechowywane przez dłużej niż 30 dni, to zadanie gwarantuje, że przebieg będzie ważny przez dwa lata, dodając nową dzierżawę 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 przez dwa lata, uruchomienie potoku nie spowoduje usunięcia przebiegów przez dwa lata. Aby usunąć te przebiegi wcześniej, usuń je ręcznie lub użyj równoważnego interfejsu API REST.

Przykład: Tylko przebiegi w gałęziach o nazwie releases/* powinny być przechowywane przez długi czas

Jest to podobne do powyższych. Tylko 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 przechowywania dla potoku wieloetapowego na podstawie powodzenia etapu

Rozważmy dwuetapowy potok, który najpierw uruchamia kompilację, a następnie wydanie. Po pomyślnym zakończeniu Build etap zachowuje przebieg przez trzy dni, ale administrator projektu chce, aby etap zakończył się powodzeniem Release , aby przedłużyć dzierżawę do jednego roku.

Etap Build może zachować potok, 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;

Następne kroki

W tych przykładach przedstawiono sposób używania niestandardowych zadań potoku do zarządzania przechowywaniem przebiegów.

W tym samouczku omówiono:

  • Przesłanianie krótkiego okna przechowywania
  • Zastępowanie przechowywania dla przebiegów w określonych gałęziach
  • Aktualizowanie dzierżawy przechowywania, gdy przebieg powinien być zachowywany jeszcze dłużej