Filtri sui percorsi e build selettive
Attivi solo i workflow e i job interessati da una modifica usando filtri sui percorsi, rilevamento delle modifiche e matrici condizionali in configurazioni monorepo e multi-repo.
Filtri sui percorsi e build selettive è una lezione CI/CD with GitHub Actions & DevOps Pipelines gratuita su CoddyKit. Questa è la lezione 4 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.
Il problema delle build sprecate
In un monorepo, una modifica alla documentazione non dovrebbe ricompilare ed eseguire nuovamente il deploy del backend, del frontend e dell'app mobile.
Le build selettive eseguono solo le parti della pipeline interessate da una modifica, risparmiando tempo e minuti del runner.
Filtri sui percorsi nei trigger
L'approccio più semplice consiste nel filtro paths sul trigger. Un workflow viene eseguito solo quando cambiano file che corrispondono al pattern.
on:
push:
paths:
- 'services/api/**'Ignorare i percorsi
Può anche fare l'opposto con paths-ignore: esegua il workflow per tutto tranne che per i percorsi elencati.
È utile per saltare la CI quando cambiano solo i file della documentazione.
on:
push:
paths-ignore:
- 'docs/**'
- '**.md'Limiti dei filtri dei trigger
I filtri a livello di trigger decidono se eseguire l'intero workflow. In un monorepo, però, spesso si desidera un solo workflow che decida quali job eseguire.
A questo scopo, rilevi le modifiche all'interno del workflow e scelga un ramo in base al risultato.
Azione per rilevare le modifiche
L'azione dorny/paths-filter analizza il diff e restituisce valori booleani per ogni gruppo di percorsi indicato.
I job successivi leggono questi output per decidere se eseguire.
- uses: dorny/paths-filter@v3
id: changes
with:
filters: |
api:
- 'services/api/**'
web:
- 'services/web/**'Condizionare i job alle modifiche rilevate
Un job di rilevamento espone degli output; i job a valle usano if con il contesto needs per essere eseguiti in modo condizionale.
build-api:
needs: detect
if: needs.detect.outputs.api == 'true'
runs-on: ubuntu-latest
steps:
- run: ./build-api.shCollegare gli output
Il job di rilevamento deve dichiarare gli outputs che inoltrano i risultati del filtro, in modo che gli altri job possano leggerli.
detect:
runs-on: ubuntu-latest
outputs:
api: ${{ steps.changes.outputs.api }}
web: ${{ steps.changes.outputs.web }}Matrici dinamiche
Per molti servizi, può creare una matrice dinamica a partire dai percorsi modificati, così solo i servizi modificati entrano nella matrice.
Generi un elenco JSON in un job e lo passi alla matrice del job successivo.
strategy:
matrix:
service: ${{ fromJSON(needs.detect.outputs.list) }}Git diff per il rilevamento
Può rilevare le modifiche anche con git puro. Confronti il commit corrente con la base per elencare le directory modificate.
git diff --name-only origin/main...HEAD | cut -d/ -f1-2 | sort -uControlli obbligatori e skip
Attenzione: se un controllo di stato obbligatorio viene saltato perché non è cambiato nulla, la protezione del branch potrebbe bloccare il merge in attesa del controllo.
La soluzione consiste nell'aggiungere un job gate finale che abbia sempre esito positivo e sia l'unico controllo obbligatorio, riepilogando i job condizionali.
gate:
needs: [build-api, build-web]
if: always()
runs-on: ubuntu-latest
steps:
- run: echo 'all required jobs resolved'Caching per pacchetto
Le build selettive si combinano bene con le cache per pacchetto. Usi come chiave della cache il lockfile di ciascun servizio, così le modifiche non correlate non la invalidano.
Insieme, mantengono rapide le pipeline del monorepo anche quando il repository cresce.
Verifica rapida
Verifichi la Sua comprensione delle build selettive.
Riepilogo
Ha imparato a compilare solo ciò che è cambiato.
pathsepaths-ignoreregolano l'esecuzione degli interi workflow- Le azioni di rilevamento delle modifiche restituiscono valori booleani per ciascun percorso
- I job usano
if+needsper essere eseguiti in modo condizionale e le matrici possono essere create dinamicamente - Aggiunga un job gate con
always()per la compatibilità con i controlli obbligatori
Le build selettive mantengono la CI/CD dei monorepo rapida ed economica.
Domande Frequenti
La lezione «Filtri sui percorsi e build selettive» è gratuita?
Sì — il testo completo di «Filtri sui percorsi e build selettive» è 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 «Filtri sui percorsi e build selettive»?
Attivi solo i workflow e i job interessati da una modifica usando filtri sui percorsi, rilevamento delle modifiche e matrici condizionali in configurazioni monorepo e multi-repo. 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 4 di 4.
Quanto tempo richiede la lezione «Filtri sui percorsi e build selettive»?
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
- CI/CD per monorepo
- Workflow tra repository
- Gestione centralizzata dei workflow
- Filtri sui percorsi e build selettive