DevOps-bootcamp · Les

Afhankelijkheden cachen voor meer snelheid

Implementeer caching om uw workflows aanzienlijk sneller uit te voeren door gegenereerde afhankelijkheden en buildresultaten opnieuw te gebruiken.

Les 2 van 411 stappen

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 test

Terugval 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 discover

Wanneer 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 je lookup-path expliciet 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, zoals package-lock.json en requirements.txt.
  • Wees specifiek met path: Cache alleen wat nodig is, zoals node_modules en ~/.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/cache is je hulpmiddel.
  • Gebruik key en path om te bepalen wat je cacht en hoe je dat doet.
  • hashFiles maakt dynamische sleutels voor slimme ongeldigmaking.
  • restore-keys biedt waardevolle terugvalopties.

Door afhankelijkheden slim te cachen, bespaar je bouwtijd en rekenresources, waardoor je pijplijnen efficiënter worden!

Gratis beginnen

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

  1. Matrix-builds voor meerdere omgevingen
  2. Afhankelijkheden cachen voor meer snelheid
  3. Herbruikbare workflows en Actions
  4. Conditionele uitvoering en jobafhankelijkheden
← Terug naar DevOps-bootcamp