CI/CD med GitHub Actions og DevOps-pipelines · leksjon

Filtrering etter sti og selektive bygg

Utløs bare arbeidsflytene og jobbene som påvirkes av en endring, ved hjelp av stilfiltre, endringsdeteksjon og betingede matriser i monorepoer og oppsett med flere repoer.

Leksjon 4 av 413 trinn

Filtrering etter sti og selektive bygg er en gratis leksjon i CI/CD med GitHub Actions og DevOps-pipelines på CoddyKit. Dette er leksjon 4 av 4. Du kan lese hele leksjonen gratis nedenfor – og deretter øve praktisk i nettleseren med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i CI/CD med GitHub Actions og DevOps-pipelines, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i CI/CD med GitHub Actions og DevOps-pipelines inneholder totalt 4 leksjoner.

Problemet med bortkastede bygg

I et monorepo bør en endring i dokumentasjonen ikke bygge og rulle ut backend, frontend og mobilappen på nytt.

Selektive bygg kjører bare delene av pipelinen som påvirkes av en endring, og sparer dermed tid og runner-minutter.

Stifiltre på triggere

Den enkleste tilnærmingen er filteret paths på triggeren. En workflow kjører bare når filer som samsvarer med mønsteret, endres.

on:
  push:
    paths:
      - 'services/api/**'

Ignorere stier

De kan også gjøre det motsatte med paths-ignore: kjør workflowen for alt unntatt de oppførte stiene.

Dette er nyttig for å hoppe over CI ved endringer som bare gjelder dokumentasjon.

on:
  push:
    paths-ignore:
      - 'docs/**'
      - '**.md'

Begrensninger ved triggerfiltre

Filtre på trigger-nivå avgjør om hele workflowen kjører. I et monorepo ønsker De imidlertid ofte én workflow som avgjør hvilke jobber som skal kjøre.

Da oppdager De endringer inne i workflowen og forgrener basert på resultatet.

Handling for endringsdeteksjon

Handlingen dorny/paths-filter undersøker diff-en og sender ut boolske verdier for hver navngitte gruppe med stier.

Senere jobber leser disse resultatene for å avgjøre om de skal kjøre.

  - uses: dorny/paths-filter@v3
    id: changes
    with:
      filters: |
        api:
          - 'services/api/**'
        web:
          - 'services/web/**'

Betinge jobber av oppdagede endringer

En deteksjonsjobb eksponerer resultater; nedstrømsjobber bruker if sammen med needs-konteksten for å kjøre betinget.

  build-api:
    needs: detect
    if: needs.detect.outputs.api == 'true'
    runs-on: ubuntu-latest
    steps:
      - run: ./build-api.sh

Koble sammen resultatene

Deteksjonsjobben må deklarere outputs som viderefører filterresultatene, slik at andre jobber kan lese dem.

  detect:
    runs-on: ubuntu-latest
    outputs:
      api: ${{ steps.changes.outputs.api }}
      web: ${{ steps.changes.outputs.web }}

Dynamiske matriser

For mange tjenester kan De bygge en matrise dynamisk basert på de endrede stiene, slik at bare endrede tjenester tas med i matrisen.

Generer en JSON-liste i én jobb og mat den inn i matrisen til den neste.

    strategy:
      matrix:
        service: ${{ fromJSON(needs.detect.outputs.list) }}

Git Diff for deteksjon

De kan også oppdage endringer med rå git. Sammenlign den gjeldende commiten med basen for å liste opp endrede kataloger.

git diff --name-only origin/main...HEAD | cut -d/ -f1-2 | sort -u

Påkrevde kontroller og hopp over kjøring

Vær oppmerksom på at hvis en påkrevd statuskontroll hoppes over fordi ingenting er endret, kan branch protection blokkere mergingen mens den venter på kontrollen.

Løsningen er å legge til en avsluttende gate-jobb som alltid lykkes, og som er den eneste påkrevde kontrollen. Den oppsummerer de betingede jobbene.

  gate:
    needs: [build-api, build-web]
    if: always()
    runs-on: ubuntu-latest
    steps:
      - run: echo 'all required jobs resolved'

Bufring per pakke

Selektive bygg passer godt sammen med cacher per pakke. Lag cache-nøkkelen basert på lock-filen til hver tjeneste, slik at urelaterte endringer ikke gjør den ugyldig.

Sammen holder de monorepo-pipelines raske selv når repositoriet vokser.

Kort kontroll

Test forståelsen Deres av selektive bygg.

Oppsummering

De har lært å bygge bare det som er endret.

  • paths og paths-ignore styrer om hele workflower kjører
  • Handlinger for endringsdeteksjon sender ut boolske verdier per sti
  • Jobber bruker if + needs for å kjøre betinget, og matriser kan bygges dynamisk
  • Legg til en always()-gate-jobb for kompatibilitet med påkrevde kontroller

Selektive bygg holder CI/CD i monorepoer rask og kostnadseffektiv.

Gratis å komme i gang

Lær deg CI/CD med GitHub Actions og DevOps-pipelines med en AI-veileder – gratis

Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.

Kurs
12
Leksjoner
48

Ofte stilte spørsmål

Er leksjonen «Filtrering etter sti og selektive bygg» gratis?

Ja – hele teksten i «Filtrering etter sti og selektive bygg» er gratis å lese her på nettet. For å øve interaktivt med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt, og for å låse opp resten av CI/CD med GitHub Actions og DevOps-pipelines-kurset, kan du oppgradere til CoddyKit PRO. Kurset i CI/CD med GitHub Actions og DevOps-pipelines inneholder totalt 4 leksjoner.

Hva lærer jeg i «Filtrering etter sti og selektive bygg»?

Utløs bare arbeidsflytene og jobbene som påvirkes av en endring, ved hjelp av stilfiltre, endringsdeteksjon og betingede matriser i monorepoer og oppsett med flere repoer. Du øver på CI/CD med GitHub Actions og DevOps-pipelines med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.

Trenger jeg erfaring for å begynne med CI/CD med GitHub Actions og DevOps-pipelines?

Ingen tidligere erfaring er nødvendig. CI/CD med GitHub Actions og DevOps-pipelines på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 4 av 4.

Hvor lang tid tar leksjonen «Filtrering etter sti og selektive bygg»?

De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.

Kan jeg skrive og kjøre kode i denne CI/CD med GitHub Actions og DevOps-pipelines-leksjonen?

Ja. Alle CI/CD med GitHub Actions og DevOps-pipelines-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.

Alle leksjonene i dette kurset

  1. CI/CD for monorepoer
  2. Arbeidsflyter på tvers av repositorier
  3. Sentralisert arbeidsflytstyring
  4. Filtrering etter sti og selektive bygg
← Tilbake til CI/CD med GitHub Actions og DevOps-pipelines