Delen via


Retentie van pijplijnuitvoering

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

Het langer bewaren van een pijplijnuitvoering dan de geconfigureerde projectinstellingen wordt afgehandeld door het maken van retentieleasen. Tijdelijke retentieleasies worden vaak gemaakt door automatische processen en meer permanente leases door de gebruikersinterface te bewerken of wanneer Release Management artefacten behoudt, maar ze kunnen ook worden gemanipuleerd via de REST API. Hier volgen enkele voorbeelden van taken die u kunt toevoegen aan uw yaml-pijplijn voor retentie.

Vereisten

Standaard kunnen leden van de groepen Inzenders, Build-beheerders, Projectbeheerders en Releasebeheerders bewaarbeleid beheren.

Voorbeeld: een kort retentievenster op projectniveau overschrijven

In dit voorbeeld is het project geconfigureerd om pijplijnuitvoeringen na slechts 30 dagen te verwijderen.

Voorbeeld 1: bewaarbeleid voor projectinstellingen

Als een pijplijn in dit project belangrijk is en uitvoeringen langer dan 30 dagen moeten worden bewaard, zorgt deze taak ervoor dat de uitvoering twee jaar geldig is door een nieuwe retentielease toe te voegen.

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

Vraag: kan een pijplijn worden bewaard voor minder dan de geconfigureerde projectwaarden?

Nee, leases werken niet in omgekeerde richting. Als een project is geconfigureerd om twee jaar te bewaren, worden uitvoeringen van de pijplijn gedurende twee jaar niet verwijderd. Als u deze uitvoeringen eerder wilt verwijderen, verwijdert u ze handmatig of gebruikt u de equivalente REST API.

Voorbeeld: Alleen uitvoeringen op vertakkingen met de naam releases/* moeten lang worden bewaard

Dit is vergelijkbaar met het bovenstaande, alleen de voorwaarde moet worden gewijzigd:

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

Voorbeeld: Het retentievenster voor een pijplijn met meerdere fasen bijwerken op basis van een geslaagde fase

Overweeg een pijplijn met twee fasen die eerst een build en vervolgens een release uitvoert. Als de Build fase is geslaagd, wordt de uitvoering drie dagen bewaard, maar de projectbeheerder wil dat de Release lease met één jaar wordt verlengd.

De Build fase kan de pijplijn behouden zoals in de bovenstaande voorbeelden, maar met één toevoeging: door de nieuwe leases Id op te slaan in een uitvoervariabele, kan de lease later worden bijgewerkt wanneer de releasefase wordt uitgevoerd.

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

Voor het bijwerken van een retentielease is een andere REST API-aanroep vereist.

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

Volgende stappen

In deze voorbeelden hebt u geleerd hoe u aangepaste pijplijntaken kunt gebruiken om de retentie van uitvoeringen te beheren.

U hebt geleerd hoe u:

  • Een kort bewaarvenster overschrijven
  • Retentie overschrijven voor uitvoeringen op specifieke vertakkingen
  • Een retentielease bijwerken wanneer een uitvoering nog langer moet worden bewaard