GitHub-integration
Forbind din selvhostede Status200 med GitHub via en GitHub App, du selv ejer. Når appen er installeret fra Status200, importeres installationens repositories til dit projekt og holdes synkroniseret, AI-rettelsesopgaver åbner pull requests, og dit team kan give appen opgaver fra GitHub ved at nævne den.
Denne side er til den, der driver Status200-serveren: Du opretter appen én gang, og derefter forbinder hvert projekt den fra Kode.
Sådan fungerer det
Installationen starter i Status200, ikke på GitHub: Det link, Status200 sender dig til GitHub med, er det, der knytter installationen til dit projekt.
Forbind en installation af GitHub-appen med et projekt
- Omdirigeringen i browseren bærer installationen og en OAuth-engangskode. Status200 bytter koden for at bekræfte, at den GitHub-konto, der installerede appen, administrerer installationen, og importerer derefter dens repositories. En installation, der allerede findes, forbindes i stedet ved at logge ind på GitHub: koden fortæller så Status200, hvilke installationer kontoen administrerer.
- Webhooks holder listen over repositories synkroniseret og giver appen opgaver: omtaler, tildelinger, trigger-labels og anmodninger om review. GitHub signerer hver enkelt med webhook-secret, og Status200 afviser dem, den ikke kan verificere.
Før du begynder
- En GitHub-konto, der kan oprette GitHub Apps for den organisation eller bruger, appen skal installeres på. For at installere den i en organisation skal du være ejer af den eller få en ejer til at godkende anmodningen.
- Et offentligt HTTPS-værtsnavn til Status200, som GitHub kan nå for webhooks. Se Netværksadgang.
- Adgang til serverens konfiguration:
config.envtil Docker Compose eller dine Helm-values til Kubernetes.
Opret GitHub-appen
Åbn indstillingerne for GitHub Apps
- For en organisation:
https://github.com/organizations/YOUR_ORG/settings/apps - For en personlig konto:
https://github.com/settings/apps
Vælg New GitHub App.
- For en organisation:
Udfyld registreringsformularen
Felt Værdi GitHub App name Et vilkårligt unikt navn, for eksempel Status200. Notér det præcist: Det erGITHUB_APP_NAME.Homepage URL https://your-oneuptime-domain.comCallback URL https://your-oneuptime-domain.com/api/github/auth/callbackRequest user authorization (OAuth) during installation Til. Det er påkrævet: Se bemærkningen nedenfor. Setup URL https://your-oneuptime-domain.com/api/github/auth/callback, hvis GitHub lader dig angive en (se nedenfor).Redirect on update Valgfri. Når nogen har ændret en installation på GitHub, sender Status200 dem til Kode. Webhook URL https://your-oneuptime-domain.com/api/github/webhook, med webhooken sat til Active.Webhook secret En lang tilfældig streng. Notér den: Den er GITHUB_APP_WEBHOOK_SECRET. Påkrævet: Status200 afviser usignerede webhooks, så hvisGITHUB_APP_WEBHOOK_SECRETikke er sat, stopper synkroniseringen af repositories i stedet for at acceptere uverificerede payloads.Ifølge GitHubs dokumentation kan du med Request user authorization (OAuth) during installation slået til ikke angive en Setup URL: Brugere sendes i stedet til Callback URL, efter at de har installeret appen. Begge peger på samme Status200-adresse, så omdirigeringen lander det rigtige sted under alle omstændigheder.
VigtigtHvorfor "Request user authorization (OAuth) during installation" er påkrævet. Efter en installation omdirigerer GitHub tilbage med etinstallation_idi URL'en. Det tal alene beviser intet om, hvem der ejer installationen — enhver kan skrive et andet. Med denne indstilling slået til returnerer GitHub også en OAuth-codetil engangsbrug, knyttet til den GitHub-konto, der udførte installationen, som Status200 bytter for at bekræfte, at kontoen virkelig administrerer installationen, før den forbindes med dit projekt.Uden den nægter Status200 at forbinde installationen, og dashboardet viser en fejl, der beder dig slå indstillingen til. Det er bevidst: At acceptere installations-id'et uden verificering ville lade ét Status200-projekt gøre krav på en anden organisations repositories.
Angiv tilladelserne
Angiv disse Repository permissions under Permissions & events:
Tilladelse Adgang Hvad Status200 bruger den til Contents Read and write Læse filer i repositoryet og pushe branches til AI-rettelsers pull requests Pull requests Read and write Åbne og opdatere pull requests og poste reviews Issues Read and write Poste appens kommentarer — også på pull requests, hvis samtale GitHub sender gennem issues-API'et Checks Read-only Valgfri. Læse CI-resultatet af rettelsers pull requests. Uden den forbliver deres CI-status uverificeret Metadata Read-only Grundlæggende metadata for repositoryet (krævet af GitHub) Det er Issues: Read and write, der gør appen interaktiv. Uden den modtages omtaler, men de mislykkes lydløst, når appen prøver at svare — GitHub leverer kommentarer i pull request-samtaler fra issues-API'et, så denne ene tilladelse afgør hvert svar, appen skriver. Se Arbejd med Status200 fra GitHub.
Status200 har ikke brug for tilladelser på organisations- eller kontoniveau.
Abonnér på webhook-events
Status200 bruger to sæt events, og de har forskellige opgaver.
Synkronisering af repositories —
installationoginstallation_repositories. GitHub Apps modtager dem automatisk; de holder de forbundne repositories i takt med, hvor appen er installeret.Den interaktive app — disse skal du abonnere på eksplicit, og hver af dem muliggør en bestemt måde at give appen opgaver på:
Event Hvad det muliggør Issue comment @mention-kommandoer i issues og i pull requestsIssues at tildele appen et issue, og repositoryets trigger-label Pull request at anmode appen om et review, og produktionsgennemgange af pull requests, når de åbnes og ændres Pull request review en omtale skrevet i teksten til et indsendt review Pull request review comment en omtale i en inline-kommentar i diffet Hvis der ikke er abonneret på nogen af dem, forbinder GitHub-appen stadig repositories og åbner stadig rettelsers pull requests fra Status200 — den svarer bare aldrig på noget, der skrives i GitHub. Det er den hyppigste årsag til "botten ignorerer mig". Se Arbejd med Status200 fra GitHub, hvilke kommandoer der findes, og hvem der må give dem.
Andre events (Push, Workflow run) kvitteres og ignoreres; at abonnere på dem slår hverken notifikationer eller CI/CD-automatisering til.
Vælg, hvor appen kan installeres
Vælg under Where can this GitHub App be installed?:
- Only on this account - Til privat/intern brug
- Any account - Hvis andre skal kunne installere din app
Opret appen, og notér dens id'er
Vælg Create GitHub App. GitHub åbner appens indstillingsside. Notér App ID øverst på siden og Client ID i afsnittet About.
Generér en client secret
Vælg Generate a new client secret under Client secrets. Kopiér den med det samme: GitHub viser den kun én gang.
Generér en privat nøgle
Vælg Generate a private key under Private keys. GitHub downloader en
.pem-fil. Opbevar den sikkert: Den lader Status200 godkende sig som appen.
Konfigurér Status200
Docker Compose
config.env har én værdi pr. linje, så angiv den private nøgle base64-kodet på en enkelt linje. Status200 afkoder den:
base64 < private-key.pem | tr -d '\n'GITHUB_APP_ID=YOUR_APP_ID
GITHUB_APP_NAME=YOUR_APP_NAME
GITHUB_APP_CLIENT_ID=YOUR_CLIENT_ID
GITHUB_APP_CLIENT_SECRET=YOUR_CLIENT_SECRET
GITHUB_APP_PRIVATE_KEY=YOUR_BASE64_ENCODED_PRIVATE_KEY
GITHUB_APP_WEBHOOK_SECRET=YOUR_WEBHOOK_SECRETAnvend ændringen med npm run start, som genopretter containerne. docker compose restart læser ikke config.env igen.
Kubernetes
gitHubApp:
id: "YOUR_APP_ID"
name: "YOUR_APP_NAME" # The exact name of your GitHub App
clientId: "YOUR_CLIENT_ID"
clientSecret: "YOUR_CLIENT_SECRET"
privateKey: "<BASE64_ENCODED_PRIVATE_KEY_CONTENT>"
webhookSecret: "YOUR_WEBHOOK_SECRET"privateKey tager også selve PEM'en som en blok over flere linjer (privateKey: |). Anvend ændringen med helm upgrade.
Når Status200 kører igen, viser Kode knappen Forbind GitHub i stedet for GitHub App er ikke konfigureret på denne server.
Oversigt over miljøvariabler
Docker Compose (config.env) | Helm (values.yaml) | Værdi |
|---|---|---|
GITHUB_APP_ID | gitHubApp.id | App ID. Bruges til at godkende som appen. |
GITHUB_APP_NAME | gitHubApp.name | Appens navn. Visningsnavnet er fint, med mellemrum og store bogstaver: installationslinket og appens @mention-handle bruger den slug, GitHub oplyser for appen, og bygges kun ud fra dette navn (med små bogstaver, bindestreger i stedet for mellemrum), når Status200 ikke kan spørge GitHub. Uden det kan Kode ikke forbinde repositorier. |
GITHUB_APP_CLIENT_ID | gitHubApp.clientId | Client ID. Nødvendig for at kontrollere, hvem der installerede appen. |
GITHUB_APP_CLIENT_SECRET | gitHubApp.clientSecret | Den client secret, du genererede. Nødvendig sammen med client ID. |
GITHUB_APP_PRIVATE_KEY | gitHubApp.privateKey | Den private nøgle: PEM'en eller PEM'en base64-kodet. |
GITHUB_APP_WEBHOOK_SECRET | gitHubApp.webhookSecret | Webhook-secret. Hver webhook verificeres med den, og ingen accepteres uden den. |
Alle seks er påkrævet.
Forbind repositories
Start forbindelsen fra Status200, ikke fra appens side på GitHub: Det link, Status200 sender dig til GitHub med, er det, der knytter installationen til dit projekt.
- Log ind på dit Status200-dashboard
- Gå til Produkter > Kode
- Klik på Forbind GitHub. Status200 sender dig til GitHub
- Vælg den organisation eller konto, appen skal installeres på, og vælg, hvilke repositories den må tilgå: All repositories (alle nuværende og fremtidige repositories) eller Only select repositories
- Klik på Install
- GitHub sender dig tilbage til Kode, og hvert repository i installationen importeres. Repositories, der senere tilføjes til eller fjernes fra installationen, holdes automatisk synkroniseret.
Når appen allerede er installeret på kontoen, til et andet projekt eller direkte fra GitHub, bliver den ikke forbundet af at installere den igen: GitHub åbner installationens indstillinger og sender dig aldrig tilbage. Klik i stedet på Forbind en eksisterende installation under Forbind GitHub. Du logger ind på GitHub, og Status200 forbinder den installation, din GitHub-konto administrerer. Administrerer den mere end én, viser Kode dem: vælg den konto, hvis repositories projektet skal bruge.
Hvem der kan forbinde. At forbinde importerer installationens repositories til projektet og kræver derfor tilladelse til at tilføje koderepositorier: Project Owner, Project Admin, Project Member, Settings Admin, Settings Member eller et team med Create Code Repository. Et team, der blokerer tilladelsen, fjerner den. På Status200 Cloud kræver koderepositorier Growth-abonnementet eller højere. For alle andre er kortet låst og siger, hvad der skal til. På GitHub skal den konto, der installerer eller forbinder appen, administrere installationen: ejeren af en personlig konto, eller en person med admin-adgang til hvert repository, installationen har adgang til, sådan som en ejer af organisationen har. Læseadgang til et af dens repositories er ikke nok.
Gør det færdigt inden for 15 minutter, i samme browser. Linket virker én gang, i 15 minutter, i den browser, der startede det. Når GitHub sender dig tilbage, kontrollerer Status200 tilladelsen igen, før den importerer noget.
Netværksadgang for selvhostede installationer
Trafikretning og endpoints
| Trafik | Påkrævet adgang |
|---|---|
| Status200 til GitHub | DNS og udgående HTTPS på TCP 443 til api.github.com for tokens til GitHub-appen og API-kald til repositories og til github.com for udveksling af OAuth-token og Git-handlinger over HTTPS |
| GitHub til Status200 | Offentlig HTTPS på TCP 443 til POST /api/github/webhook for synkronisering af installationer og adgang til repositories og for den interaktive app |
| Brugerens browser til Status200 | Adgang til dashboardet og GET /api/github/auth/callback for omdirigeringer ved installation og autorisation; de kan forblive tilgængelige via brugerens VPN |
Callbacken er en omdirigering i browseren, mens webhooken er en anmodning fra GitHubs servere. En brugers VPN-forbindelse giver ikke GitHub adgang til webhooken. Domænerne ovenfor dækker integrationens centrale anmodninger; yderligere værktøjer til repositories, downloads, LFS eller pakker kan kræve andre destinationer. Disse indstillinger beskriver GitHub.com; at ændre firewallen opsætter ikke understøttelse af et værtsnavn til GitHub Enterprise Server.
Private installationer og sikkerhed for callbacks
Eksponér /api/github/webhook gennem en offentlig gateway med offentlig DNS, et offentligt betroet HTTPS-certifikat med komplet kæde og en privat rute til Status200s ingress. Tillad indgående TCP 443 til gatewayen, og begræns den offentlige videresendelse til denne POST-rute. Behold dashboardet og browserens callback på den private ingress, hvis brugerne tilgår dem via VPN; split DNS kan levere samme værtsnavn internt og eksternt.
Angiv HOST=status200.example.com og HTTP_PROTOCOL=https i config.env, eller host: status200.example.com og httpProtocol: https i Helm. Anvend konfigurationen, og vent på, at Status200 genstarter. Disse værdier genererer URL'er; de opretter hverken DNS, TLS eller netværksadgang. Hvis værtsnavnet ændres, så opdatér GitHub-appens webhook-, callback-, setup- og homepage-URL'er.
Bevar metoden, den oprindelige sti, forespørgselsstrengen, body, Content-Type, X-Hub-Signature-256, X-GitHub-Event og X-GitHub-Delivery. Bevar den offentlige vært og HTTPS-skemaet via betroede proxyheadere. Undtag webhooken fra browser-SSO, CAPTCHA og proxyens loginsider. Lad GitHubs SSL-verificering være slået til, og konfigurér samme GITHUB_APP_WEBHOOK_SECRET i begge systemer: Status200 afviser usignerede anmodninger og kan ikke validere webhooks uden denne secret. Se GitHubs vejledning i validering af webhooks.
Hvis du også begrænser webhooks' kilde-IP'er, så brug de aktuelle hooks-intervaller fra GitHubs Meta API, og opdatér dem jævnligt; erstat dem ikke med intervallerne for GitHub Actions-runners, og udelad ikke signaturverificeringen. GitHub advarer om, at deres adresser ændrer sig, og at den offentliggjorte liste ikke er fuldstændig.
Kontrollér adgangen, og forstå begrænsningerne
- Forbind en installation fra Kode.
- Åbn Advanced i GitHub-appens indstillinger, og se på Recent Deliveries. Gensend en levering, og bekræft, at gatewayen videresender den, og at Status200 accepterer den.
- Tilføj eller fjern et testrepository fra installationen, og kontrollér, at listen over repositories i Status200 følger med.
GitHub dokumenterer diagnosticering af leveringer og kræver en 2xx-kvittering inden for ti sekunder. Et GET fra browseren til webhooken tester ikke et signeret POST.
Uden indgående adgang kan autorisation i browseren samt udgående API- og Git-handlinger virke, men webhooks kan ikke nå Status200: Slettede installationer og ændringer i adgangen til repositories synkroniseres ikke, og appen svarer aldrig på omtaler, tildelinger eller anmodninger om review.
Indstillingen for adgang til private netværk styrer udgående anmodninger til private destinationer og gør ikke webhooken tilgængelig for GitHub.
Fejlfinding
Forbindelsen blev ikke fuldført
Når GitHub sender dig tilbage, og installationen ikke blev forbundet, viser Kode meddelelsen GitHub blev ikke forbundet med én sætning på dit sprog, der siger hvorfor. Resten af siden indlæses som normalt, så du kan forbinde igen lige dér. Den viser aldrig, hvad GitHub selv svarede: Det står i Status200-serverens log sammen med årsagen.
| Siden siger | Hvad du gør |
|---|---|
| "Dette forbindelseslink er ugyldigt, er udløbet eller er allerede brugt. Start forfra." | Linket virker én gang, i 15 minutter, i den browser, der startede det. Start forfra fra Kode, og gør det færdigt på GitHub inden for 15 minutter i samme browser. At installere appen fra dens side på GitHub forbinder den ikke med noget projekt: for at forbinde en installation, der er lavet dér, skal du klikke på Forbind en eksisterende installation. |
| "Du har ikke tilladelse til at tilføje kode-repositories til dette projekt." | At forbinde kræver tilladelse til at tilføje koderepositorier (se Forbind repositories). Bed en projektadministrator om at give den. Den kontrolleres igen, når GitHub sender dig tilbage, så en tilladelse, der er fjernet i mellemtiden, afslutter også forbindelsen her. |
| "Det kræver ...-abonnementet at forbinde GitHub." | På Status200 Cloud kræver koderepositorier det abonnement, sætningen nævner. Opgradér projektets abonnement, og forbind igen. |
| "GitHub bekræftede ikke, hvem der installerede appen, så installationen kunne ikke kontrolleres." | Slå Request user authorization (OAuth) during installation til i GitHub-appens indstillinger (se Opret GitHub-appen), og forbind igen. |
| "Status200 kunne ikke bekræfte, at din GitHub-konto kan administrere denne installation." | Den GitHub-konto, der fuldførte installationen, administrerer den ikke (se Forbind repositories for, hvem der gør). Appen forbliver installeret på GitHub, så bed en, der administrerer den, om at forbinde den med Forbind en eksisterende installation. |
| "GitHub sendte ingen installation tilbage." | Når et medlem af organisationen anmoder om appen i stedet for at installere den, skal en ejer af organisationen først godkende anmodningen. Når det er sket, forbinder en, der administrerer installationen, den med Forbind en eksisterende installation. |
| "Din GitHub-konto administrerer endnu ingen installation af appen." | Den GitHub-konto, du loggede ind med, administrerer ingen installation af appen (se Forbind repositories for, hvem der gør). Hvis appen endnu ikke er installeret på kontoen, så installér den med Forbind GitHub. Hvis den er, så forbind igen, logget ind på GitHub med en konto, der administrerer den, eller bed en, der gør. |
| "GitHub App er ikke sat op på denne Status200-server." | Angiv både GITHUB_APP_CLIENT_ID og GITHUB_APP_CLIENT_SECRET (se Konfigurér Status200), og genstart Status200. |
| "Status200 kunne ikke fuldføre forbindelsen. Prøv igen." | GitHub svarede med en fejl, eller en anmodning eller en skrivning mislykkedes under afslutningen. Status200-serverens log siger hvilken. Prøv igen; hvis det bliver ved, så tjek loggen og GitHub-appens indstillinger. |
Andre problemer
Kode siger "GitHub App er ikke konfigureret på denne server"
GITHUB_APP_NAME er ikke angivet. Sæt den til appens præcise navn sammen med de fem andre værdier, og genstart Status200.
Jeg sendes ikke tilbage til Status200 efter at have installeret appen
Hvis appen allerede er installeret på kontoen, åbner GitHub i stedet installationens indstillinger og sender ingen tilbage derfra: forbind den med Forbind en eksisterende installation. Ellers skal du kontrollere, at appens Callback URL er https://your-oneuptime-domain.com/api/github/auth/callback, og det samme for Setup URL, hvis den er angivet. Begge skal pege på det samme endpoint /api/github/auth/callback på værtsnavnet i HOST.
GitHubs Recent Deliveries viser "Invalid webhook signature"
Webhook-secret i GitHub-appen og GITHUB_APP_WEBHOOK_SECRET er forskellige, GITHUB_APP_WEBHOOK_SECRET er ikke angivet, eller en proxy har ændret anmodningens body. Angiv samme secret begge steder, genstart Status200, og sørg for, at gatewayen videresender body uændret.
Webhook-events modtages ikke
Kontrollér, at webhook-URL'en kan nås offentligt over HTTPS, og se derefter på Advanced > Recent Deliveries i GitHub-appens indstillinger for hvert forsøg og dets svar. Webhooks afvises, så længe GITHUB_APP_WEBHOOK_SECRET ikke er angivet.
Repositories eller rettelsesopgaver fejler med en godkendelsesfejl
Status200 godkender sig som appen med GITHUB_APP_ID og GITHUB_APP_PRIVATE_KEY. Kontrollér, at App ID er korrekt, og at nøglen er den komplette PEM, inklusive linjerne BEGIN og END, eller den PEM base64-kodet. Hvis appen er afinstalleret fra GitHub, så forbind den igen fra Kode.
Der mangler repositories efter installationen
Kontrollér i installationens indstillinger på GitHub, hvilke repositories installationen har adgang til. Repositories, du tilføjer dér, importeres automatisk, så længe webhooks når Status200.
Appen ignorerer omtaler i GitHub
Giv appen Issues: Read and write, og abonnér den på de interaktive events fra Abonnér på webhook-events. Omtaler matcher desuden kun appens handle, dens slug på GitHub: appens navn med små bogstaver og bindestreger i stedet for mellemrum. Status200 læser den fra GitHub og bygger den kun ud fra GITHUB_APP_NAME, når det ikke kan.
Bedste praksis for sikkerhed
- Rotér hemmeligheder jævnligt. Generér med jævne mellemrum nye client secrets og private nøgler.
- Lad webhook-secret være angivet. Status200 afviser webhooks, den ikke kan verificere.
- Begræns adgangen til repositories. Giv kun installationen de repositories, der skal forbindes.
- Hold øje med webhook-leveringer. Tjek jævnligt for mislykkede leveringer eller mistænkelig aktivitet.
- Hold private nøgler ude af versionsstyring.