Behandle og feilsøke arbeidsflyter i GitHub-handlinger
Husk at målet ditt er å automatisere kodebygg- og publiseringsprosessen slik at funksjonene oppdateres hver gang en utvikler legger til en endring i kodebasen.
Hvis du vil implementere denne prosessen, lærer du hvordan du:
- Identifiser hendelsen som utløste en arbeidsflyt.
- Bruk arbeidsflytlogger for GitHub-handlinger.
- Lagre og få tilgang til byggartefakter.
- Automatiser å legge til en etikett i en pull-forespørsel etter en gjennomgang.
Identifisere hendelsen som utløste en arbeidsflyt
Å forstå hva som utløste en Arbeidsflyt for GitHub-handlinger er avgjørende for feilsøking, overvåking og forbedring av CI/CD-datasamlebånd. Type utløsere inkluderer en push til en gren, en pull-forespørsel opprettet eller oppdatert, en planlagt jobb eller en manuell utsendelse. Du kan identifisere utløserhendelsen ved å undersøke arbeidsflytkjøringen, repositoriet endres og det relaterte GitHub-problemet eller pull-forespørselen.
Hva er en arbeidsflytutløser?
En arbeidsflytutløser er en hendelse som fører til at en arbeidsflyt kjøres. GitHub støtter ulike typer utløsere, inkludert:
-
pushellerpull_request(basert på kodeendringer) -
workflow_dispatch(en manuell utløser) -
schedule(cron-jobber) -
repository_dispatch(eksterne systemer) - Problem-, diskusjons- og pull-forespørselshendelser (for eksempel ,
issues.openedpull_request.closed)
Identifiser utløserhendelsen
Du kan identifisere en arbeidsflytutløserhendelse på flere måter:
Bruk brukergrensesnittet for GitHub-handlinger:
- Velg Handlinger-fanen i repositoriet.
- Velg en arbeidsflytkjøring.
En hendelsestype, for eksempel
push,pull_requestellerworkflow_dispatch, vises øverst i sammendraget for arbeidsflytkjøring.Bruk
github.event_namei loggene eller i en arbeidsflyt.GitHub viser kontekstdata under en arbeidsflytkjøring. Variabelen
github.event_nameforteller deg hvilken hendelse som utløste arbeidsflyten.Du kan skrive ut informasjonen i et trinn for feilsøking:
-name: Show event trigger run: echo "Triggered by ${{ github.event_name }}"
Bruk kjøredetaljer for arbeidsflyt:
- Hvis du inspiserer arbeidsflytkjøringer programmatisk, for eksempel ved hjelp av API, inneholder kjøreobjektet en
eventegenskap som angir utløseren. - Du kan finne aktivering av sikker hash-algoritme (SHA), aktør og tidsstempel for å spore hva som forårsaket utløseren.
- Hvis du inspiserer arbeidsflytkjøringer programmatisk, for eksempel ved hjelp av API, inneholder kjøreobjektet en
Utled utløseren fra repositoriumeffekter
Du har kanskje ikke direkte tilgang til arbeidsflytkjøringen, men du vil fortsatt utlede hva som utløste arbeidsflytkjøringen basert på repositoriumaktivitet:
| Observert virkemåte | Utløserhendelse |
|---|---|
En ny utføring ble sendt til main , og arbeidsflyten ble kjørt. |
push begivenhet |
| En pull-forespørsel ble åpnet eller oppdatert. |
pull_request begivenhet |
| En bidragsyter kjørte en arbeidsflyt manuelt. | workflow_dispatch |
| Arbeidsflyten kjører daglig på et bestemt tidspunkt. |
schedule (cron) |
| Arbeidsflyten kjørte etter et eksternt tjenesteanrop. | repository_dispatch |
| Arbeidsflyten kjørte da en etikett eller kommentar ble lagt til i et problem. |
issues.* begivenhet |
Ved å se gjennom tidsstempler, pull-forespørselsaktivitet og utføringslogg, kan du ofte finne ut hvilken handling som forårsaket at arbeidsflyten ble kjørt.
Slik oppsummerer du hvordan du identifiserer hva som utløste en arbeidsflyt:
- Kontroller sammendraget for arbeidsflytkjøring på Handlinger-fanen .
- Skriv ut eller logg i
github.event_namearbeidsflyten for synlighet. - Sammenlign tidsstempler og repositoriumaktivitet (utfører, pull-forespørsler, problemer) for å utlede utløseren.
- Bruk hele
eventkonteksten for dypere undersøkelser.
Disse fremgangsmåtene hjelper deg med å feilsøke, overvåke og forbedre arbeidsflytpålitelighet på tvers av utviklings- og distribusjonssamlebånd.
Forstå en arbeidsflyteffekt ved å lese konfigurasjonsfilen
Hvis du vil forstå effektene av en arbeidsflyt fra å lese konfigurasjonsfilen, analyserer du strukturen og innholdet i .yml filen som er lagret i .github/workflows/.
Arbeidsflytkonfigurasjonsfilen angir følgende informasjon om arbeidsflyten:
- Når den kjøres (i inndelingen
on). - Hva den gjør (i
jobsogsteps). - Hvor den kjører (inndelingen
runs-on). - Hvorfor kjører den (for eksempel testing, distribusjon eller lo).
- Hvordan den fungerer under bestemte betingelser (miljø, filtre, logikk).
Tolke en arbeidsflyteffekt
Identifiser utløseren.
Hvis du vil identifisere hvilken handling som startet arbeidsflyten, kan du se
ondelen av arbeidsflyten.For eksempel:
on: push: branches: [main] pull_request: types: [opened, synchronize] workflow_dispatch:Dette eksempelarbeidsflyten:
- Kjører automatisk når koden sendes til hovedgrenen (
push). - Kjører når en pull-forespørsel opprettes eller oppdateres (
pull_request). - Kan utløses manuelt av en bruker (
workflow_dispatch).
- Kjører automatisk når koden sendes til hovedgrenen (
Identifiser arbeidsflytjobbene og trinnene.
Hvis du vil finne ut hva arbeidsflyten gjør, kan du se
jobsogstepsdeler av arbeidsflyten.For eksempel:
jobs: test: runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@v3 - name: Install dependencies run: npm install - name: Run tests run: npm testDette eksempelarbeidsflyten:
- Bruker et virtuelt Linux-miljø (
runs-on). - Sjekker ut repositoriets kode (
steps>name). - Installerer prosjektavhengigheter (
steps>name). - Kjører automatiserte tester (
steps>name).
- Bruker et virtuelt Linux-miljø (
Evaluer arbeidsflytens formål og resultat.
Ved å lese konfigurasjonsfilen kan du beskrive det tiltenkte resultatet av arbeidsflyten:
"Denne arbeidsflyten er et kontinuerlig integreringssamlebånd (CI). Den sikrer at enhver ny kode som sendes til repositoriet eller sendes via pull-forespørselen, testes automatisk. Hvis testene mislykkes, viser Brukergrensesnittet for GitHub-arbeidsflyt dette resultatet for å hjelpe deg med å opprettholde kodekvaliteten.»
Identifiser eller angi valgfrie funksjoner som påvirker hvordan arbeidsflyten kjører:
-
envangir miljøvariabler. -
iflegger til betinget logikk for å kjøre bestemte trinn bare når vilkår oppfylles. -
timeout-minutesellercontinue-on-errorangi kjøring av arbeidsflyt og feilbehandling.
-
Diagnostisere en mislykket arbeidsflytkjøring
Gå til Handlinger-fanen i repositoriet.
Finn den mislykkede kjøringen (vanligvis angitt av en rød X).
Velg arbeidsflyten som ikke mislyktes, for å åpne kjøresammendraget.
Se gjennom feilen i arbeidsflytloggene.
Utvid hver jobb og trinn i kjøresammendraget til du finner den som angir feil.
Velg jobben eller trinnet for å vise loggene.
Se etter:
- Feilmeldinger
- Stakksporinger
- Avslutte koder
En mislykket test kan for eksempel vises
npm ERR! Test failedellerexit code 1.Kontroller konfigurasjonsfilen for arbeidsflyten.
.ymlBruk filen til å fastslå:- Hva prøvde hvert trinn å gjøre?
- Hvis det finnes miljøvariabler (
env) eller betingede (if) som påvirker kjøringen. - Hvis feilen skyldes manglende avhengighet, syntaksfeil eller feilkonfigurert trinn.
Hvis et trinn mislykkes, kan du se etter følgende årsaker:
- Ble avhengigheter installert i forrige trinn?
- Finnes testfiler og sendes lokalt?
Vanlige feilscenarioer
Tabellen nedenfor beskriver vanlige scenarioer for arbeidsflytfeil:
| Symptom | Sannsynlig årsak |
|---|---|
Et trinn mislykkes og returnerer command not foundl |
Manglende avhengighet eller feil oppsett |
npm install Mislykkes. |
Skadet package-lock.json fil eller et nettverksproblem |
| Et testtrinn mislykkes | Problemer med enhetstest, manglende konfigurasjonsfil eller ugyldig testsyntaks |
Permission denied Vises. |
Feil filtillatelser eller manglende hemmeligheter |
Identifisere hvordan du får tilgang til arbeidsflytlogger i GitHub
Gå til Handlinger-fanen i repositoriet.
Velg den relevante arbeidsflyten i listen over arbeidsflyter.
Hvis filen for eksempel
.ymlhar følgende kode, vises en kobling med tittelen CI Workflow i listen:name: CI WorkflowVelg en bestemt kjøring.
Velg tidsstempelet eller utføringsmeldingen for den bestemte kjøringen du vil undersøke, i listen over kjøringer som viser status.
Utvid hver jobb og hvert trinn.
Kjør sammendragssiden viser jobber slik de er definert i arbeidsflytfilen, for eksempel bygg eller test:
- Velg en jobb for å utvide den.
- Utvid individuelle trinn i jobben, for eksempel «Installer avhengigheter» eller «Kjør tester».
Vis loggutdata.
Hvis du vil vise fullstendige loggutdata, inkludert konsolllogger, feilmeldinger og feilsøkingsinformasjon, velger du et arbeidsflyttrinn. Du kan kopiere, søke etter og laste ned loggene.
Tabellen nedenfor oppsummerer trinnene du utfører for å få tilgang til arbeidsflytlogger:
| Handling | Hensikt |
|---|---|
| Handlinger-fanen | Vis alle arbeidsflytkjøringer. |
| Velg arbeidsflytnavnet | Filtrering kjøres etter arbeidsflyt. |
| Velg en kjøring | Se bestemte jobb- og trinnresultater. |
| Utvid trinn | Vis detaljerte logger. |
| Last ned logger | Last ned logger for feilsøking i frakoblet modus eller team. |
Handlingslogger for bygget
Når en arbeidsflyt kjøres, produserer den en logg som inneholder detaljer om hva som skjedde og eventuelle feil eller testfeil.
Hvis det oppstår en feil, eller hvis en test mislykkes, vises en rød X i stedet for en grønn hake i loggene. Du kan undersøke detaljene for feilen eller unnlatelsen av å undersøke hva som skjedde.
Arbeide med artefakter
Når en arbeidsflyt produserer noe annet enn en loggoppføring, kalles produktet en artefakt. For eksempel produserer Node.js bygg en Docker-beholder som kan distribueres. Beholderen er en artefakt som du kan laste opp til lagring ved hjelp av handlingen handlinger/opplastingsartefakt . Du kan senere laste ned artefakten fra lagring ved hjelp av handlinger/nedlastingsartefakt.
Lagring av en artefakt bevarer den mellom jobber. Hver jobb bruker en ny forekomst av en vm, slik at du ikke kan bruke artefakten på nytt ved å lagre den på VM-en. Hvis du trenger artefakten i en annen jobb, kan du laste opp artefakten til lagring i én jobb og laste den ned for den andre jobben.
Artefaktlagring
Artefakter lagres i lagringsplass på GitHub. Plassen er gratis for offentlige repositorier, og noe lagringsplass er gratis for private repositorier, avhengig av kontoen. GitHub lagrer artefaktene i 90 dager.
Legg merke til at i handlingen actions/upload-artifact@main finnes det et path attributt i følgende arbeidsflytsnutt. Verdien for dette attributtet er banen til å lagre artefakten. I dette eksemplet angir du offentlig/ for å laste opp alt til en katalog. Hvis du bare vil laste opp én enkelt fil, kan du bruke noe som offentlig/mytext.txt.
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: npm install and build webpack
run: |
npm install
npm run build
- uses: actions/upload-artifact@main
with:
name: webpack artifacts
path: public/
Hvis du vil laste ned artefakten for testing, må bygget fullføres og laste opp artefakten. I følgende kode angir du at testjobben avhenger av byggjobben.
test:
needs: build
runs-on: ubuntu-latest
I følgende arbeidsflytsnutt laster du ned artefakten. Nå kan testjobben bruke artefakten til testing.
steps:
- uses: actions/checkout@v3
- uses: actions/download-artifact@main
with:
name: webpack artifacts
path: public
Hvis du vil ha mer informasjon om hvordan du bruker artefakter i arbeidsflyter, kan du se Lagre arbeidsflytdata som artefakter.
Automatiser anmeldelser i GitHub ved hjelp av arbeidsflyter
I tillegg til å starte en arbeidsflyt via GitHub-hendelser som push og pull-request, kan du kjøre en arbeidsflyt etter en tidsplan eller etter en hendelse utenfor GitHub.
Du vil kanskje at en arbeidsflyt bare skal kjøre etter at en bruker har fullført en bestemt handling, for eksempel etter at en kontrollør godkjenner en pull-forespørsel. I dette scenarioet kan du utløse på pull-request-review.
En annen handling du kan utføre, er å legge til en etikett i pull-forespørselen. I dette tilfellet bruker du handlingen pullreminders/label-when-approved-action.
For eksempel:
steps:
- name: Label when approved
uses: pullreminders/label-when-approved-action@main
env:
APPROVALS: "1"
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
ADD_LABEL: "approved"
env I blokken angir du miljøvariablene for handlingen. Du kan for eksempel angi antall godkjennere som kreves for å kjøre arbeidsflyten. I dette eksemplet er det ett. Godkjenningsvariabelen for secrets.GITHUB_TOKEN kreves fordi handlingen må gjøre endringer i repositoriet ved å legge til en etikett. Til slutt skriver du inn navnet på etiketten du vil legge til.
Å legge til en etikett kan være en hendelse som starter en annen arbeidsflyt, for eksempel en fletting. Vi dekker denne hendelsen i neste modul, som beskriver bruk av kontinuerlig levering i GitHub-handlinger.