NuGet-csomagok gyorsítótárazási szolgáltatása
Azure DevOps Services
A folyamat gyorsítótárazásával csökkentheti a buildelési időt, ha gyorsítótárazhatja a függőségeket, hogy később újra felhasználhassa őket. Ebben a cikkben megtudhatja, hogyan használhatja a Gyorsítótár feladatot a NuGet-csomagok gyorsítótárazására és visszaállítására.
Feljegyzés
A folyamat gyorsítótárazása mind a YAML, mind a klasszikus folyamatok ügynökkészlet-feladataiban támogatott. A klasszikus kiadási folyamatok azonban nem támogatják.
Függőségek zárolása
A gyorsítótár-feladat beállításához először zárolnunk kell a projekt függőségeit, és létre kell hoznunk egy package.lock.json fájlt. A fájl tartalmának kivonatával létrehozunk egy egyedi kulcsot a gyorsítótárhoz.
A projekt függőségeinek zárolásához állítsa a Csproj-fájl RestorePackagesWithLockFile tulajdonságát igaz értékre. A NuGet-visszaállítás létrehoz egy packages.lock.json zárolási fájlt a projekt gyökérkönyvtárában. Ellenőrizze a packages.lock.json fájlt a forráskódban.
<PropertyGroup>
<RestorePackagesWithLockFile>true</RestorePackagesWithLockFile>
</PropertyGroup>
NuGet-csomagok gyorsítótárazási szolgáltatása
Létre kell hoznunk egy folyamatváltozót, amely a csomagjaink helyére mutat a folyamatot futtató ügynökön.
Ebben a példában a packages.lock.json tartalma kivonatot kap egy dinamikus gyorsítótárkulcs létrehozásához. Ez biztosítja, hogy a fájl minden módosításakor létre legyen hozva egy új gyorsítótárkulcs.
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'
Feljegyzés
A gyorsítótárak nem módosíthatók, a gyorsítótár létrehozása után a gyorsítótár tartalma nem módosítható.
Gyorsítótár visszaállítása
Ez a feladat csak akkor fut, ha a CACHE_RESTORED
változó hamis.
- task: NuGetCommand@2
condition: ne(variables.CACHE_RESTORED, true)
inputs:
command: 'restore'
restoreSolution: '**/*.sln'
Ha a buildelési feladat során a "project.assets.json nem található" hibaüzenet jelenik meg, a visszaállítási condition: ne(variables.CACHE_RESTORED, true)
feladatból való törléssel megoldhatja azt. Ezzel végrehajtja a visszaállítási parancsot, létrehozva a project.assets.json fájlt. A visszaállítási feladat nem tölti le azokat a csomagokat, amelyek már megtalálhatók a megfelelő mappában.
Feljegyzés
A folyamatok tartalmazhatnak egy vagy több gyorsítótárazási feladatot, és az ugyanazon a folyamaton belüli feladatok és feladatok elérhetik és megoszthatják ugyanazt a gyorsítótárat.
Teljesítmény-összehasonlítás
A folyamat gyorsítótárazása nagyszerű módszer a folyamat végrehajtásának felgyorsítására. Íme két különböző folyamat egymás melletti teljesítmény-összehasonlítása. A gyorsítótárazási feladat hozzáadása előtt (jobbra) a visszaállítási feladat körülbelül 41 másodpercet vett igénybe. Hozzáadtuk a gyorsítótárazási feladatot egy második folyamathoz (balra), és úgy konfiguráltuk a visszaállítási feladatot, hogy a gyorsítótár-hiba esetén fusson. A visszaállítási feladat ebben az esetben 8 másodpercig tartott.
Az alábbiakban a teljes YAML-folyamatot találja:
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)'