CI/CD til monorepos
Udforsk strategier til optimering af CI/CD-pipelines i monorepos, herunder selektiv kørsel af jobs baseret på ændrede filer.
CI/CD til monorepos 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 et monorepo?
Et monorepo er et enkelt kodearkiv, der indeholder koden til mange projekter eller applikationer. I stedet for at have separate kodearkiver til hver tjeneste eller hvert bibliotek ligger alt samlet.
Tænk på det som et stort bibliotek med mange bøger (projekter) i én bygning (kodearkiv) i stedet for en separat bygning til hver bog. Denne tilgang har både fordele og ulemper, især for CI/CD.
CI/CD-udfordringer i monorepoer
Selvom monorepoer giver fordele som lettere deling af kode, kan de skabe udfordringer for kontinuerlig integration/kontinuerlig levering (CI/CD):
- Langsomme builds: Hvis enhver ændring udløser en fuld build og testsuite for *alle* projekter, bliver CI/CD-forløbene meget langsomme.
- Spild af ressourcer: Unødvendig kørsel af uvedkommende job bruger buildminutter og ressourcer.
- Frustration hos udviklere: Lange tilbagemeldingscyklusser kan sænke udviklingstempoet.
Behovet for selektiv CI/CD
Nøglen til effektiv CI/CD i monorepoer er selektivitet. Vi ønsker, at vores CI/CD-forløb er intelligente nok til at:
- Identificere *hvad* der er ændret.
- Kun køre CI/CD-job *for* de projekter, der er påvirket af disse ændringer.
Denne tilgang sparer tid, reducerer ressourceforbruget og giver udviklere hurtigere tilbagemeldinger.
Udløsning via `on.paths`
GitHub Actions giver en effektiv måde at opnå selektivitet på ved hjælp af filteret paths i udløserne for din arbejdsgang. Du kan angive mapper eller filer, hvis ændring skal udløse en arbejdsgang.
Hvis en fil uden for disse stier ændres, kører arbejdsgangen ikke. Det er ideelt til monorepoer!
on:
push:
branches:
- main
paths:
- 'apps/frontend/**'
- 'libs/shared/**'`paths`-filteret i praksis
Her er en enkel arbejdsgang, der kun kører, når der pushes ændringer til filer i mappen apps/backend eller til den specifikke fil README.md.
Det sikrer, at kun relevante test eller builds udløses for din backendtjeneste.
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..."Ignorering af stier: `paths-ignore`
Nogle gange vil du have, at en arbejdsgang kører ved *de fleste* ændringer, men springer den over, hvis kun bestemte filer ændres (f.eks. dokumentation eller logfiler). Filteret paths-ignore er perfekt til dette.
Det fungerer på samme måde som paths, men angiver filer, der *ikke* skal udløse arbejdsgangen.
on:
pull_request:
branches:
- main
paths-ignore:
- 'docs/**'
- '**/*.md'Dynamiske selektive kørsler med `git diff`
Til mere kompleks logik kan du bruge Git-kommandoer som git diff i trinnene i din arbejdsgang for dynamisk at kontrollere ændringer. Det giver dig mulighed for at opbygge tilpassede betingelser.
Du kan for eksempel kontrollere, om der er sket ændringer i en bestemt mappe, og angive en outputvariabel for at afgøre, om et efterfølgende job skal køre.
Eksempel på betinget jobkørsel
Dette trin i arbejdsgangen bruger git diff til at se, om filer under apps/api/ er blevet ændret mellem det aktuelle commit og basisgrenen. Hvis det er tilfældet, angiver det en outputvariabel api_changed til 'true'.
Dette output kan derefter styre, om jobbet 'deploy API' skal køre.
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 til CI/CD
En velorganiseret monorepo-struktur forenkler selektiv CI/CD betydeligt. Når relaterede filer og projekter samles i veldefinerede mapper, bliver det nemt at bruge paths-filtre effektivt.
/apps/frontend/apps/backend/libs/shared/docs
Tydelig adskillelse gør det muligt at målrette arbejdsgange præcist.
Monorepo-quiz
Optimering af CI/CD til monorepoer er afgørende for at bevare udviklingstempoet og bruge ressourcerne effektivt. Overvej, hvilke strategier der bedst håndterer udfordringerne ved en stor, samlet kodebase.
Opsummering og næste trin
Du har lært at håndtere CI/CD-udfordringer i monorepoer ved at implementere selektiv kørsel af job. Ved hjælp af GitHub Actions' paths-filtre og avancerede teknikker med git diff kan du sikre, at dine CI/CD-forløb kun kører det, der er nødvendigt.
Det giver hurtigere tilbagemeldinger, lavere omkostninger og en bedre udviklingsoplevelse. Fortsæt med at udforske, hvordan du kan finjustere dine arbejdsgange for at opnå endnu større effektivitet!
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 “CI/CD til monorepos” gratis?
Ja — alle 3 lektioner i læringssporet Intensiv DevOps-uddannelse, inklusive “CI/CD til monorepos”, 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 “CI/CD til monorepos”?
Udforsk strategier til optimering af CI/CD-pipelines i monorepos, herunder selektiv kørsel af jobs baseret på ændrede filer. 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 “CI/CD til monorepos”?
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
- CI/CD til monorepos
- Workflows på tværs af repositories
- Centraliseret workflowadministration
- Stifiltrering og selektive builds