Intensiv DevOps-uddannelse · Lektion

CI/CD til monorepos

Udforsk strategier til optimering af CI/CD-pipelines i monorepos, herunder selektiv kørsel af jobs baseret på ændrede filer.

Lektion 1 af 411 trin

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/kon­tinuerlig 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!

Gratis at komme i gang

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

  1. CI/CD til monorepos
  2. Workflows på tværs af repositories
  3. Centraliseret workflowadministration
  4. Stifiltrering og selektive builds
← Tilbage til Intensiv DevOps-uddannelse