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