Ukládání balíčků NuGet do mezipaměti
Služby Azure DevOps
Ukládáním kanálů do mezipaměti můžete zkrátit dobu sestavení tím, že závislosti uložíte do mezipaměti, aby se v pozdějších spuštěních znovu používaly. V tomto článku se dozvíte, jak pomocí úlohy Mezipaměti ukládat do mezipaměti a obnovovat balíčky NuGet.
Poznámka:
Ukládání kanálů do mezipaměti je podporováno v úlohách fondu agentů pro kanály YAML i klasické kanály. Nepodporuje se ale v kanálech verze Classic.
Uzamčení závislostí
Abychom mohli nastavit úlohu mezipaměti, musíme nejprve uzamknout závislosti projektu a vytvořit soubor package.lock.json . K vygenerování jedinečného klíče pro mezipaměť použijeme hodnotu hash obsahu tohoto souboru.
Pokud chcete uzamknout závislosti projektu, nastavte vlastnost RestorePackagesWithLockFile v souboru csproj na hodnotu true. Obnovení NuGet vygeneruje soubor zámku packages.lock.json v kořenovém adresáři projektu. Ujistěte se, že zkontrolujete soubor packages.lock.json do zdrojového kódu.
<PropertyGroup>
<RestorePackagesWithLockFile>true</RestorePackagesWithLockFile>
</PropertyGroup>
Ukládání balíčků NuGet do mezipaměti
Budeme muset vytvořit proměnnou kanálu, která bude odkazovat na umístění našich balíčků v agentovi, na kterém kanál běží.
V tomto příkladu bude obsah packages.lock.json hashován, aby se vytvořil klíč dynamické mezipaměti. Tím se zajistí, že se při každé změně souboru vygeneruje nový klíč mezipaměti.
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'
Poznámka:
Mezipaměti jsou neměnné, jakmile je vytvořena mezipaměť, její obsah nelze změnit.
Obnovení mezipaměti
Tato úloha se spustí pouze v případě, že CACHE_RESTORED
je proměnná false.
- task: NuGetCommand@2
condition: ne(variables.CACHE_RESTORED, true)
inputs:
command: 'restore'
restoreSolution: '**/*.sln'
Pokud se během úlohy sestavení zobrazí chybová zpráva "project.assets.json nenalezena", můžete ji vyřešit odebráním podmínky condition: ne(variables.CACHE_RESTORED, true)
z úlohy obnovení. Tím se příkaz restore spustí a vygeneruje project.assets.json soubor. Úloha obnovení nestahuje balíčky, které již existují ve vaší odpovídající složce.
Poznámka:
Kanál může obsahovat jednu nebo více úloh ukládání do mezipaměti a úlohy a úlohy v rámci stejného kanálu můžou přistupovat ke stejné mezipaměti a sdílet je.
Porovnání výkonu
Ukládání kanálů do mezipaměti je skvělý způsob, jak urychlit provádění kanálu. Tady je souběžné porovnání výkonu pro dva různé kanály. Před přidáním úlohy ukládání do mezipaměti (vpravo) trvalo obnovení přibližně 41 sekund. Přidali jsme úlohu ukládání do mezipaměti do druhého kanálu (vlevo) a nakonfigurovali úlohu obnovení tak, aby se spustila, když dojde k chybě mezipaměti. Dokončení úlohy obnovení v tomto případě trvalo 8 sekund.
Níže najdete úplný kanál YAML pro referenci:
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)'