Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
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.
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.