Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Layanan Azure DevOps | Azure DevOps Server | Azure DevOps Server 2022
Mempertahankan eksekusi alur lebih lama dari pengaturan proyek yang dikonfigurasi ditangani oleh pembuatan sewa retensi. Lease retensi sementara sering kali dibuat oleh proses otomatisasi, sementara lease yang lebih permanen dibentuk melalui manipulasi antarmuka pengguna atau ketika Manajemen Rilis mempertahankan artefak. Meski demikian, mereka juga dapat dimanipulasi melalui API REST. Berikut adalah beberapa contoh tugas yang dapat Anda tambahkan ke dalam pipeline yaml Anda untuk keperluan retensi.
Prasyarat
Secara default, anggota grup Kontributor, Admin Build, Admin Proyek, dan Admin Rilis dapat mengelola kebijakan retensi.
Contoh: Menggantikan periode retensi tingkat proyek yang pendek
Dalam contoh ini, proyek dikonfigurasi untuk menghapus eksekusi pipeline setelah hanya 30 hari.
Jika pipeline dalam proyek ini penting dan jalannya harus dipertahankan selama lebih dari 30 hari, tugas ini memastikan jalannya sah selama dua tahun dengan menambahkan sewa retensi baru.
- 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;
Pertanyaan: dapatkah pipeline dipertahankan dengan nilai yang lebih rendah dari yang dikonfigurasi pada proyek?
Tidak, sewa tidak berlaku secara sebaliknya. Jika proyek dikonfigurasi untuk dipertahankan selama dua tahun, alur menjalankan sistem tidak akan menghapus eksekusi selama dua tahun. Untuk menghapus eksekusi ini sebelumnya, hapus secara manual atau gunakan REST API yang setara.
Contoh: Hanya cabang bernama releases/* yang harus dijalankan untuk jangka waktu yang lama.
Ini mirip dengan di atas, hanya kondisi yang perlu diubah:
- 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;
Contoh: Memperbarui jendela retensi untuk alur multi-tahap berdasarkan keberhasilan tahap
Pertimbangkan pipeline dua tahap yang pertama menjalankan proses build dan kemudian proses release. Ketika berhasil, tahap Build mempertahankan jalannya selama tiga hari, tetapi administrator proyek menginginkan tahap Release berhasil untuk memperpanjang sewa hingga satu tahun.
Tahap Build dapat mempertahankan pipeline seperti pada contoh di atas, tetapi dengan satu tambahan: dengan menyimpan referensi sewa Id baru dalam variabel output, sewa tersebut dapat diperbarui nanti ketika tahap rilis dijalankan.
- 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";
Untuk memperbarui sewa retensi memerlukan panggilan REST API yang berbeda.
- 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;
Langkah selanjutnya
Dengan contoh ini, Anda mempelajari cara menggunakan tugas alur kustom untuk mengelola retensi eksekusi.
Anda mempelajari cara untuk:
- Mengabaikan batas waktu penyimpanan singkat
- Mengambil alih retensi data untuk penjalankan pada cabang-cabang tertentu
- Memperbarui penyewaan retensi saat sebuah proses harus dipertahankan lebih lama.