Sdílet prostřednictvím


Uchovávání spuštění kanálu

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

Uchovávání spuštění kanálu po dobu delší, než je nakonfigurované nastavení projektu , se zpracovává vytvořením zapůjčení uchovávání informací. Zapůjčení dočasného uchovávání informací se často vytváří automatickými procesy a dalšími trvalými zapůjčeními manipulací s uživatelským rozhraním nebo při Release Management uchovávání artefaktů, ale je možné s nimi také manipulovat prostřednictvím rozhraní REST API. Tady je několik příkladů úloh, které můžete přidat do kanálu Yaml pro účely uchovávání informací.

Požadavky

Ve výchozím nastavení můžou zásady uchovávání informací spravovat členové skupin Přispěvatelé, Správci buildu, Správci projektů a Správci vydaných verzí.

Příklad: Přepsání krátkého období uchovávání informací na úrovni projektu

V tomto příkladu je projekt nakonfigurovaný tak, aby odstranil spuštění kanálu po pouhých 30 dnech.

Příklad 1: Zásady uchovávání informací v nastavení projektu

Pokud je kanál v tomto projektu důležitý a spuštění by se měla uchovávat déle než 30 dnů, tento úkol zajistí platnost spuštění po dobu dvou let přidáním nového zapůjčení uchovávání informací.

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

Otázka: Je možné zachovat kanál pro méně než nakonfigurované hodnoty projektu?

Ne, zapůjčení nefunguje opačně. Pokud je projekt nakonfigurovaný tak, aby se zachoval po dobu dvou let, systém spuštění kanálu neodebere spuštění po dobu dvou let. Pokud chcete tato spuštění odstranit dříve, odstraňte je ručně nebo použijte ekvivalentní rozhraní REST API.

Příklad: Spuštění pouze ve větvích s názvem releases/* by se měla uchovávat po dlouhou dobu.

Je to podobné jako v předchozím příkladu, je potřeba změnit jenom podmínku:

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

Příklad: Aktualizace okna uchovávání pro kanál s více fázemi na základě úspěšné fáze

Představte si dvoufázový kanál, který nejprve spustí sestavení a pak vydání. V případě úspěchu Build zachová fáze spuštění tři dny, ale správce projektu chce, aby úspěšná Release fáze prodloužila zapůjčení na jeden rok.

Fáze Build si může kanál zachovat jako v předchozích příkladech, ale s jedním navíc: uložením nového zapůjčení Id do výstupní proměnné je možné zapůjčení aktualizovat později při spuštění fáze vydá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; 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";

Aktualizace zapůjčení uchovávání informací vyžaduje jiné volání rozhraní REST API.

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

Další kroky

Na těchto příkladech jste se naučili používat vlastní úlohy kanálu ke správě uchovávání běhů.

Naučili jste se:

  • Přepsání krátkého intervalu uchovávání informací
  • Přepsání uchovávání pro spuštění v konkrétních větvích
  • Aktualizace zapůjčení uchovávání informací v případě, že by se spuštění mělo uchovávat ještě déle