Freigeben über


Aufbewahrung der Pipelineausführung

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

Die Beibehaltung einer Pipelineausführung für längere Zeit als die konfigurierten Projekteinstellungen erfolgt durch die Erstellung von Aufbewahrungsleasen. Temporäre Aufbewahrungs-Leases werden häufig durch automatische Prozesse erstellt, während dauerhafte Leases durch Manipulation der Benutzeroberfläche oder durch die Aufbewahrung von Artefakten in der Release-Verwaltung entstehen. Sie können jedoch auch über die REST-API bearbeitet werden. Hier sind einige Beispiele für Aufgaben, die Sie Ihrer YAML-Pipeline für die Datenhaltung hinzufügen können.

Voraussetzungen

Standardmäßig können Mitglieder der Gruppen „Mitwirkende“, „Buildadministratoren“, „Projektadministratoren“ und „Releaseadministratoren“ Aufbewahrungsrichtlinien verwalten.

Beispiel: Außerkraftsetzen eines kurzen Aufbewahrungsfensters auf Projektebene

In diesem Beispiel wird das Projekt so konfiguriert, dass Pipeline-Durchläufe nach nur 30 Tagen gelöscht werden.

Beispiel 1: Aufbewahrungsrichtlinien für Projekteinstellungen

Wenn eine Pipeline in diesem Projekt wichtig ist und die Ausführung länger als 30 Tage dauern soll, stellt dieser Vorgang sicher, dass die Ausführung zwei Jahre gültig ist, indem eine neue Aufbewahrungslease hinzugefügt wird.

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

Frage: Kann eine Pipeline für weniger als die konfigurierten Projektwerte behalten werden?

Nein, Leases funktionieren nicht umgekehrt. Wenn ein Projekt für die Aufbewahrung über einen Zeitraum von zwei Jahren konfiguriert ist, entfernt das System keine Pipeline-Ausführungen innerhalb dieser zwei Jahre. Wenn Sie diese Ausführungen früher löschen möchten, löschen Sie sie manuell oder verwenden Sie die entsprechende REST-API.

Beispiel: Es sollten nur Läufe auf Branches mit dem Namen releases/* lange beibehalten werden.

Dies ist ähnlich wie oben, nur die Bedingung muss sich ändern:

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

Beispiel: Aktualisieren des Aufbewahrungsfensters für eine mehrstufige Pipeline basierend auf dem Phasenerfolg

Betrachten Sie eine zweistufige Pipeline, die zuerst einen Build und dann eine Version ausführt. Wenn die Build Phase erfolgreich verläuft, läuft sie drei Tage weiter, aber der Projektadministrator möchte, dass eine erfolgreiche Release Phase die Laufzeit auf ein Jahr verlängert.

Die Phase Build kann die Pipeline wie in den obigen Beispielen beibehalten, jedoch mit einer Ergänzung: Durch Speichern des neuen Lease Id in einer Ausgabevariablen kann der Lease später aktualisiert werden, wenn die Veröffentlichungsphase ausgeführt wird.

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

Zum Aktualisieren einer Aufbewahrungsleaste ist ein anderer REST-API-Aufruf erforderlich.

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

Nächste Schritte

In diesen Beispielen haben Sie erfahren, wie Sie benutzerdefinierte Pipeline-Schritte zur Verwaltung der Laufzeit verwenden.

Sie haben gelernt, wie Sie:

  • Überschreiben eines Kurzzeitaufbewahrungsfensters
  • Aufbewahrung für Ausführungen auf bestimmten Branches überschreiben
  • Aktualisieren Sie einen Aufbewahrungsvertrag, wenn ein Prozess noch länger gespeichert werden soll.