Aracılığıyla paylaş


İşlem Hattı ÇalıştırmaSı Saklama

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

Bir işlem hattı çalıştırmasının yapılandırılan proje ayarlarından daha uzun süre saklanması , bekletme kiralamalarının oluşturulmasıyla işlenir. Geçici saklama kiralamaları genellikle kullanıcı arabirimini değiştirerek otomatik işlemler ve daha kalıcı kiralamalar tarafından oluşturulur veya Release Management yapıtları koruduğunda, ancak REST API aracılığıyla da işlenebilir. Burada, saklama için yaml işlem hattınıza ekleyebileceğiniz bazı görev örnekleri verilmiştir.

Önkoşullar

Varsayılan olarak, saklama ilkelerini Katkıda Bulunanlar, Derleme Yöneticileri, Proje Yöneticileri ve Yayın Yöneticileri gruplarının üyeleri yönetebilir.

Örnek: Kısa proje düzeyinde saklama penceresini geçersiz kılma

Bu örnekte, proje yalnızca 30 gün sonra işlem hattı çalıştırmalarını silmek üzere yapılandırılmıştır.

Örnek 1: proje ayarları bekletme ilkeleri

Bu projedeki bir işlem hattı önemliyse ve çalıştırmalar 30 günden daha uzun süre tutulacaksa, bu görev yeni bir bekletme kirası ekleyerek çalıştırmanın iki yıl boyunca geçerli olmasını sağlar.

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

Soru: İşlem hattı yapılandırılan proje değerlerinden daha az bir değer için tutulabilir mi?

Hayır, kiralar tersten çalışmaz. Bir proje iki yıl boyunca tutulacak şekilde yapılandırılmışsa işlem hattı çalıştırmaları sistem iki yıl boyunca çalıştırmaları kaldırmaz. Bu çalıştırmaları daha önce silmek için el ile silin veya eşdeğer REST API'sini kullanın.

Örnek: Yalnızca adlı releases/* dallardaki çalıştırmalar uzun süre saklanmalıdır

Bu yukarıdakine benzer, yalnızca koşulun değişmesi gerekir:

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

Örnek: Çok aşamalı işlem hattının bekletme penceresini, aşama başarısına göre güncelleştirme

Önce bir derleme ve sonra bir yayın çalıştıran iki aşamalı bir işlem hattı düşünün. Başarılı olduğunda, Build aşama çalıştırmayı üç gün boyunca korur, ancak proje yöneticisi kirayı bir yıla uzatmak için başarılı Release bir aşama ister.

Aşama Build , işlem hattını yukarıdaki örneklerde olduğu gibi koruyabilir, ancak tek bir eklemeyle: yeni kiraları Id bir çıkış değişkenine kaydederek, yayın aşaması çalıştırıldığında kira daha sonra güncelleştirilebilir.

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

Bekletme kirasını güncelleştirmek için farklı bir REST API çağrısı gerekir.

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

Sonraki adımlar

Bu örneklerle, çalıştırma saklamayı yönetmek için özel işlem hattı görevlerini kullanmayı öğrendiniz.

Şunları öğrendiniz:

  • Kısa bekletme penceresini geçersiz kılma
  • Belirli dallardaki çalıştırmalar için bekletmeyi geçersiz kılma
  • Bir çalıştırmanın daha da uzun süre saklanması gerektiğinde bekletme kirası güncelleştirme