GitHub-Webhook erreecht privat Jenkins net: reparéiert de Wee
Eng VPN-Sessioun op Ärem Laptop gëtt GitHub keng Route an Jenkins. Vergläicht en agehenden Endpunkt, eng Relais an d’Polling, a test dann de Wee, deen d’Evenementer huelen.
Dir kënnt Jenkins iwwer d’VPN opmaachen an trotzdem gesinn, datt GitHub e feelgeschloenen Webhook mellt, well dat zwee verschidde Verbindungen mat zwee verschiddenen Eegentümer sinn. De Browser fiert duerch en Tunnel, deen Äre Laptop ausgehandelt huet; dem GitHub seng Liwwerservic fänkt um ëffentlechen Internet un an huet keng Route an den private Reseau. Den Zougang zum Repository ännert dat net, och wann Jenkins selwer ouni Problemer aus demselwechte Repository ka sichen. Wielt en Agang, eng Relais oder Polling, an test dann de Wee, deen d’Evenement tatsächlech hëlt.
Eng Browsersessioun beweist nëmmen eng Richtung
Eng VPN-Verbindung beäntwert eng Fro: kann dëse Laptop de bannenzege Host erreechen. D’Liwwerung vun Webhoken freet eng aner: kann en externe Service eng Verbindung zu deem Host opmaachen. Datt Jenkins aus engem Repository sicht, ass ausgoende Verkéier a seet näischt iwwer d’Erreechbarkeet vu baussen. Hält béid Richtungen op getrennte Linnen an Ärem Diagramm, dorënner och wéi eng Säit jiddwereng duerchféiert.
Liest de Liwwerprotokoll, ier Dir eppes ännert. En Timeout, en Neistart vun der Verbindung an eng ugeholl Ufro, déi zu kengem Job gepasst huet, hunn dräi verschidden Eegentümer: Reseau, Proxy an d’Konfiguratioun vum Trigger.
Optioun A: en enken Endpunkt verëffentlechen
Wann d’Organisatioun schonn en ugehollenen Agang publizéiert, verëffentlecht de Webhook-Wee amplaz vum Dashboard. Dat bedeit normalerweis eng Ëmgekéiert-Proxy-Regel, déi POST op der Hook-URL unhëlt an se un Jenkins weidergëtt, während d’Administratiounsschnittstell vu baussen onerreechbar bleift.
curl -sS -o /dev/null -w "%{http_code}\n" -X POST https://jenkins.example.com/github-webhook/Maacht deen Test aus engem Reseau ouni VPN-Zougang, well en Erfolleg aus dem Tunnel eraus näischt beweist. Den Endpunkt soll Ufroe mat gedeeltem Geheimnis ophuelen, dat GitHub als Signatur-Header schéckt, a soll nëmmen deen eenzegen Wee an déi eenzeg Method unhuelen, déi Dir publizéiert hutt. Eng ëffentlech Jenkins-Konsole ass keng Webhook-Léisung; et ass en Tëschefall, dee op den nächste Scanner waart. Begrenzt d’Regel enk genuch, datt de Rescht vun der Applikatioun seng fréier Zougangskontrollen hält.
Optioun B: déi Richtung mat enger Relais ëmdréien
Wou en agehenden Opmaache net guttgeheescht gëtt, kann en klengen Client am Reseau eng ausgoend Verbindung zu enger Relais halen a weidergeleet Evenementer kréien. D’Relais gëtt dann en Deel vum Liwwerwee, also si seng Disponibilitéit an Authentifizéierung esou wichteg wéi de Build-Job.
ssh -N -R 9000:localhost:8080 relay.example.netDem Jenkins seng Rotschléi iwwer Webhoken hannert Firewalls beschreiwen dës Form, an et ass derwäert, se ze liesen, ier Dir en eegene Weiderleiter schreift. Beendet TLS op der Relais, iwwerpréift d’Signatur, ier d’Evenement den Job erreecht, a iwwerwaacht den ausgoende Link, well en ofgebrach Tunnel genee esou ausgesäit wéi en Evenement, dat ni geschéckt gouf. Bestätegt och, datt d’Relais de Kierper vun der Ufro Byte fir Byte behält, well d’Signaturkontrollen op JSON versoen, deen ënnerwee geparst an nei kodéiert gouf.
Optioun C: amplaz d’Repository pollen
Polling tauscht Latenz géint Einfachheet an brauch iwwerhaapt keen agehende Wee. Jenkins ka no Zäitplang pollen, oder en klengen Job ka d’API froen an e Build starten, wann en eng onbekannt Revisioun gesäit.
curl -sS -u "$USER:$TOKEN" "https://api.github.com/repos/OWNER/REPO/commits?per_page=1"Jidwer Polling verbraucht API-Aufruffer a füügt eng Verzögerung tëscht Push a Build dobäi, wat op belegte Repositoryen an op gedeelten Tauxlimiten opfällt. Et brauch och Umeldungsdaten, déi do gespäichert sinn, wou de Poller leeft, also begrenzt den Token op Liesen-Zougang zum Repository a rotéiert en wéi all anert Geheimnis. Wielt dëst, wann den Evenementvolumen niddreg ass oder wann keen Agang iergendwann guttgeheescht gëtt, a sot dat an der Jobbeschreiwung, sou datt sech spéider kee freet, firwat d’Builte hannendran sinn.
Acceptéiert eng richteg Liwwerung, kee Säitelueden
Wéi eng Optioun Dir och gewielt hutt, den Acceptatiounstest ass en Evenement, dat d’Quellplattform schéckt, net en Browsertab, deen vun engem privilegiéierte Laptop opgemaach gouf. Dréckt en eidele Commit op eng Skrattsäit-Branche a liest de Äntwertcode vun der Liwwerung, de Log vun der Relais oder d’Ausgab vum Polling-Job, an där Reihenfolleg. Eng 200 vum Endpunkt ouni Build bedeit, datt de Trigger-Filter falsch ass; en Timeout bedeit, datt de Wee nach zou ass. Notéiert, wéi eng vun den dräi Konzepter benotzt gëtt, well soss widderhëlt déi nächst Persoun, déi debuggt, den Browsertest an erreecht déiselwecht Sakgaass.
Wendt déiselwecht Logik op Bezuel-Callbacks an aner baussecht Notifikatiounen un: jiddwereen brauch seng eege Route an déi privat Applikatioun, och wann all Mënsch schonn eng VPN-Sessioun huet. De Liwwerwee gehéiert zum Design vun der Applikatioun, net an eng Foussnout iwwer Reseauen.