Build a matrice per più ambienti
Utilizzi strategie a matrice per eseguire job in parallelo su più versioni di linguaggi, sistemi operativi o configurazioni.
Build a matrice per più ambienti è 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.
Cosa sono le build con matrice?
Benvenuto a una potente funzionalità di GitHub Actions: le build con matrice! Immagini di dover testare il codice in molti ambienti diversi, ad esempio con vari sistemi operativi o versioni dei linguaggi di programmazione.
Anziché creare un workflow separato per ogni combinazione, le build con matrice consentono di definire un insieme di variabili, quindi GitHub Actions eseguirà automaticamente i job per ogni possibile combinazione di tali variabili.
Perché usare le build con matrice?
Le build con matrice sono estremamente utili per:
- Test multipiattaforma: garantire che l'applicazione funzioni su Windows, macOS e Linux.
- Compatibilità con più versioni: eseguire test con diverse versioni di Node.js, Python o del database.
- Esecuzione parallela: eseguire contemporaneamente tutti questi test, risparmiando molto tempo.
Consentono di ottenere una copertura dei test più ampia in modo efficiente.
Sintassi di base della matrice
Si definisce una matrice nella sezione strategy di un job. All'interno di strategy.matrix, si elencano una o più variabili, ciascuna con un array di valori.
GitHub Actions crea quindi un job per ogni combinazione. Vediamo come appare:
jobs:
build:
runs-on: ubuntu-latest
strategy:
matrix:
node-version: [14, 16, 18]
steps:
- uses: actions/checkout@v3
- name: Use Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v3
with:
node-version: ${{ matrix.node-version }}
- name: Install dependencies
run: npm ci
- name: Run tests
run: npm testEsempio: più versioni di Node.js
Nel frammento precedente abbiamo definito una variabile node-version con tre valori: 14, 16 e 18.
Questa singola definizione di job attiverà tre job separati, ciascuno eseguito su ubuntu-latest ma con una versione diversa di Node.js. In questo modo si garantisce che il progetto funzioni con tutte queste versioni.
Combinare più variabili della matrice
Non si è limitati a una sola variabile! È possibile combinare più variabili nella matrice. Ad esempio, potrebbe essere necessario testare diversi sistemi operativi con versioni diverse di Node.js.
È sufficiente aggiungere altre coppie chiave-valore in strategy.matrix. Il numero totale di job sarà il prodotto del numero di valori di ciascuna variabile.
Esempio: matrice di sistemi operativi e Node.js
Ecco come configurare una matrice per eseguire test sia su Ubuntu sia su Windows, con le versioni 16 e 18 di Node.js.
Verranno creati 2 (sistemi operativi) * 2 (versioni di Node.js) = 4 job separati.
jobs:
build:
runs-on: ${{ matrix.os }}
strategy:
matrix:
os: [ubuntu-latest, windows-latest]
node-version: [16, 18]
steps:
- uses: actions/checkout@v3
- name: Use Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v3
with:
node-version: ${{ matrix.node-version }}
- name: Install dependencies
run: npm ci
- name: Run tests
run: npm testPersonalizzare le combinazioni con 'include'
A volte sono necessarie combinazioni specifiche che non rientrano nel prodotto cartesiano predefinito, oppure si desidera aggiungere variabili extra per alcune build. Utilizzare include per aggiungere nuove voci alla matrice.
Ad esempio, potrebbe essere necessario eseguire un test aggiuntivo solo su Ubuntu con Node.js 14 oppure passare una variabile d'ambiente specifica a una determinata combinazione di sistema operativo e versione.
jobs:
build:
runs-on: ${{ matrix.os }}
strategy:
matrix:
os: [ubuntu-latest, windows-latest]
node-version: [16, 18]
include:
- os: ubuntu-latest
node-version: 14
test-suite: 'full'Escludere combinazioni specifiche
Che cosa succede se una combinazione è notoriamente soggetta a errori o non è rilevante per il progetto? La parola chiave exclude consente di rimuovere configurazioni specifiche dalla matrice.
In questo modo si evitano esecuzioni di job non necessarie e ci si concentra sui casi di test rilevanti.
jobs:
build:
runs-on: ${{ matrix.os }}
strategy:
matrix:
os: [ubuntu-latest, windows-latest]
node-version: [16, 18, 20]
exclude:
- os: windows-latest
node-version: 16Accedere alle variabili della matrice
All'interno degli step del job, è possibile accedere ai valori correnti delle variabili della matrice usando la sintassi ${{ matrix.variable_name }}. Questo è fondamentale per configurare gli strumenti o eseguire comandi specifici per ogni combinazione della matrice.
Ad esempio, ${{ matrix.os }} imposta dinamicamente il sistema operativo del runner, mentre ${{ matrix.node-version }} configura l'action di setup di Node.js.
Applicazioni pratiche
Le build con matrice sono potenti per:
- Sviluppo di librerie: eseguire test con più versioni di una dipendenza.
- Progetti multilinguaggio: compilare ed eseguire test su componenti scritti con linguaggi o compilatori diversi.
- Compatibilità con i browser: se lo strumento utilizzato lo supporta, testare le applicazioni web su browser diversi.
Rendono più semplici gli scenari di test complessi, trasformandoli in workflow concisi e facili da mantenere.
Sfida sulle build con matrice
Si consideri un workflow di GitHub Actions che utilizza una strategia a matrice. La matrice è definita come:
strategy:
matrix:
os: [ubuntu-latest, macos-latest]
python-version: [3.8, 3.9]
exclude:
- os: macos-latest
python-version: 3.8
Quanti job verranno creati da questa configurazione della matrice?
Riepilogo: build con matrice
Ottimo lavoro! Ha imparato a conoscere le build con matrice di GitHub Actions.
- Consentono di eseguire job per più combinazioni di variabili, come sistemi operativi e versioni dei linguaggi.
- Si definiscono usando
strategy.matrixall'interno di un job. includeaggiunge combinazioni specifiche, mentreexcludele rimuove.- È possibile accedere alle variabili tramite
${{ matrix.variable_name }}.
Le build con matrice sono essenziali per eseguire test efficienti e completi in ambienti diversi. Continui a esercitarsi per padroneggiarle!
Domande Frequenti
La lezione «Build a matrice per più ambienti» è gratuita?
Sì — il testo completo di «Build a matrice per più ambienti» è 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 «Build a matrice per più ambienti»?
Utilizzi strategie a matrice per eseguire job in parallelo su più versioni di linguaggi, sistemi operativi o configurazioni. 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 «Build a matrice per più ambienti»?
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
- 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