NuGet paketlerini önbelleğe alma
Azure DevOps Services
İşlem hattı önbelleğe alma ile bağımlılıklarınızı daha sonraki çalıştırmalarda yeniden kullanmak üzere önbelleğe alarak derleme sürenizi kısaltabilirsiniz. Bu makalede, NuGet paketlerinizi önbelleğe almak ve geri yüklemek için Önbellek görevini kullanmayı öğreneceksiniz.
Not
İşlem hattı önbelleğe alma, hem YAML hem de Klasik işlem hatları için aracı havuzu işlerinde desteklenir. Ancak, Klasik yayın işlem hatlarında desteklenmez.
Bağımlılıkları kilitleme
Önbellek görevini ayarlamak için önce projemizin bağımlılıklarını kilitlemeli ve bir package.lock.json dosyası oluşturmalıyız. Önbelleğimiz için benzersiz bir anahtar oluşturmak için bu dosyanın içeriğinin karması kullanılır.
Projenizin bağımlılıklarını kilitlemek için csproj dosyanızdaki RestorePackagesWithLockFile özelliğini true olarak ayarlayın. NuGet geri yükleme, projenizin kök dizininde packages.lock.json bir kilit dosyası oluşturur. packages.lock.json dosyanızı kaynak kodunuzla denetlediğinizden emin olun.
<PropertyGroup>
<RestorePackagesWithLockFile>true</RestorePackagesWithLockFile>
</PropertyGroup>
NuGet paketlerini önbelleğe alma
İşlem hattını çalıştıran aracıda paketlerimizin konumunu işaret eden bir işlem hattı değişkeni oluşturmamız gerekir.
Bu örnekte, packages.lock.json içeriği dinamik bir önbellek anahtarı oluşturmak için karma olarak kullanılacaktır. Bu, dosya her değiştirildiğinde yeni bir önbellek anahtarı oluşturulmasını sağlar.
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'
Not
Önbellekler sabittir, önbellek oluşturulduktan sonra içeriği değiştirilemez.
Önbelleği geri yükleme
Bu görev yalnızca değişken false olduğunda CACHE_RESTORED
çalışır.
- task: NuGetCommand@2
condition: ne(variables.CACHE_RESTORED, true)
inputs:
command: 'restore'
restoreSolution: '**/*.sln'
Derleme göreviniz sırasında "project.assets.json bulunamadı" hata iletisiyle karşılaşırsanız, geri yükleme görevinizden koşulu condition: ne(variables.CACHE_RESTORED, true)
kaldırarak sorunu çözebilirsiniz. Bunu yaptığınızda geri yükleme komutu yürütülür ve project.assets.json dosyanız oluşturulur. Geri yükleme görevi, ilgili klasörünüzde zaten var olan paketleri indirmez.
Not
İşlem hattı bir veya daha fazla önbelleğe alma görevi içerebilir ve aynı işlem hattındaki işler ve görevler aynı önbelleğe erişip paylaşabilir.
Performans karşılaştırması
İşlem hattı önbelleğe alma, işlem hattı yürütmenizi hızlandırmanın harika bir yoludur. İki farklı işlem hattı için yan yana performans karşılaştırması aşağıdadır. Önbelleğe alma görevini eklemeden önce (sağ), geri yükleme görevi yaklaşık 41 saniye sürdü. Önbelleğe alma görevini ikinci bir işlem hattına (solda) ekledik ve önbellek hatasıyla karşılaşıldığında geri yükleme görevini çalışacak şekilde yapılandırdık. Bu durumda geri yükleme görevinin tamamlanması 8 saniye sürdü.
Başvuru için tam YAML işlem hattı aşağıdadır:
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)'