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 DevOps Bootcamp 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 DevOps Bootcamp, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso DevOps Bootcamp 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 testFallback 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 discoverQuando 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
mainnon verrà usata in un branch di funzionalità, a meno che non si configuri esplicitamentelookup-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, comepackage-lock.jsonerequirements.txt. - Specificare con precisione
path: memorizzare nella cache solo ciò che è necessario, comenode_modulese~/.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
keyepathper definire che cosa memorizzare nella cache e come farlo. hashFilescrea chiavi dinamiche per un'invalidazione intelligente.restore-keysfornisce 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 DevOps Bootcamp, passa a CoddyKit PRO. Il corso DevOps Bootcamp 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 DevOps Bootcamp 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 DevOps Bootcamp?
Non è richiesta alcuna esperienza precedente. DevOps Bootcamp 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 DevOps Bootcamp?
Sì. Ogni lezione DevOps Bootcamp 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
- Build a matrice per più ambienti
- Memorizzare nella cache le dipendenze per aumentare la velocità
- Workflow e Actions riutilizzabili
- Esecuzione condizionale e dipendenze tra job