DevOps-bootcamp · leksjon

Arbeidsflyter på tvers av repositorier

Lær å kjede sammen arbeidsflyter på tvers av ulike repositorier for å håndtere avhengigheter og orkestrere komplekse distribusjoner.

Leksjon 2 av 411 trinn

Arbeidsflyter på tvers av repositorier er en gratis leksjon i DevOps-bootcamp på CoddyKit. Dette er leksjon 2 av 4. Du kan lese valgfritt 3 leksjoner fra denne læringsstien gratis i sin helhet – deretter låser CoddyKit PRO opp alle leksjoner, samt praktisk øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i DevOps-bootcamp, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i DevOps-bootcamp inneholder totalt 4 leksjoner.

Introduksjon til arbeidsflyter på tvers av repositories

I moderne programvareutvikling består applikasjoner ofte av flere komponenter som er fordelt på ulike repositories. Det kan være mikrotjenester, delte biblioteker eller separate konfigurasjoner for distribusjon.

Orkestrering av arbeidsflyter på tvers av disse separate repositoryene gir større modularitet og tydeligere ansvarsdeling. Denne leksjonen utforsker hvordan dette kan oppnås med GitHub Actions.

Hvorfor orkestrering på tvers av repositories?

Tradisjonelt er GitHub Actions-arbeidsflyter avgrenset til ett enkelt repository. Men hva om De trenger å:

  • Bygge et artefakt i ett repository og utløse en distribusjon i et annet?
  • La et repository med en delt konfigurasjon utløse oppdateringer i flere tjenesterepositories?
  • Håndheve sikkerhetspolicyer som administreres i et sentralt repository, på tvers av alle de andre?

Arbeidsflyter på tvers av repositories løser disse komplekse scenariene.

Koble sammen repositories: `repository_dispatch`

GitHub Actions tilbyr en spesiell hendelsestype kalt repository_dispatch. Den fungerer som en egendefinert webhook for GitHub-repositoryene Deres.

  • Én arbeidsflyt ('senderen') sender en API-forespørsel til GitHub.
  • En annen arbeidsflyt ('mottakeren') i et annet repository lytter etter denne bestemte hendelsen.

Dette gjør det mulig å utløse arbeidsflyter programmatisk på tvers av ulike repositories.

Konfigurere mottakerarbeidsflyten

For å motta en repository_dispatch-hendelse må en arbeidsflyt i målrepositoryet konfigureres til å lytte etter den. Dette gjøres ved hjelp av nøkkelordet on:.

Slik kan en arbeidsflyt i repo-B se ut:

name: Receive Dispatch Event

on:
  repository_dispatch:
    types: [my-custom-event]

jobs:
  process-event:
    runs-on: ubuntu-latest
    steps:
      - name: Log event payload
        run: |
          echo "Event type: ${{ github.event.action }}"
          echo "Payload: ${{ toJSON(github.event.client_payload) }}"

Forstå mottakerkonfigurasjonen

I eksempelet ovenfor:

  • on: repository_dispatch: ber GitHub om å lytte etter denne hendelsen.
  • types: [my-custom-event] angir at denne arbeidsflyten bare skal kjøre hvis den utsendte hendelsen har typen my-custom-event. De kan definere flere typer.
  • github.event.action inneholder hendelsestypen (f.eks. my-custom-event).
  • github.event.client_payload inneholder eventuelle egendefinerte data som ble sendt med dispatch-hendelsen.

Utløsing av hendelsen: Sending fra et annet repo

For å utløse en repository_dispatch-hendelse må De sende en HTTP POST-forespørsel til GitHub API. Dette kan gjøres med curl eller GitHub CLI (gh cli) fra en annen GitHub Actions-arbeidsflyt eller et skript.

Viktige krav:

  • Eieren av målrepoet og navnet på repoet.
  • En hendelse av typen type som mottakerarbeidsflyten lytter etter.
  • En client_payload for eventuelle egendefinerte data.
  • Et personlig GitHub-tilgangstoken (PAT) med repo-omfang.

Eksempel: Utsending med `gh cli`

Her er en arbeidsflyt i repo-A som sender en hendelse til repo-B. Legg merke til hvordan vi bruker en hemmelighet for tokenet og sender med en client_payload.

name: Trigger Deploy Workflow

on:
  push:
    branches: [main]

jobs:
  dispatch:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout code
        uses: actions/checkout@v4

      - name: Install GitHub CLI
        run: sudo apt-get update && sudo apt-get install gh -y

      - name: Dispatch event to repo-B
        env:
          GH_TOKEN: ${{ secrets.CROSS_REPO_PAT }}
        run: |
          gh api \
            --method POST \
            -H "Accept: application/vnd.github.v3+json" \
            /repos/YOUR_ORG/repo-B/dispatches \
            -f event_type='my-custom-event' \
            -f client_payload='{"ref":"${{ github.ref }}", "sha":"${{ github.sha }}"}'

Sikring av tilgang på tvers av repoer

Standard-GITHUB_TOKEN som tilbys til en arbeidsflyt, er begrenset til repoet der arbeidsflyten kjører. For å utløse hendelser i et *annet* repo trenger De et token med bredere tillatelser.

  • Bruk et personlig tilgangstoken (PAT) med repo-omfang.
  • Lagre dette PAT-et som en repo-hemmelighet (for eksempel CROSS_REPO_PAT) i det utløsende repoet.
  • Legg aldri PAT-er direkte inn i arbeidsflytfilene.

Sende egendefinerte data med `client_payload`

client_payload er et JSON-objekt som De kan inkludere når De sender en hendelse. Dette er avgjørende for å sende kontekst eller data fra den utløsende arbeidsflyten til mottakerarbeidsflyten.

Eksempler på data De kan sende:

  • Commit-SHA-en eller grennavnet som utløste bygget.
  • Et miljømål (for eksempel "staging", "production").
  • Et versjonsnummer for et artefakt som skal distribueres.

Husk: client_payload er synlig i arbeidsflytloggene, så unngå sensitiv informasjon.

Kort kontroll av arbeidsflyter på tvers av repoer

De har lært hvordan De kan orkestrere arbeidsflyter på tvers av ulike GitHub-repoer. La oss teste forståelsen Deres av de viktigste komponentene.

Oppsummering: Orkestrering på tvers av repoer

De har nå lært hvordan De implementerer arbeidsflyter på tvers av repoer ved hjelp av repository_dispatch!

  • Hvorfor: For å håndtere avhengigheter og orkestrere komplekse distribusjoner på tvers av flere repoer.
  • Hvordan: En «sender»-arbeidsflyt foretar et API-kall til GitHub, som utløser en «mottaker»-arbeidsflyt i et annet repo.
  • Viktig: Hendelsestypen repository_dispatch og samsvarende types i mottakerarbeidsflyten.
  • Data: Bruk client_payload til å sende ikke-sensitiv informasjon mellom arbeidsflyter.
  • Sikkerhet: Bruk alltid et PAT med repo-omfang, lagret som en hemmelighet, for tilgang på tvers av repoer.

Denne kraftige funksjonen muliggjør svært fleksible og løst koblede CI/CD-pipelines.

Gratis å komme i gang

Lær deg DevOps-bootcamp 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
142
Leksjoner
568

Ofte stilte spørsmål

Er leksjonen «Arbeidsflyter på tvers av repositorier» gratis?

Ja – du kan lese valgfritt 3 av leksjonene i læringsstien DevOps-bootcamp, inkludert «Arbeidsflyter på tvers av repositorier», gratis i sin helhet her på nettet. Deretter låser CoddyKit PRO opp alle leksjoner, samt interaktiv øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Kurset i DevOps-bootcamp inneholder totalt 4 leksjoner.

Hva lærer jeg i «Arbeidsflyter på tvers av repositorier»?

Lær å kjede sammen arbeidsflyter på tvers av ulike repositorier for å håndtere avhengigheter og orkestrere komplekse distribusjoner. Du øver på DevOps-bootcamp 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 DevOps-bootcamp?

Ingen tidligere erfaring er nødvendig. DevOps-bootcamp 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 2 av 4.

Hvor lang tid tar leksjonen «Arbeidsflyter på tvers av repositorier»?

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 DevOps-bootcamp-leksjonen?

Ja. Alle DevOps-bootcamp-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 DevOps-bootcamp