Megosztás a következőn keresztül:


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.

Képernyőkép arról, hogyan jön létre a gyorsítótárkulcs az Azure Pipelinesban.

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.

Képernyőkép a folyamat teljesítményről gyorsítótárazással és anélkül.

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)'