CI/CD with GitHub Actions & DevOps Pipelines · Lezione

CI/CD per monorepo

Esplori strategie per ottimizzare le pipeline CI/CD nei monorepo, inclusa l’esecuzione selettiva dei job in base ai file modificati.

Lezione 1 di 411 passaggi

CI/CD per monorepo è una lezione CI/CD with GitHub Actions & DevOps Pipelines gratuita su CoddyKit. Questa è la lezione 1 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.

Che cos'è un monorepo?

Un monorepo è un singolo repository che contiene il codice di molti progetti o applicazioni. Invece di avere repository separati per ogni servizio o libreria, tutto si trova nello stesso repository.

È come una grande biblioteca con molti libri (i progetti) nello stesso edificio (il repository), invece di un edificio separato per ogni libro. Questo approccio presenta vantaggi e svantaggi, soprattutto per la CI/CD.

Sfide della CI/CD nei monorepo

Sebbene i monorepo offrano vantaggi come una più semplice condivisione del codice, possono creare difficoltà per le pipeline di Continuous Integration/Continuous Delivery (CI/CD):

  • Build lenti: se ogni modifica attiva una build completa e la suite di test per *tutti* i progetti, le pipeline diventano molto lente.
  • Spreco di risorse: eseguire inutilmente job non correlati consuma minuti di build e risorse.
  • Frustrazione degli sviluppatori: cicli di feedback lunghi possono rallentare la velocità di sviluppo.

La necessità di una CI/CD selettiva

La chiave per una CI/CD efficiente nei monorepo è la selettività. Le pipeline devono essere abbastanza intelligenti da:

  • Identificare *che cosa* è cambiato.
  • Eseguire i job CI/CD *solo* per i progetti interessati da tali modifiche.

Questo approccio fa risparmiare tempo, riduce il consumo di risorse e fornisce agli sviluppatori un feedback più rapido.

Attivazione in base ai percorsi: `on.paths`

GitHub Actions offre un metodo efficace per ottenere questa selettività usando il filtro paths nei trigger del workflow. È possibile specificare directory o file le cui modifiche devono attivare un workflow.

Se cambia un file al di fuori di questi percorsi, il workflow non verrà eseguito. È una soluzione perfetta per i monorepo!

on:
  push:
    branches:
      - main
    paths:
      - 'apps/frontend/**'
      - 'libs/shared/**'

Il filtro dei percorsi in azione

Ecco un semplice workflow che viene eseguito solo quando vengono inviate modifiche a file contenuti nella directory apps/backend o a uno specifico file README.md.

In questo modo vengono attivati solo i test o le build pertinenti per il servizio backend.

name: Backend CI

on:
  push:
    branches:
      - main
    paths:
      - 'apps/backend/**'
      - 'README.md'

jobs:
  build-backend:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Build backend app
        run: echo "Building backend..."

Ignorare i percorsi: `paths-ignore`

A volte si desidera eseguire un workflow per *la maggior parte* delle modifiche, ignorandolo però quando vengono modificati solo determinati file, ad esempio documentazione o file di log. Il filtro paths-ignore è perfetto per questo scopo.

Funziona in modo simile a paths, ma specifica i file che *non* devono attivare il workflow.

on:
  pull_request:
    branches:
      - main
    paths-ignore:
      - 'docs/**'
      - '**/*.md'

Esecuzioni selettive dinamiche con `git diff`

Per una logica più complessa, è possibile usare comandi Git come git diff nei passaggi del workflow per controllare dinamicamente le modifiche. In questo modo è possibile creare condizioni personalizzate.

Ad esempio, si può verificare se sono state apportate modifiche a una cartella specifica e impostare una variabile di output per decidere se eseguire un job successivo.

Esempio di esecuzione condizionale di un job

Questo passaggio del workflow usa git diff per verificare se sono cambiati file all'interno di apps/api/ tra il commit corrente e il branch di base. In caso affermativo, imposta la variabile di output api_changed su 'true'.

Questo output può quindi determinare se eseguire un job 'deploy API'.

jobs:
  check-changes:
    runs-on: ubuntu-latest
    outputs:
      api_changed: ${{ steps.diff.outputs.api_changed }}
    steps:
      - uses: actions/checkout@v4
      - name: Check API changes
        id: diff
        run: |
          if git diff --quiet ${{ github.event.before }} ${{ github.sha }} -- apps/api/;
          then
            echo "api_changed=false" >> $GITHUB_OUTPUT
          else
            echo "api_changed=true" >> $GITHUB_OUTPUT
          fi

  deploy-api:
    needs: check-changes
    if: needs.check-changes.outputs.api_changed == 'true'
    runs-on: ubuntu-latest
    steps:
      - name: Deploy API
        run: echo "Deploying API..."

Struttura del monorepo per la CI/CD

Una struttura organizzata del monorepo semplifica notevolmente la CI/CD selettiva. Raggruppare file e progetti correlati in directory ben definite facilita l'uso efficace dei filtri paths.

  • /apps/frontend
  • /apps/backend
  • /libs/shared
  • /docs

Una separazione chiara consente di indirizzare i workflow con precisione.

Quiz sulla CI/CD nei monorepo

Ottimizzare la CI/CD per i monorepo è fondamentale per mantenere alta la velocità degli sviluppatori e usare le risorse in modo efficiente. Valuti quali strategie affrontano meglio le sfide di una grande base di codice consolidata.

Riepilogo e prossimi passi

Ha imparato ad affrontare le sfide della CI/CD nei monorepo implementando l'esecuzione selettiva dei job. Usando i filtri paths di GitHub Actions e tecniche avanzate con git diff, può fare in modo che le pipeline eseguano solo ciò che è necessario.

Questo porta a feedback più rapidi, costi ridotti e un'esperienza di sviluppo più fluida. Continui a esplorare come perfezionare i workflow per ottenere un'efficienza ancora maggiore!

Gratis per iniziare

Impara CI/CD with GitHub Actions & DevOps Pipelines con un tutor IA — gratis

Scrivi ed esegui vero codice nel tuo browser, ricevi aiuto istantaneo da un tutor IA disponibile 24/7, e riprendi da dove hai lasciato sul web o nell'app.

Corsi
12
Lezioni
48

Domande Frequenti

La lezione «CI/CD per monorepo» è gratuita?

Sì — il testo completo di «CI/CD per monorepo» è 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 «CI/CD per monorepo»?

Esplori strategie per ottimizzare le pipeline CI/CD nei monorepo, inclusa l’esecuzione selettiva dei job in base ai file modificati. 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 1 di 4.

Quanto tempo richiede la lezione «CI/CD per monorepo»?

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. CI/CD per monorepo
  2. Workflow tra repository
  3. Gestione centralizzata dei workflow
  4. Filtri sui percorsi e build selettive
← Torna a CI/CD with GitHub Actions & DevOps Pipelines