Memorizzare nella cache i pacchetti NuGet
Azure DevOps Services
Con la memorizzazione nella cache della pipeline, è possibile ridurre il tempo di compilazione memorizzando nella cache le dipendenze da riutilizzare nelle esecuzioni successive. In questo articolo si apprenderà come usare l'attività Cache per memorizzare nella cache e ripristinare i pacchetti NuGet.
Bloccare le dipendenze
Per configurare l'attività cache, è necessario prima bloccare le dipendenze del progetto e creare un file package.lock.json . Verrà usato l'hash del contenuto di questo file per generare una chiave univoca per la cache.
Per bloccare le dipendenze del progetto, impostare la proprietà RestorePackagesWithLockFile nel file csproj su true. Il ripristino NuGet genera un file di blocco packages.lock.json nella directory radice del progetto. Assicurarsi di controllare il file packages.lock.json nel codice sorgente.
<PropertyGroup>
<RestorePackagesWithLockFile>true</RestorePackagesWithLockFile>
</PropertyGroup>
Memorizzare nella cache i pacchetti NuGet
Sarà necessario creare una variabile della pipeline in modo che punti alla posizione dei pacchetti nell'agente che esegue la pipeline.
In questo esempio il contenuto di packages.lock.json verrà sottoposto a hashing per produrre una chiave della cache dinamica. In questo modo si garantisce che ogni volta che il file viene modificato, viene generata una nuova chiave della cache.
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'
Nota
Le cache non sono modificabili, dopo la creazione di una cache, il relativo contenuto non può essere modificato.
Ripristinare la cache
Questa attività verrà eseguita solo se la CACHE_RESTORED
variabile è false.
- task: NuGetCommand@2
condition: ne(variables.CACHE_RESTORED, true)
inputs:
command: 'restore'
restoreSolution: '**/*.sln'
Se si verifica il messaggio di errore "project.assets.json non trovato" durante l'attività di compilazione, è possibile risolverlo rimuovendo la condizione condition: ne(variables.CACHE_RESTORED, true)
dall'attività di ripristino. In questo modo, verrà eseguito il comando di ripristino, generando il file project.assets.json. L'attività di ripristino non scaricherà i pacchetti già presenti nella cartella corrispondente.
Nota
Una pipeline può contenere una o più attività di memorizzazione nella cache e processi e attività all'interno della stessa pipeline possono accedere e condividere la stessa cache.
Confronto delle prestazioni
La memorizzazione nella cache delle pipeline è un ottimo modo per velocizzare l'esecuzione della pipeline. Ecco un confronto delle prestazioni affiancato per due pipeline diverse. Prima di aggiungere l'attività di memorizzazione nella cache (a destra), l'attività di ripristino ha richiesto circa 41 secondi. È stata aggiunta l'attività di memorizzazione nella cache a una seconda pipeline (a sinistra) e è stata configurata l'attività di ripristino da eseguire quando viene rilevato un mancato riscontro nella cache. Il completamento dell'attività di ripristino in questo caso ha richiesto 8 secondi.
Di seguito è riportata la pipeline YAML completa per riferimento:
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)'
Articoli correlati
Commenti e suggerimenti
https://aka.ms/ContentUserFeedback.
Presto disponibile: Nel corso del 2024 verranno gradualmente disattivati i problemi di GitHub come meccanismo di feedback per il contenuto e ciò verrà sostituito con un nuovo sistema di feedback. Per altre informazioni, vedereInvia e visualizza il feedback per