Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Azure DevOps Services | Azure DevOps Server | Azure DevOps Server 2022
La conservation d’une exécution de pipeline pendant plus longtemps que les paramètres de projet configurés est gérée par la création de baux de rétention. Les baux de rétention temporaire sont souvent créés par des processus automatiques et des baux plus permanents en manipulant l’interface utilisateur ou lorsque Release Management conserve les artefacts, mais ils peuvent également être manipulés via l’API REST. Voici quelques exemples de tâches que vous pouvez ajouter à votre pipeline YAML pour la conservation.
Prerequisites
Par défaut, des membres des groupes Contributeurs, Administrateurs de build, Administrateurs de projet et Administrateurs de mise en production peuvent gérer des stratégies de rétention.
Exemple : Remplacer une courte fenêtre de rétention au niveau du projet
Dans cet exemple, le projet est configuré pour supprimer les exécutions du pipeline après seulement 30 jours.
Si un pipeline dans ce projet est important et que les exécutions doivent être conservées pendant plus de 30 jours, cette tâche garantit que l’exécution est valide pendant deux ans en ajoutant un nouvel accord de rétention.
- 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;
Question : un pipeline peut-il être conservé pour moins que les valeurs de projet configurées ?
Non, les baux ne fonctionnent pas à l’inverse. Si un projet est configuré pour être conservé pendant deux ans, le système de pipeline ne supprime pas les exécutions pendant cette période. Pour supprimer ces exécutions précédemment, supprimez-les manuellement ou utilisez l’API REST équivalente.
Exemple : Seules les exécutions sur les branches nommées releases/* doivent être conservées pendant une longue période
Ceci est similaire à ce qui précède, seule la condition doit changer :
- 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;
Exemple : Mise à jour de la fenêtre de rétention d’un pipeline à plusieurs étapes en fonction de la réussite de l’étape
Considérez un pipeline en deux étapes qui exécute d’abord une build, puis une version. En cas de réussite, l'étape Build maintient l'exécution pendant trois jours, mais l'administrateur du projet souhaite qu'une étape réussie Release prolonge la durée à un an.
L’étape Build peut conserver le pipeline comme dans les exemples ci-dessus, mais avec un ajout : en enregistrant le nouveau bail dans une variable de sortie, il peut être mis à jour ultérieurement lors de l'exécution de l’étape de déploiement.
- 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";
Pour mettre à jour un bail de rétention , vous devez appeler une autre API REST.
- 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;
Étapes suivantes
Avec ces exemples, vous avez appris à utiliser des tâches de pipeline personnalisées pour gérer la rétention des exécutions.
Vous avez appris à :
- Remplacer une période de rétention courte
- Remplacer la rétention pour les exécutions sur des branches spécifiques
- Mettre à jour un bail de conservation lorsqu’un processus devrait être conservé encore plus longtemps