Afhankelijkheden cachen voor meer snelheid
Implementeer caching om uw workflows aanzienlijk sneller uit te voeren door gegenereerde afhankelijkheden en buildresultaten opnieuw te gebruiken.
Afhankelijkheden cachen voor meer snelheid is een gratis DevOps-bootcamp-les op CoddyKit. Dit is les 2 van 4. Je kunt 3 lessen uit dit leerpad gratis volledig lezen — daarna ontgrendelt CoddyKit PRO alle lessen, plus praktische oefeningen met een ingebouwde code-editor en een AI-tutor die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject DevOps-bootcamp. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus DevOps-bootcamp bevat in totaal 4 lessen.
Werkstromen versnellen met caching
Is het je weleens opgevallen dat je werkstroom elke keer dezelfde afhankelijkheden opnieuw downloadt? Dat vertraagt alles!
Met caching in GitHub Actions kun je bestanden uit eerdere uitvoeringen opslaan en opnieuw gebruiken. Hierdoor worden volgende uitvoeringen van je werkstroom veel sneller.
Maak kennis met de cache-actie
GitHub biedt een speciale actie met de naam actions/cache@v3. Deze actie is ontworpen om bestanden op te slaan en terug te zetten, zodat je werkstromen sneller worden.
De actie is slim: eerst controleert die of de cache al bestaat voordat die deze probeert terug te zetten, en de actie slaat de cache op als die nog niet bestaat.
Cachesleutel en pad
Twee cruciale parameters voor actions/cache zijn key en path:
key: Een unieke tekenreeks die je cache identificeert. Als er een cache met deze sleutel wordt gevonden, wordt die teruggezet.path: De bestandspaden of mappen die je wilt cachen. Hiermee geef je de actie aan *wat* die moet opslaan of terugzetten.
De sleutel bevat vaak een hashwaarde van afhankelijkheidsbestanden, zodat de cache ongeldig wordt gemaakt wanneer afhankelijkheden wijzigen.
Node.js-afhankelijkheden cachen
Laten we node_modules cachen voor een Node.js-project. We gebruiken hashFiles om een dynamische sleutel te maken op basis van package-lock.json.
Probeer dit eenvoudige werkstroomfragment uit te voeren:
name: Node.js CI with Cache
on: [push]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Cache Node.js modules
uses: actions/cache@v3
with:
path: node_modules
key: npm-${{ hashFiles('package-lock.json') }}
restore-keys: |
npm-
- name: Install dependencies
run: npm ci
- name: Run tests
run: npm testTerugval met herstelsleutels
Wat als je exacte key niet overeenkomt met een cache? Dan zijn restore-keys handig!
restore-keys bevat een lijst met terugvalsleutels waarnaar gezocht wordt. Als de primaire sleutel, bijvoorbeeld npm-${{ hashFiles(...) }}, niet wordt gevonden, zoekt GitHub Actions in volgorde naar een cache met de sleutels uit restore-keys.
In ons voorbeeld zoekt npm- naar elke cache die met "npm-" begint. Dat is nuttig als alleen kleine wijzigingen in versies van afhankelijkheden zijn aangebracht.
Python-afhankelijkheden cachen
Caching is niet alleen voor Node.js! Je kunt hetzelfde principe toepassen op andere talen, zoals Python. Hier cachen we de virtuele omgeving van Python en de cache van pip.
De sleutel gebruikt hier hashFiles('requirements.txt') en het pad verwijst naar de virtuele omgeving en de cachemap van pip.
name: Python CI with Cache
on: [push]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: '3.x'
- name: Cache Python dependencies
uses: actions/cache@v3
with:
path: |
~/.cache/pip
.venv
key: pip-${{ hashFiles('requirements.txt') }}
restore-keys: |
pip-
- name: Install dependencies
run: |
python -m venv .venv
.venv/bin/pip install -r requirements.txt
- name: Run tests
run: .venv/bin/python -m unittest discoverWanneer je een cache ongeldig maakt
Een cache is alleen nuttig als die actueel genoeg is. Als je afhankelijkheden wijzigen, moet je cache dat ook doen!
De cache wordt automatisch ongeldig gemaakt als je primaire key, bijvoorbeeld npm-${{ hashFiles('package-lock.json') }}, wijzigt. Als package-lock.json wordt bijgewerkt, verandert de hash en wordt er een nieuwe cache gemaakt.
Je kunt een cache ook geforceerd opnieuw opbouwen door de sleutel handmatig te wijzigen, bijvoorbeeld door een versietoevoeging zoals npm-v2-${{ hashFiles(...) }} toe te voegen.
Cachebereik en -limieten
Het is goed om te weten hoe caching op de achtergrond werkt:
- Bereik: Caches hebben een bereik per repository en per vertakking. Een cache op de
main-vertakking wordt niet gebruikt op een functietak, tenzij jelookup-pathexpliciet configureert. - Groottebeperking: Elke cache kan maximaal 10 GB groot zijn.
- Bewaartermijn: Caches worden 7 dagen na de laatste toegang bewaard. Oude, ongebruikte caches worden automatisch verwijderd.
Slimme cachingpraktijken
Haal het meeste uit caching:
- Gebruik
hashFiles: Koppel je cachesleutel altijd aan manifestbestanden van afhankelijkheden, zoalspackage-lock.jsonenrequirements.txt. - Wees specifiek met
path: Cache alleen wat nodig is, zoalsnode_modulesen~/.cache/pip. - Gebruik
restore-keys: Geef terugvalopties op voor een hoger aantal cachetreffers. - Cache geen vluchtige gegevens: Cache geen bestanden die vaak wijzigen of zeer groot en uniek zijn per uitvoering, zoals bouwartefacten die voor implementatie bedoeld zijn.
Uitdaging met cachesleutels
Je hebt een Java-project dat Maven gebruikt. De afhankelijkheden ervan zijn gedefinieerd in pom.xml en Maven slaat gedownloade JAR-bestanden meestal op in ~/.m2/repository.
Welke cacheconfiguratie zorgt er het best voor dat Maven-afhankelijkheden in de cache worden opgeslagen en correct ongeldig worden gemaakt wanneer pom.xml wijzigt?
Samenvatting: cache voor snelheid!
Goed gedaan! Je hebt geleerd hoe je caching in GitHub Actions implementeert om je CI/CD-werkstromen aanzienlijk te versnellen.
- De actie
actions/cacheis je hulpmiddel. - Gebruik
keyenpathom te bepalen wat je cacht en hoe je dat doet. hashFilesmaakt dynamische sleutels voor slimme ongeldigmaking.restore-keysbiedt waardevolle terugvalopties.
Door afhankelijkheden slim te cachen, bespaar je bouwtijd en rekenresources, waardoor je pijplijnen efficiënter worden!
Leer DevOps-bootcamp met een AI-tutor — gratis
Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.
- Cursussen
- 142
- Lessen
- 568
Veelgestelde vragen
Is de les “Afhankelijkheden cachen voor meer snelheid” gratis?
Ja — je kunt hier op het web alle 3 lessen van het leerpad DevOps-bootcamp, waaronder “Afhankelijkheden cachen voor meer snelheid”, gratis volledig lezen. Daarna ontgrendelt CoddyKit PRO alle lessen, plus interactieve oefeningen met een ingebouwde code-editor en een AI-tutor die 24/7 beschikbaar is. De cursus DevOps-bootcamp bevat in totaal 4 lessen.
Wat leer ik in “Afhankelijkheden cachen voor meer snelheid”?
Implementeer caching om uw workflows aanzienlijk sneller uit te voeren door gegenereerde afhankelijkheden en buildresultaten opnieuw te gebruiken. Je oefent met DevOps-bootcamp door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.
Heb ik ervaring nodig om met DevOps-bootcamp te beginnen?
Ervaring vooraf is niet nodig. DevOps-bootcamp op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 2 van 4.
Hoe lang duurt de les “Afhankelijkheden cachen voor meer snelheid”?
De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.
Kan ik code schrijven en uitvoeren in deze les over DevOps-bootcamp?
Ja. Elke les over DevOps-bootcamp bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.
Alle lessen in deze cursus
- Matrix-builds voor meerdere omgevingen
- Afhankelijkheden cachen voor meer snelheid
- Herbruikbare workflows en Actions
- Conditionele uitvoering en jobafhankelijkheden