Kvarhållning av pipelinekörning
Azure DevOps Services | Azure DevOps Server 2022 | Azure DevOps Server 2020
Att behålla en pipelinekörning längre än de konfigurerade projektinställningarna hanteras genom att du skapar kvarhållningslån. Tillfälliga kvarhållningslån skapas ofta av automatiska processer och mer permanenta lån genom att användargränssnittet ändras eller när Versionshantering behåller artefakter, men de kan också ändras via REST-API:et. Här följer några exempel på uppgifter som du kan lägga till i yaml-pipelinen för kvarhållning.
Förutsättningar
Som standard kan medlemmar i grupperna Contributors (deltagare), Build Admins (byggadministratörer), Project Admins (projektadministratörer), och Release Admins (versionsadministratörer) hantera kvarhållningsprinciper.
Exempel: Åsidosätt ett kort kvarhållningsfönster på projektnivå
I det här exemplet är projektet konfigurerat för att ta bort pipelinekörningar efter bara 30 dagar.
Om en pipeline i det här projektet är viktig och körningar ska behållas i mer än 30 dagar ser den här aktiviteten till att körningen är giltig i två år genom att lägga till ett nytt kvarhållningslån.
- 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;
Fråga: Kan en pipeline behållas för mindre än de konfigurerade projektvärdena?
Nej, lån fungerar inte tvärtom. Om ett projekt är konfigurerat att behålla i två år tar pipelinekörningar inte bort körningar på två år. Om du vill ta bort dessa körningar tidigare tar du bort dem manuellt eller använder motsvarande REST-API.
Exempel: Endast körningar på grenar med namnet releases/*
ska behållas under en längre tid
Detta liknar ovanstående, men endast villkoret behöver ändras:
- 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;
Exempel: Uppdatera kvarhållningsfönstret för en pipeline i flera steg baserat på fasens framgång
Överväg en pipeline i två steg som först kör en version och sedan en version. När det Build
lyckas behåller fasen körningen i tre dagar, men projektadministratören vill ha ett lyckat Release
steg för att förlänga lånet till ett år.
Build
Fasen kan behålla pipelinen som i exemplen ovan, men med ett tillägg: genom att spara det nya lånet Id
i en utdatavariabel kan lånet uppdateras senare när versionssteget körs.
- 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";
För att uppdatera ett kvarhållningslån krävs ett annat REST API-anrop.
- 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ästa steg
I de här exemplen har du lärt dig hur du använder anpassade pipelineuppgifter för att hantera körningskvarhållning.
Du har lärt dig att:
- Åsidosätt ett kort kvarhållningsfönster
- Åsidosätt kvarhållning för körningar på specifika grenar
- Uppdatera ett kvarhållningslån när en körning ska behållas ännu längre