Paket Cache NuGet
Azure DevOps
Dengan penembolokan alur, Anda dapat mengurangi waktu build dengan membuat cache dependensi untuk digunakan kembali dalam eksekusi nanti. Dalam artikel ini, Anda akan mempelajari cara menggunakan tugas Cache untuk menyimpan cache dan memulihkan paket NuGet Anda.
Catatan
Penembolokan alur didukung dalam pekerjaan kumpulan agen untuk alur YAML dan Klasik. Namun, ini tidak didukung dalam alur rilis Klasik.
Kunci dependensi
Untuk menyiapkan tugas cache, kita harus terlebih dahulu mengunci dependensi proyek kita dan membuat file package.lock.json . Kita akan menggunakan hash konten file ini untuk menghasilkan kunci unik untuk cache kita.
Untuk mengunci dependensi proyek Anda, atur properti RestorePackagesWithLockFile di file csproj Anda ke true. Pemulihan NuGet menghasilkan file kunci packages.lock.json di direktori akar proyek Anda. Pastikan Anda memeriksa file packages.lock.json ke dalam kode sumber Anda.
<PropertyGroup>
<RestorePackagesWithLockFile>true</RestorePackagesWithLockFile>
</PropertyGroup>
Paket Cache NuGet
Kita harus membuat variabel alur untuk menunjuk ke lokasi paket kita pada agen yang menjalankan alur.
Dalam contoh ini, konten packages.lock.json akan di-hash untuk menghasilkan kunci cache dinamis. Ini memastikan bahwa setiap kali file dimodifikasi, kunci cache baru dihasilkan.
variables:
NUGET_PACKAGES: $(Pipeline.Workspace)/.nuget/packages
- task: Cache@2
displayName: Cache
inputs:
key: 'nuget | "$(Agent.OS)" | **/packages.lock.json,!**/bin/**,!**/obj/**'
restoreKeys: |
nuget | "$(Agent.OS)"
nuget
path: '$(NUGET_PACKAGES)'
cacheHitVar: 'CACHE_RESTORED'
Catatan
Cache tidak dapat diubah, setelah cache dibuat, kontennya tidak dapat dimodifikasi.
Memulihkan cache
Tugas ini hanya akan berjalan jika CACHE_RESTORED
variabel salah.
- task: NuGetCommand@2
condition: ne(variables.CACHE_RESTORED, true)
inputs:
command: 'restore'
restoreSolution: '**/*.sln'
Jika Anda menemukan pesan kesalahan "project.assets.json tidak ditemukan" selama tugas build, Anda dapat mengatasinya dengan menghapus kondisi condition: ne(variables.CACHE_RESTORED, true)
dari tugas pemulihan Anda. Dengan demikian, perintah pemulihan akan dijalankan, menghasilkan file project.assets.json Anda. Tugas pemulihan tidak akan mengunduh paket yang sudah ada di folder yang sesuai.
Catatan
Alur dapat berisi satu atau beberapa tugas penembolokan, dan pekerjaan dan tugas dalam alur yang sama dapat mengakses dan berbagi cache yang sama.
Perbandingan performa
Penembolokan alur adalah cara yang bagus untuk mempercepat eksekusi alur Anda. Berikut adalah perbandingan performa berdampingan untuk dua alur yang berbeda. Sebelum menambahkan tugas penembolokan (kanan), tugas pemulihan membutuhkan waktu sekitar 41 detik. Kami menambahkan tugas penembolokan ke alur kedua (kiri) dan mengonfigurasi tugas pemulihan untuk dijalankan saat cache meleset. Tugas pemulihan dalam kasus ini membutuhkan waktu 8 detik untuk diselesaikan.
Di bawah ini adalah alur YAML lengkap untuk referensi:
pool:
vmImage: 'windows-latest'
variables:
solution: '**/*.sln'
buildPlatform: 'Any CPU'
buildConfiguration: 'Release'
NUGET_PACKAGES: $(Pipeline.Workspace)/.nuget/packages
steps:
- task: NuGetToolInstaller@1
displayName: 'NuGet tool installer'
- task: Cache@2
displayName: 'NuGet Cache'
inputs:
key: 'nuget | "$(Agent.OS)" | **/packages.lock.json,!**/bin/**,!**/obj/**'
restoreKeys: |
nuget | "$(Agent.OS)"
nuget
path: '$(NUGET_PACKAGES)'
cacheHitVar: 'CACHE_RESTORED'
- task: NuGetCommand@2
displayName: 'NuGet restore'
condition: ne(variables.CACHE_RESTORED, true)
inputs:
command: 'restore'
restoreSolution: '$(solution)'
- task: VSBuild@1
displayName: 'Visual Studio Build'
inputs:
solution: '$(solution)'
platform: '$(buildPlatform)'
configuration: '$(buildConfiguration)'