Arbeidsflyter på tvers av repositorier
Lær å kjede sammen arbeidsflyter på tvers av ulike repositorier for å håndtere avhengigheter og orkestrere komplekse distribusjoner.
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 typenmy-custom-event. De kan definere flere typer.github.event.actioninneholder hendelsestypen (f.eks.my-custom-event).github.event.client_payloadinneholder 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
typesom mottakerarbeidsflyten lytter etter. - En
client_payloadfor 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_dispatchog samsvarendetypesi mottakerarbeidsflyten. - Data: Bruk
client_payloadtil å 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.
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
- CI/CD for monorepoer
- Arbeidsflyter på tvers av repositorier
- Sentralisert arbeidsflytstyring
- Filtrering etter sti og selektive bygg