0Pricing
CI/CD with GitHub Actions & DevOps Pipelines · Lezione

Memorizzare nella cache le dipendenze per aumentare la velocità

Implementi il caching per accelerare significativamente l’esecuzione dei workflow riutilizzando dipendenze generate e output delle build.

Memorizzare nella cache le dipendenze per aumentare la velocità è una lezione CI/CD with GitHub Actions & DevOps Pipelines gratuita su CoddyKit. Questa è la lezione 2 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento CI/CD with GitHub Actions & DevOps Pipelines, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso CI/CD with GitHub Actions & DevOps Pipelines include 4 lezioni in totale.

Velocizzare i workflow con la cache

Ha mai notato che il workflow scarica di nuovo le stesse dipendenze ogni volta? Questo rallenta tutto!

Il caching in GitHub Actions consente di archiviare e riutilizzare i file delle esecuzioni precedenti. In questo modo le esecuzioni successive del workflow diventano molto più veloci.

Presentazione dell'action Cache

GitHub mette a disposizione un'action speciale chiamata actions/cache@v3. Questa action è progettata per salvare e ripristinare i file, così da rendere più veloci i workflow.

È intelligente: verifica se la cache esiste già prima di tentare di ripristinarla e la salva se non esiste.

Chiave e percorso della cache

Due parametri fondamentali di actions/cache sono key e path:

  • key: una stringa univoca che identifica la cache. Se viene trovata una cache con questa chiave, viene ripristinata.
  • path: i percorsi dei file o le directory da memorizzare nella cache. Indica all'action *che cosa* salvare o ripristinare.

La chiave include spesso un hash dei file delle dipendenze, per garantire che la cache venga invalidata quando le dipendenze cambiano.

Memorizzare nella cache le dipendenze di Node.js

Memorizziamo nella cache node_modules di un progetto Node.js. Useremo hashFiles per creare una chiave dinamica basata su package-lock.json.

Provi a eseguire questo semplice frammento di workflow:

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

Fallback con le chiavi di ripristino

Che cosa succede se la key esatta non corrisponde a una cache? È qui che entrano in gioco le restore-keys!

Le restore-keys forniscono un elenco di chiavi di fallback da cercare. Se la chiave principale, ad esempio npm-${{ hashFiles(...) }}, non produce risultati, GitHub Actions prova a trovare una cache usando le restore-keys nell'ordine indicato.

Nel nostro esempio, npm- cerca qualsiasi cache che inizi con "npm-", una soluzione utile se sono cambiate solo versioni minori delle dipendenze.

Memorizzare nella cache le dipendenze di Python

Il caching non è riservato a Node.js! È possibile applicare lo stesso principio ad altri linguaggi, come Python. In questo caso, memorizziamo nella cache l'ambiente virtuale di Python e la cache di pip.

Qui la chiave usa hashFiles('requirements.txt'), mentre il percorso punta all'ambiente virtuale e alla directory della cache di 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

Quando invalidare la cache

Una cache è utile solo se è sufficientemente aggiornata. Se cambiano le dipendenze, dovrebbe cambiare anche la cache!

La cache viene invalidata automaticamente se cambia la key principale, ad esempio npm-${{ hashFiles('package-lock.json') }}. Se package-lock.json viene aggiornato, l'hash cambia e viene creata una nuova cache.

È anche possibile forzare la ricostruzione della cache modificando manualmente la chiave, ad esempio aggiungendo un suffisso di versione come npm-v2-${{ hashFiles(...) }}.

Ambito e limiti della cache

È utile sapere come funziona la cache in background:

  • Ambito: le cache sono definite per repository e per branch. Una cache del branch main non verrà usata in un branch di funzionalità, a meno che non si configuri esplicitamente lookup-path.
  • Limite di dimensione: ogni cache può avere una dimensione massima di 10 GB.
  • Conservazione: le cache vengono conservate per 7 giorni dall'ultimo accesso. Le cache vecchie e inutilizzate vengono rimosse automaticamente.

Procedure consigliate per il caching

Per ottenere il massimo dal caching:

  • Usare hashFiles: collegare sempre la chiave della cache ai file manifest delle dipendenze, come package-lock.json e requirements.txt.
  • Specificare con precisione path: memorizzare nella cache solo ciò che è necessario, come node_modules e ~/.cache/pip.
  • Usare restore-keys: fornire fallback per aumentare la percentuale di cache hit.
  • Evitare il caching dei dati volatili: non memorizzare nella cache file che cambiano frequentemente o che sono molto grandi e unici per ogni esecuzione, come gli artefatti di build destinati alla distribuzione.

Sfida sulla chiave della cache

Si dispone di un progetto Java che usa Maven. Le dipendenze sono definite in pom.xml e Maven archivia in genere i JAR scaricati in ~/.m2/repository.

Quale configurazione della cache garantisce al meglio che le dipendenze Maven vengano memorizzate nella cache e invalidate correttamente quando cambia pom.xml?

Riepilogo: cache per la velocità!

Ottimo lavoro! Ha imparato a implementare il caching in GitHub Actions per velocizzare significativamente i workflow CI/CD.

  • L'action actions/cache è lo strumento da usare.
  • Usare key e path per definire che cosa memorizzare nella cache e come farlo.
  • hashFiles crea chiavi dinamiche per un'invalidazione intelligente.
  • restore-keys fornisce fallback preziosi.

Memorizzando le dipendenze nella cache in modo intelligente, si risparmiano tempo di build e risorse computazionali, rendendo le pipeline più efficienti!

Domande Frequenti

La lezione «Memorizzare nella cache le dipendenze per aumentare la velocità» è gratuita?

Sì — il testo completo di «Memorizzare nella cache le dipendenze per aumentare la velocità» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso CI/CD with GitHub Actions & DevOps Pipelines, passa a CoddyKit PRO. Il corso CI/CD with GitHub Actions & DevOps Pipelines include 4 lezioni in totale.

Cosa imparerò in «Memorizzare nella cache le dipendenze per aumentare la velocità»?

Implementi il caching per accelerare significativamente l’esecuzione dei workflow riutilizzando dipendenze generate e output delle build. Eserciti CI/CD with GitHub Actions & DevOps Pipelines con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.

Ho bisogno di esperienza per iniziare CI/CD with GitHub Actions & DevOps Pipelines?

Non è richiesta alcuna esperienza precedente. CI/CD with GitHub Actions & DevOps Pipelines su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 2 di 4.

Quanto tempo richiede la lezione «Memorizzare nella cache le dipendenze per aumentare la velocità»?

La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.

Posso scrivere ed eseguire codice in questa lezione CI/CD with GitHub Actions & DevOps Pipelines?

Sì. Ogni lezione CI/CD with GitHub Actions & DevOps Pipelines include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.

Tutte le lezioni di questo corso

  1. Build a matrice per più ambienti
  2. Memorizzare nella cache le dipendenze per aumentare la velocità
  3. Workflow e Actions riutilizzabili
  4. Esecuzione condizionale e dipendenze tra job
← Torna a CI/CD with GitHub Actions & DevOps Pipelines