CI/CD för monorepon
Utforska strategier för att optimera CI/CD-pipelines i monorepon, inklusive selektiv körning av jobb baserat på ändrade filer.
CI/CD för monorepon är en gratis lektion i CI/CD med GitHub Actions och DevOps-pipelines på CoddyKit. Detta är lektion 1 av 4. Ni kan läsa hela lektionen gratis nedan och sedan öva praktiskt i webbläsaren med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt. Den ingår i lärvägen för CI/CD med GitHub Actions och DevOps-pipelines, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i CI/CD med GitHub Actions och DevOps-pipelines innehåller totalt 4 lektioner.
Vad är ett monorepo?
Ett monorepo är ett enda kodförråd som innehåller koden för många projekt eller applikationer. I stället för separata kodförråd för varje tjänst eller bibliotek finns allt samlat på ett ställe.
Tänk på det som ett stort bibliotek med många böcker (projekt) i samma byggnad (kodförråd), i stället för en separat byggnad för varje bok. Detta tillvägagångssätt har både fördelar och nackdelar, särskilt för CI/CD.
CI/CD-utmaningar i monorepon
Även om monorepon ger fördelar som enklare koddelning kan de skapa utmaningar för pipelines för Continuous Integration/Continuous Delivery (CI/CD):
- Långsamma byggen: Om varje ändring utlöser ett fullständigt bygge och en fullständig testsvit för *alla* projekt blir pipelines mycket långsamma.
- Slöseri med resurser: Onödiga körningar av orelaterade jobb förbrukar byggminuter och resurser.
- Frustrerade utvecklare: Långa återkopplingsloopar kan bromsa utvecklingstakten.
Behovet av selektiv CI/CD
Nyckeln till effektiv CI/CD i monorepon är selektivitet. Vi vill att våra pipelines ska vara tillräckligt smarta för att:
- Identifiera *vad* som har ändrats.
- Köra CI/CD-jobb *endast* för de projekt som påverkas av ändringarna.
Detta sparar tid, minskar resursförbrukningen och ger utvecklare snabbare återkoppling.
Utlösning baserat på sökvägar: `on.paths`
GitHub Actions erbjuder ett kraftfullt sätt att uppnå selektivitet genom filtret paths i arbetsflödets utlösare. Ni kan ange kataloger eller filer som ska utlösa ett arbetsflöde när de ändras.
Om en fil utanför dessa sökvägar ändras körs arbetsflödet inte. Det passar perfekt för monorepon!
on:
push:
branches:
- main
paths:
- 'apps/frontend/**'
- 'libs/shared/**'Sökvägsfiltret i praktiken
Här är ett enkelt arbetsflöde som endast körs när ändringar skickas till filer i katalogen apps/backend eller till en specifik fil, README.md.
Det säkerställer att endast relevanta tester eller byggen utlöses för backend-tjänsten.
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..."Ignorera sökvägar: `paths-ignore`
Ibland vill Ni att ett arbetsflöde ska köras för *de flesta* ändringar, men hoppa över det om endast vissa filer ändras, till exempel dokumentation eller loggfiler. Filtret paths-ignore passar perfekt för detta.
Det fungerar på liknande sätt som paths, men anger filer som *inte* ska utlösa arbetsflödet.
on:
pull_request:
branches:
- main
paths-ignore:
- 'docs/**'
- '**/*.md'Dynamiska selektiva körningar med `git diff`
För mer komplex logik kan Ni använda Git-kommandon som git diff i arbetsflödets steg för att dynamiskt kontrollera ändringar. Det gör det möjligt att skapa anpassade villkor.
Ni kan till exempel kontrollera om ändringar har skett i en specifik mapp och ange en utdatavariabel som avgör om ett efterföljande jobb ska köras.
Exempel på villkorad körning av jobb
Detta arbetsflödessteg använder git diff för att se om några filer under apps/api/ har ändrats mellan den aktuella bekräftelsen och basgrenen. Om så är fallet anger det utdatavariabeln api_changed till 'true'.
Denna utdata kan sedan styra om jobbet 'deploy API' ska köras.
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..."Monorepo-struktur för CI/CD
En välorganiserad monorepo-struktur förenklar selektiv CI/CD avsevärt. Genom att gruppera relaterade filer och projekt i väldefinierade kataloger blir det enkelt att använda paths-filter effektivt.
/apps/frontend/apps/backend/libs/shared/docs
En tydlig uppdelning gör det möjligt att rikta arbetsflöden exakt.
Frågesport om monorepo-CI/CD
Det är viktigt att optimera CI/CD för monorepon för att upprätthålla utvecklingstakten och använda resurser effektivt. Fundera på vilka strategier som bäst hanterar utmaningarna med en stor, samlad kodbas.
Sammanfattning och nästa steg
Ni har lärt Er att hantera CI/CD-utmaningar i monorepon genom att implementera selektiv körning av jobb. Med GitHub Actions paths-filter och avancerade git diff-tekniker kan Ni säkerställa att Era pipelines endast kör det som behövs.
Det leder till snabbare återkoppling, lägre kostnader och en smidigare utvecklingsupplevelse. Fortsätt utforska hur Ni kan finjustera Era arbetsflöden för ännu högre effektivitet!
Lär dig CI/CD med GitHub Actions och DevOps-pipelines med en AI-lärare – gratis
Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.
- Kurser
- 12
- Lektioner
- 48
Vanliga frågor
Är lektionen ”CI/CD för monorepon” gratis?
Ja – hela texten till ”CI/CD för monorepon” kan läsas gratis här på webben. Om Ni vill öva interaktivt med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt och låsa upp resten av kursen i CI/CD med GitHub Actions och DevOps-pipelines, kan Ni uppgradera till CoddyKit PRO. Kursen i CI/CD med GitHub Actions och DevOps-pipelines innehåller totalt 4 lektioner.
Vad lär jag mig i ”CI/CD för monorepon”?
Utforska strategier för att optimera CI/CD-pipelines i monorepon, inklusive selektiv körning av jobb baserat på ändrade filer. Ni övar på CI/CD med GitHub Actions och DevOps-pipelines med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.
Behöver jag någon erfarenhet för att börja lära mig CI/CD med GitHub Actions och DevOps-pipelines?
Du behöver inga förkunskaper. Utbildningen i CI/CD med GitHub Actions och DevOps-pipelines på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 1 av 4.
Hur lång tid tar lektionen ”CI/CD för monorepon”?
De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.
Kan jag skriva och köra kod i den här CI/CD med GitHub Actions och DevOps-pipelines-lektionen?
Ja. Varje CI/CD med GitHub Actions och DevOps-pipelines-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.
Alla lektioner i den här kursen
- CI/CD för monorepon
- Arbetsflöden mellan repositoryn
- Centraliserad arbetsflödeshantering
- Sökvägsfiltrering och selektiva byggen