Matrix-builds til flere miljøer
Brug matrixstrategier til at køre jobs parallelt på tværs af flere sprogversioner, operativsystemer eller konfigurationer.
Matrix-builds til flere miljøer er en gratis Intensiv DevOps-uddannelse-lektion på CoddyKit. Dette er lektion 1 af 4. Du kan læse alle 3 lektioner i dette læringsspor gratis i deres fulde længde — derefter låser CoddyKit PRO alle lektioner op samt praktiske øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Den er en del af læringsforløbet i Intensiv DevOps-uddannelse, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. Intensiv DevOps-uddannelse-kurset indeholder 4 lektioner i alt.
Hvad er matrix-builds?
Velkommen til en effektiv funktion i GitHub Actions: matrix-builds! Forestil dig, at du skal teste din kode i mange forskellige miljøer, f.eks. forskellige operativsystemer eller versioner af programmeringssprog.
I stedet for at oprette et separat workflow for hver kombination kan du med matrix-builds definere et sæt variabler, hvorefter GitHub Actions automatisk kører dine jobs for alle mulige kombinationer af disse variabler.
Hvorfor bruge matrix-builds?
Matrix-builds er utroligt nyttige til:
- Test på tværs af platforme: Sikring af, at din applikation fungerer på Windows, macOS og Linux.
- Kompatibilitet på tværs af versioner: Test med forskellige versioner af Node.js, Python eller din database.
- Parallel udførelse: Kørsel af alle disse test samtidig, så du sparer meget tid.
De hjælper dig med effektivt at opnå en bredere testdækning.
Grundlæggende matrix-syntaks
Du definerer en matrix i sektionen strategy for et job. I strategy.matrix angiver du en eller flere variabler, hver med en række værdier.
Derefter opretter GitHub Actions et job for hver kombination. Lad os se, hvordan det ser ud:
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 testEksempel: Flere Node.js-versioner
I det foregående kodestykke definerede vi variablen node-version med tre værdier: 14, 16 og 18.
Denne ene jobdefinition udløser tre separate jobs, som hver kører på ubuntu-latest, men bruger en forskellig Node.js-version. Det sikrer, at dit projekt fungerer på tværs af disse versioner.
Kombination af flere matrix-variabler
Du er ikke begrænset til kun én variabel! Du kan kombinere flere variabler i din matrix. Du kan f.eks. få brug for at teste forskellige operativsystemer med forskellige Node.js-versioner.
Du skal blot tilføje flere nøgleværdi-par under strategy.matrix. Det samlede antal jobs er produktet af antallet af værdier for hver variabel.
Eksempel: Matrix med operativsystemer og Node.js
Sådan kan du opsætte en matrix, der tester på både Ubuntu og Windows med Node.js-versionerne 16 og 18.
Det opretter 2 (operativsystemer) * 2 (Node.js-versioner) = 4 separate jobs.
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 testTilpasning af kombinationer med 'include'
Nogle gange har du brug for specifikke kombinationer, som ikke dækkes af det standardmæssige kartesiske produkt, eller du vil tilføje ekstra variabler til bestemte builds. Brug include til at tilføje nye matrixposter.
Du vil måske f.eks. køre en ekstra test på Ubuntu med Node.js 14 eller videregive en bestemt miljøvariabel til en bestemt kombination af operativsystem og version.
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'Udelukkelse af bestemte kombinationer
Hvad gør du, hvis du har en kombination, som du ved vil mislykkes, eller som ikke er relevant for dit projekt? Med nøgleordet exclude kan du fjerne bestemte konfigurationer fra din matrix.
Det hjælper dig med at undgå unødvendige jobkørsler og fokusere på relevante testtilfælde.
jobs:
build:
runs-on: ${{ matrix.os }}
strategy:
matrix:
os: [ubuntu-latest, windows-latest]
node-version: [16, 18, 20]
exclude:
- os: windows-latest
node-version: 16Adgang til matrix-variabler
I dine jobtrin kan du få adgang til de aktuelle værdier for matrix-variablerne ved hjælp af syntaksen ${{ matrix.variable_name }}. Det er afgørende, når du skal konfigurere værktøjer eller køre kommandoer, der er specifikke for hver matrixkombination.
For eksempel indstiller ${{ matrix.os }} dynamisk kørselsmiljøets operativsystem, mens ${{ matrix.node-version }} konfigurerer opsætningshandlingen til Node.js.
Praktiske anvendelser
Matrix-builds er effektive til:
- Biblioteksudvikling: Test med flere versioner af en afhængighed.
- Projekter med flere sprog: Bygning og test af komponenter, der er skrevet i forskellige sprog eller bruger forskellige kompilatorer.
- Browserkompatibilitet: Test af webapps i forskellige browsere, hvis du bruger et værktøj, der understøtter det.
De forenkler komplekse testscenarier til korte, vedligeholdelsesvenlige workflows.
Udfordring: Matrix-build
Overvej et GitHub Actions-workflow, der bruger en matrixstrategi. Matrixen er defineret sådan:
strategy:
matrix:
os: [ubuntu-latest, macos-latest]
python-version: [3.8, 3.9]
exclude:
- os: macos-latest
python-version: 3.8
Hvor mange jobs opretter denne matrixkonfiguration?
Opsummering: Matrix-builds
Godt klaret! Du har lært om matrix-builds i GitHub Actions.
- De giver dig mulighed for at køre jobs for flere kombinationer af variabler (operativsystemer, sprogversioner osv.).
- De defineres ved hjælp af
strategy.matrixi et job. includetilføjer bestemte kombinationer, mensexcludefjerner dem.- Du får adgang til variablerne via
${{ matrix.variable_name }}.
Matrix-builds er afgørende for effektiv og omfattende test på tværs af forskellige miljøer. Bliv ved med at øve dig, så du mestrer dem!
Lær Intensiv DevOps-uddannelse med en AI-underviser — gratis
Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.
- Kurser
- 142
- Lektioner
- 568
Ofte stillede spørgsmål
Er lektionen “Matrix-builds til flere miljøer” gratis?
Ja — alle 3 lektioner i læringssporet Intensiv DevOps-uddannelse, inklusive “Matrix-builds til flere miljøer”, kan læses gratis i deres fulde længde her på webstedet. Derefter låser CoddyKit PRO alle lektioner op samt interaktive øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Intensiv DevOps-uddannelse-kurset indeholder 4 lektioner i alt.
Hvad lærer jeg i “Matrix-builds til flere miljøer”?
Brug matrixstrategier til at køre jobs parallelt på tværs af flere sprogversioner, operativsystemer eller konfigurationer. Du øver dig i Intensiv DevOps-uddannelse med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.
Skal jeg have erfaring for at begynde på Intensiv DevOps-uddannelse?
Der kræves ingen tidligere erfaring. Intensiv DevOps-uddannelse på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 1 af 4.
Hvor lang tid tager lektionen “Matrix-builds til flere miljøer”?
De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.
Kan jeg skrive og køre kode i denne Intensiv DevOps-uddannelse-lektion?
Ja. Alle Intensiv DevOps-uddannelse-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.
Alle lektioner i dette kursus
- Matrix-builds til flere miljøer
- Caching af dependencies for øget hastighed
- Genanvendelige workflows og actions
- Betinget kørsel og jobafhængigheder