DevOps-bootcamp · Lektion

Cacha beroenden för högre hastighet

Implementera cachning för att avsevärt snabba upp körningen av era arbetsflöden genom att återanvända genererade beroenden och byggutdata.

Lektion 2 av 411 steg

Cacha beroenden för högre hastighet är en gratis lektion i DevOps-bootcamp på CoddyKit. Detta är lektion 2 av 4. Du kan läsa vilka 3 lektioner som helst i den här lärvägen kostnadsfritt i sin helhet – därefter låser CoddyKit PRO upp alla lektioner, plus praktisk övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Den ingår i lärvägen för DevOps-bootcamp, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i DevOps-bootcamp innehåller totalt 4 lektioner.

Accelerera arbetsflöden med cachning

Har ni någon gång lagt märke till att arbetsflödet laddar ned samma beroenden på nytt varje gång? Det gör körningen långsammare!

Cachning i GitHub Actions låter er lagra och återanvända filer från tidigare körningar. Det gör efterföljande arbetsflödeskörningar betydligt snabbare.

Lär känna cache-åtgärden

GitHub tillhandahåller en särskild åtgärd som heter actions/cache@v3. Den här åtgärden är utformad för att spara och återställa filer så att era arbetsflöden blir snabbare.

Den är smart: först kontrollerar den om cachen redan finns innan den försöker återställa den, och sparar den om den inte finns.

Cache-nyckel och sökväg

Två viktiga parametrar för actions/cache är key och path:

  • key: En unik sträng som identifierar er cache. Om en cache med den här nyckeln hittas återställs den.
  • path: De filsökvägar eller kataloger som ni vill cacha. Detta anger för åtgärden *vad* som ska sparas eller återställas.

Nyckeln innehåller ofta en hash av beroendefiler för att säkerställa att cachen ogiltigförklaras när beroendena ändras.

Cacha Node.js-beroenden

Vi cachar node_modules för ett Node.js-projekt. Vi använder hashFiles för att skapa en dynamisk nyckel baserad på package-lock.json.

Prova att köra detta enkla arbetsflödesutdrag:

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

Reservalternativ med restore-keys

Vad händer om er exakta key inte matchar någon cache? Då kommer restore-keys till nytta!

restore-keys tillhandahåller en lista med reservnycklar att söka efter. Om den primära nyckeln (till exempel npm-${{ hashFiles(...) }}) inte ger någon träff försöker GitHub Actions hitta en cache med hjälp av restore-keys, i tur och ordning.

I vårt exempel försöker npm- hitta en cache som börjar med "npm-", vilket är användbart om endast mindre ändringar har gjorts i beroendeversionerna.

Cacha Python-beroenden

Cachning är inte bara till för Node.js! Ni kan använda samma princip för andra språk, till exempel Python. Här cachar vi Pythons virtuella miljö och pip-cache.

Nyckeln använder här hashFiles('requirements.txt'), och sökvägen pekar på den virtuella miljön och pips cachekatalog.

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

När cachen ska ogiltigförklaras

En cache är bara användbar om den är tillräckligt aktuell. Om era beroenden ändras bör även cachen ändras!

Cachen ogiltigförklaras automatiskt om er primära key (till exempel npm-${{ hashFiles('package-lock.json') }}) ändras. Om package-lock.json uppdateras ändras hashen och en ny cache skapas.

Ni kan också tvinga fram en ny cache genom att ändra nyckeln manuellt, till exempel genom att lägga till ett versionssuffix som npm-v2-${{ hashFiles(...) }}.

Cacheomfattning och begränsningar

Det är bra att känna till hur cachning fungerar bakom kulisserna:

  • Omfattning: Cachar avgränsas per repository och gren. En cache på grenen main används inte på en funktionsgren, om ni inte uttryckligen konfigurerar lookup-path.
  • Storleksgräns: Varje cache får vara högst 10 GB.
  • Bevarande: Cachar behålls i 7 dagar efter den senaste åtkomsten. Gamla, oanvända cachar tas bort automatiskt.

Smarta cachningsrutiner

Så får ni ut mesta möjliga av cachning:

  • Använd hashFiles: Knyt alltid cache-nyckeln till manifestfiler för beroenden, till exempel package-lock.json och requirements.txt.
  • Var specifik med path: Cacha endast det som behövs, till exempel node_modules och ~/.cache/pip.
  • Använd restore-keys: Ange reservalternativ för att öka cacheträffsfrekvensen.
  • Undvik att cacha snabbt föränderlig data: Cacha inte filer som ändras ofta eller som är mycket stora och unika för varje körning, till exempel byggartefakter som ska driftsättas.

Utmaning: Cache-nyckel

Ni har ett Java-projekt som använder Maven. Dess beroenden definieras i pom.xml, och Maven lagrar vanligtvis nedladdade JAR-filer i ~/.m2/repository.

Vilken cachekonfiguration säkerställer bäst att Maven-beroendena cachas och ogiltigförklaras korrekt när pom.xml ändras?

Sammanfattning: Cache för ökad hastighet!

Bra jobbat! Ni har lärt er att implementera cachning i GitHub Actions för att avsevärt snabba upp era CI/CD-arbetsflöden.

  • Åtgärden actions/cache är ert verktyg.
  • Använd key och path för att definiera vad som ska cachas och hur.
  • hashFiles skapar dynamiska nycklar för smart ogiltigförklaring.
  • restore-keys tillhandahåller värdefulla reservalternativ.

Genom att cacha beroenden på ett intelligent sätt sparar ni byggtid och beräkningsresurser, vilket gör era pipelines effektivare!

Gratis att börja

Lär dig DevOps-bootcamp med en AI-lärare – gratis

Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.

Kurser
142
Lektioner
568

Vanliga frågor

Är lektionen ”Cacha beroenden för högre hastighet” gratis?

Ja – du kan läsa vilka 3 lektioner som helst i lärvägen DevOps-bootcamp, inklusive ”Cacha beroenden för högre hastighet”, kostnadsfritt i sin helhet här på webben. Därefter låser CoddyKit PRO upp alla lektioner, plus interaktiv övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Kursen i DevOps-bootcamp innehåller totalt 4 lektioner.

Vad lär jag mig i ”Cacha beroenden för högre hastighet”?

Implementera cachning för att avsevärt snabba upp körningen av era arbetsflöden genom att återanvända genererade beroenden och byggutdata. Ni övar på DevOps-bootcamp med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.

Behöver jag någon erfarenhet för att börja lära mig DevOps-bootcamp?

Du behöver inga förkunskaper. Utbildningen i DevOps-bootcamp på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 2 av 4.

Hur lång tid tar lektionen ”Cacha beroenden för högre hastighet”?

De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.

Kan jag skriva och köra kod i den här DevOps-bootcamp-lektionen?

Ja. Varje DevOps-bootcamp-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.

Alla lektioner i den här kursen

  1. Matrisbyggen för flera miljöer
  2. Cacha beroenden för högre hastighet
  3. Återanvändbara arbetsflöden och Actions
  4. Villkorsstyrd körning och jobbberoenden
← Tillbaka till DevOps-bootcamp