Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Azure DevOps Services
A folyamatok gyorsítótárazása segíthet csökkenteni a buildelési időt a korábbi futtatásokból letöltött függőségek újrafelhasználásával, így elkerülhető, hogy ugyanazokat a fájlokat újra létre vagy újra letöltsék. Ez különösen hasznos olyan esetekben, amikor ugyanazok a függőségek lesznek ismételten letöltve az egyes futtatások elején. Ez gyakran több száz vagy több ezer hálózati hívással járó időigényes folyamat.
A gyorsítótárazás akkor a leghatékonyabb, ha a gyorsítótár visszaállításához és mentéséhez szükséges idő rövidebb, mint a fájlok újragenerálásához szükséges idő. Bizonyos esetekben azonban előfordulhat, hogy a gyorsítótárazás nem nyújt teljesítménybeli előnyöket, sőt negatívan befolyásolhatja a buildelési időt. Fontos kiértékelni az adott forgatókönyvet annak megállapításához, hogy a gyorsítótárazás a megfelelő megközelítés-e.
Jegyzet
A folyamatok gyorsítótárazása nem támogatott a klasszikus kiadási folyamatok esetében.
Mikor érdemes folyamat-összetevőket használni a folyamat gyorsítótárazásához képest?
A folyamat-gyorsítótárazás és a folyamat-összetevők hasonló funkciókat hajtanak végre, de különböző forgatókönyvekhez készültek, és nem használhatók felcserélhetően.
Folyamat-összetevők használata: amikor egy feladat által előállított fájlokat kell használnia, és meg kell osztania őket más feladatokkal (és ezek a többi feladat valószínűleg meghiúsulnának nélkülük).
Folyamat-gyorsítótárazás használata: ha a korábbi futtatások fájljainak újrafelhasználásával szeretné javítani a buildelési időt (és ha nem rendelkezik ezekkel a fájlokkal, az nem befolyásolja a feladat futtatási képességét).
Jegyzet
A folyamat-gyorsítótárazás és a folyamat-összetevők díjmentesen érhetők el minden szinten (ingyenes és fizetős). További részletekért lásd az Artifacts tárolási fogyasztását .
A saját üzemeltetésű ügynökre vonatkozó követelmények
A következő végrehajtható fájloknak a környezeti változóban felsorolt PATH mappában kell lenniük. Vegye figyelembe, hogy ezek a követelmények csak a saját üzemeltetésű ügynökökre vonatkoznak, mivel az üzemeltetett ügynökök előre telepítve vannak a szükséges szoftverrel.
| Archív szoftver / platform | Windows | Linux | Mac |
|---|---|---|---|
| GNU Tar | Szükséges | Szükséges | Nem |
| BSD kátrány | Nem | Nem | Szükséges |
| 7 cipzáras | Ajánlott | Nem | Nem |
Gyorsítótár-feladat: Hogyan működik
A gyorsítótárazás úgy kerül a folyamatba, hogy hozzáadja a Gyorsítótár feladatotsteps egy feladat szakaszához.
A folyamat végrehajtása során, ha gyorsítótár-lépéssel találkozik, a feladat a megadott bemenetek alapján próbálja meg visszaállítani a gyorsítótárat. Ha nem található gyorsítótár, a lépés befejeződik, és a feladat következő lépése végrehajtásra kerül.
A feladat összes lépésének sikeres futtatása után a rendszer automatikusan hozzáad egy speciális "Feladat utáni: Gyorsítótár" lépést, és aktiválódik minden olyan "gyorsítótár visszaállítása" lépéshez, amelyet nem hagytak ki. Ez a lépés felelős a gyorsítótármentéséért.
Jegyzet
A gyorsítótárak nem módosíthatók. A gyorsítótár létrehozása után a tartalma nem módosítható.
A Gyorsítótár-feladat konfigurálása
A Cache feladatnak két kötelező argumentuma van: elérési út és kulcs:
elérési út: A gyorsítótárazni kívánt mappa elérési útja. Ez lehet abszolút vagy relatív elérési út. A relatív elérési utak a
$(System.DefaultWorkingDirectory)-hoz képest vannak megoldva.Borravaló
Előre definiált változók segítségével tárolhatja a gyorsítótárazni kívánt mappa elérési útját. A helyettesítő karakterek azonban nem támogatottak.
key: Ez határozza meg a visszaállítani vagy menteni kívánt gyorsítótár azonosítóját. A kulcs sztringértékek, fájlelérési utak vagy fájlminták kombinációjából áll, és minden szegmenst egy
|karakter választ el egymástól.Húrok:
Rögzített érték (például a gyorsítótár neve vagy egy eszköz neve), vagy egy környezeti változóból (például az aktuális operációs rendszer vagy feladat neve) származik.fájl elérési útjai:
Egy adott fájl elérési útja, amelynek tartalma kivonatolva lesz. A fájlnak léteznie kell a feladat futtatásakor. A rendszer minden olyan szegmenst, amely hasonlít a fájl elérési útjára, ezért legyen óvatos, különösen a , mivel.ez a "fájl nem létezik" hibákhoz vezethet.Borravaló
Ha szeretné elkerülni, hogy egy elérési úthoz hasonló sztringszegmens fájlútvonalként legyen kezelve, csomagolja be dupla idézőjelekkel, például:
"my.key" | $(Agent.OS) | key.filefájlminták:
Gömb stílusú helyettesítő karakteres minták vesszővel tagolt listája, amelyeknek legalább egy fájlnak meg kell egyezniük. Példák:-
**/yarn.lock: az összes yarn.lock fájl a források könyvtárban. -
*/asset.json, !bin/**: a forráskönyvtár alatti könyvtárban található összes asset.json fájl, kivéve azokat, amelyek a bin könyvtárban vannak.
-
A fájl elérési útja vagy fájlmintája által azonosított fájlok tartalma kivonatolva dinamikus gyorsítótár-kulcsot hoz létre. Ez akkor hasznos, ha a projekt olyan fájlokkal rendelkezik, amelyek egyedileg azonosítják a gyorsítótárazott fájlokat. Például az olyan fájlok, mint a package-lock.json, yarn.lock, Gemfile.lockvagy Pipfile.lock gyakran hivatkoznak egy gyorsítótárkulcsban, mivel ezek egyedi függőségeket képviselnek. A relatív fájlelérési utak vagy minták feloldása a $(System.DefaultWorkingDirectory).
- példa:
Az alábbi példa bemutatja, hogyan gyorsítótárazhatja a fonalcsomagokat:
variables:
YARN_CACHE_FOLDER: $(Pipeline.Workspace)/s/.yarn
steps:
- task: Cache@2
inputs:
key: '"yarn" | "$(Agent.OS)" | yarn.lock'
restoreKeys: |
"yarn" | "$(Agent.OS)"
"yarn"
path: $(YARN_CACHE_FOLDER)
displayName: Cache Yarn packages
- script: yarn --frozen-lockfile
Ebben a példában a gyorsítótárkulcs három részből áll: egy statikus sztringből ("fonalból"), az operációs rendszerből, amelyen a feladat fut (mivel a gyorsítótár operációs rendszerenként egyedi) és a yarn.lock fájl kivonatából (amely egyedileg azonosítja a függőségeket).
A feladat hozzáadása utáni első futtatáskor a gyorsítótár-lépés "gyorsítótár-hiányt" jelez, mert a kulcs által azonosított gyorsítótár nem létezik. Az utolsó lépés után a rendszer létrehoz egy gyorsítótárat a $(Pipeline.Workspace)/s/.yarn fájljaiból, és feltölti. A következő futtatáskor a gyorsítótár lépése "gyorsítótár-találatot" jelent, és a gyorsítótár tartalma le lesz töltve és visszaállítva.
A használatakor checkout: selfa tárházat a rendszer kiveszi a $(Pipeline.Workspace)/s, és a .yarn mappa valószínűleg magában az adattárban fog elhelyezkedni.
Jegyzet
Pipeline.Workspace a folyamatot futtató ügynök helyi elérési útja, ahol az összes címtár létrejön. Ez a változó ugyanazzal az értékkel rendelkezik, mint Agent.BuildDirectory.
Ha nem használja checkout: self, győződjön meg arról, hogy frissíti a változót YARN_CACHE_FOLDER , hogy az adattárban lévő helyre .yarn mutasson.
Visszaállítási kulcsok használata
restoreKeys Lehetővé teszi több pontos kulcs vagy kulcselőtag lekérdezését. Tartalékként használatos, ha a megadott key nem ad találatot. A visszaállítási kulcs előtag alapján keres egy kulcsot, és a legutóbb létrehozott gyorsítótár-bejegyzést adja vissza. Ez akkor hasznos, ha a folyamat nem talál pontos egyezést, de továbbra is részleges gyorsítótár-lekérést szeretne használni.
Több visszaállítási kulcs megadásához sorolja fel őket külön sorokban. A visszaállítási kulcsok kipróbálásának sorrendje fentről lefelé halad.
- példa:
Íme egy példa arra, hogyan használhat visszaállítási kulcsokat a fonalcsomagok gyorsítótárazásához:
variables:
YARN_CACHE_FOLDER: $(Pipeline.Workspace)/.yarn
steps:
- task: Cache@2
inputs:
key: '"yarn" | "$(Agent.OS)" | yarn.lock'
restoreKeys: |
yarn | "$(Agent.OS)"
yarn
path: $(YARN_CACHE_FOLDER)
displayName: Cache Yarn packages
- script: yarn --frozen-lockfile
Ebben a példában a gyorsítótár-feladat először megpróbálja visszaállítani a megadott kulcsot. Ha a kulcs nem létezik a gyorsítótárban, akkor megpróbálja az első visszaállítási kulcsot: yarn | $(Agent.OS). Ez megkeresi azokat a gyorsítótár-kulcsokat, amelyek pontosan megfelelnek ennek az előtagnak, vagy azzal kezdődnek.
Előtagegyezés akkor fordulhat elő, ha a yarn.lock fájl kivonata megváltozott. Ha például a gyorsítótár tartalmazza a kulcsot yarn | $(Agent.OS) | old-yarn.lock (ahol old-yarn.lock az aktuálistól yarn.lockeltérő kivonattal rendelkezik), ez a visszaállítási kulcs részleges gyorsítótár-találatot eredményez.
Ha az első visszaállítási kulcs nem ad egyezést, a következő visszaállítási kulcs (yarn) Ez minden olyan gyorsítótárkulcsot keres, amely a következővel yarnkezdődik: . Előtagegyezések esetén a visszaállítási folyamat a legutóbb létrehozott gyorsítótár-bejegyzést adja vissza.
Jegyzet
A folyamatok több gyorsítótárazási feladatot is tartalmazhatnak, és a gyorsítótárazáshoz nincs tárolási korlát. Az ugyanazon a folyamaton belüli feladatok és feladatok ugyanazt a gyorsítótárat érhetik el és oszthatják meg.
Visszaállítási feltétel használata
Bizonyos esetekben előfordulhat, hogy feltételesen szeretné végrehajtani a lépéseket attól függően, hogy a gyorsítótár visszaállítása sikeresen megtörtént-e. Kihagyhat például egy olyan lépést, amely függőségeket telepít, ha a gyorsítótár vissza lett állítva. Ez az cacheHitVar érveléssel érhető el.
Ha ezt a bemenetet egy környezeti változó nevére állítja, a változó gyorsítótár-találat esetén lesz beállítva true , inexact ha egy visszaállítási kulcs részleges gyorsítótár-találatot eredményez, és false ha nem található gyorsítótár. Ezután hivatkozhat erre a változóra egy lépésfeltételben vagy egy szkriptben.
Íme egy példa, ahol a rendszer kihagyja a lépést install-deps.sh a gyorsítótár visszaállításakor:
steps:
- task: Cache@2
inputs:
key: mykey | mylockfile
restoreKeys: mykey
path: $(Pipeline.Workspace)/mycache
cacheHitVar: CACHE_RESTORED
- script: install-deps.sh
condition: ne(variables.CACHE_RESTORED, 'true')
- script: build.sh
Gyorsítótár elkülönítése és biztonsága
A különböző folyamatokból és különböző ágakból származó gyorsítótárak elkülönítésének biztosítása érdekében minden gyorsítótárat egy hatókörnek nevezett logikai tárolóban tárolunk a rendszer. A hatókörök biztonsági határként működnek, amely garantálja a következőket:
Az egyik folyamatból származó feladatok nem férhetnek hozzá egy másik folyamat gyorsítótáraihoz.
A lekéréses kérelmeket létrehozó feladatok gyorsítótárakat olvashatnak a célágból (ugyanahhoz a folyamathoz), de nem írhatnak (hozhatnak létre) gyorsítótárakat a célág hatókörében.
Amikor egy futtatás során gyorsítótár-lépés történik, a rendszer a kulcs által azonosított gyorsítótárat kéri a kiszolgálótól. A kiszolgáló ezután megkeresi a feladat számára látható hatókörökből ezt a kulcsot tartalmazó gyorsítótárat, és visszaadja a gyorsítótárat (ha van ilyen). A gyorsítótár mentésekor (a feladat végén) a rendszer a gyorsítótárat a munkafolyamat és ág által képviselt hatókörbe írja.
CI, manuális és ütemezett futtatások
| Hatókör | Olvas | Ír |
|---|---|---|
| Forráság | Igen | Igen |
main ág |
Igen | Nem |
master ág |
Igen | Nem |
Pull kérések futtatása
| Hatókör | Olvas | Ír |
|---|---|---|
| Forráság | Igen | Nem |
| Célelőfiók | Igen | Nem |
Köztes ág (például refs/pull/1/merge) |
Igen | Igen |
main ág |
Igen | Nem |
master ág |
Igen | Nem |
Pull request fork futtatások
| Ág | Olvas | Ír |
|---|---|---|
| Célelőfiók | Igen | Nem |
Köztes ág (például refs/pull/1/merge) |
Igen | Igen |
main ág |
Igen | Nem |
master ág |
Igen | Nem |
Borravaló
Mivel a gyorsítótárak már hatókörrel vannak elosztva egy projektre, folyamatra és ágra, nem kell projekt-, folyamat- vagy ágazonosítókat tartalmaznia a gyorsítótárkulcsban.
Példák
A Bundlert használó Ruby-projektek esetében bírálja felül a környezeti változót BUNDLE_PATH , hogy beállítsa azt az elérési utat , ahol a Bundler drágaköveket keres.
példa:
variables:
BUNDLE_PATH: $(Pipeline.Workspace)/.bundle
steps:
- task: Cache@2
displayName: Bundler caching
inputs:
key: 'gems | "$(Agent.OS)" | Gemfile.lock'
path: $(BUNDLE_PATH)
restoreKeys: |
gems | "$(Agent.OS)"
gems
Ismert problémák és visszajelzés
Ha problémái vannak a gyorsítótárazás beállításával a folyamatban, ellenőrizze az adattárban microsoft/azure-pipelines-tasks listáját. Ha nem látja a problémát a listában, hozzon létre egy újat, és adja meg a forgatókönyvével kapcsolatos szükséges információkat.
K&A
K: Törölhetem a gyorsítótárat?
V: A gyorsítótár törlése nem támogatott. A meglévő gyorsítótárakra vonatkozó találatokat azonban elkerülheti, ha hozzáad egy sztringkonstansot (például version2) a gyorsítótárkulcshoz. Módosítsa például a következő gyorsítótárkulcsot:
key: 'yarn | "$(Agent.OS)" | yarn.lock'
Ehhez:
key: 'version2 | yarn | "$(Agent.OS)" | yarn.lock'
K: Mikor jár le a cache?
A gyorsítótárak hét nap inaktivitás után törlődnek.
K: Mikor lesz feltöltve a gyorsítótár?
A: A rendszer létrehoz egy gyorsítótárat a megadott path és a feladat utolsó lépése után tölti fel. További részletekért tekintse meg a példát.
K: Van-e korlátozás a gyorsítótár méretére?
A: Az egyes gyorsítótárak méretére vagy a szervezeten belüli gyorsítótár teljes méretére nincs kényszerített korlátozás.