Ukládání balíčků NuGet do mezipaměti
Azure DevOps Services
Díky ukládání do mezipaměti kanálu můžete zkrátit dobu sestavení tím, že uložíte závislosti do mezipaměti, abyste je mohli znovu použít v pozdějších spuštěních. V tomto článku se dozvíte, jak pomocí úlohy Mezipaměti ukládat balíčky NuGet do mezipaměti a obnovovat je.
Uzamknout závislosti
Abychom mohli nastavit úlohu mezipaměti, musíme nejprve uzamknout závislosti projektu a vytvořit soubor package.lock.json . Použijeme hodnotu hash obsahu tohoto souboru k vygenerování jedinečného klíče pro naši mezipaměť.
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. Nezapomeňte zkontrolovat soubor packages.lock.json ve zdrojovém 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, který kanál spouští.
V tomto příkladu bude obsah packages.lock.json hashován, aby se vytvořil dynamický klíč mezipaměti. Tím se zajistí, že se při každé úpravě 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 mezipaměť vytvořena, její obsah nelze změnit.
Obnovení mezipaměti
Tato úloha se spustí pouze v případě, že CACHE_RESTORED
proměnná má hodnotu 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 "projekt.assets.json se nenašel", můžete to vyřešit odebráním podmínky condition: ne(variables.CACHE_RESTORED, true)
z úlohy obnovení. Tím se spustí příkaz restore, který vygeneruje soubor project.assets.json. Úloha obnovení nestáhne balíčky, které už jsou v příslušné složce.
Poznámka
Kanál může obsahovat jednu nebo více úloh ukládání do mezipaměti a úlohy a úkoly v rámci stejného kanálu můžou přistupovat ke stejné mezipaměti a sdílet ji.
Porovnání výkonu
Ukládání do mezipaměti kanálu 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)'
Související články
Váš názor
https://aka.ms/ContentUserFeedback.
Připravujeme: V průběhu roku 2024 budeme postupně vyřazovat problémy z GitHub coby mechanismus zpětné vazby pro obsah a nahrazovat ho novým systémem zpětné vazby. Další informace naleznete v tématu:Odeslat a zobrazit názory pro