Pam mae webhooks GitHub yn goramseru yn erbyn Jenkins y tu ôl i VPN
Mae GitHub yn postio webhooks i mewn, felly mae VPN sy’n diogelu Jenkins yn eu gwrthod. Anfonwch y danfoniad allan drwy relay, neu disodli’r webhook ag asiant sy’n arolygu.
Mae’r dudalen danfon yn dangos goramser ac nid yw Jenkins yn cofnodi dim, sef llofnod cysylltiad na chyrhaeddodd erioed. Mae GitHub yn anfon webhook fel HTTP POST allanol o’i seilwaith ei hun i’r payload URL a gysylltwyd gennych. Mae VPN yn diogelu Jenkins drwy wrthod union y math yna o gysylltiad. Nid oes dim wedi torri ar y naill ochr na’r llall. Cyfeiriad y cais yw’r broblem.
Beth mae’r danfoniad yn ei geisio mewn gwirionedd
Mae GitHub yn datrys enw’r gwesteiwr yn y payload URL ac yn cysylltu ag ef o’r rhyngrwyd cyhoeddus. Os yw’r URL hwnnw’n pwyntio at gyfeiriad preifat, neu at enw nad yw’n datrys ond o fewn eich rhwydwaith, mae’r cais yn methu cyn i unrhyw gais gael ei wneud. Os yw’n pwyntio at enw cyhoeddus y mae eich ymyl yn ei ollwng, mae’r cais yn goramseru yn lle hynny.
Mae’r gwahaniaeth yn bwysig ar gyfer diagnosis. Mae methiant DNS a phorth hidl yn edrych ill dau fel pe na bai dim wedi digwydd ar ochr Jenkins, ac mae’r ddau yn ymddangos ar GitHub fel danfoniad methiedig gyda rheswm gwahanol ynghlwm. Darllenwch y rheswm hwnnw cyn newid yr URL.
Nid yw twnnel sy’n deialu allan yn creu gwrandäwr. Dyna’r rhan y mae pobl yn disgwyl iddi weithio’n wahanol.
Tair ffordd i drwsio cyfeiriad y cysylltiad
Mae pob ateb yn newid pwy sy’n cychwyn y cysylltiad, a dim ond tair siâp sydd.
| Approach | Who initiates | What you give up |
|---|---|---|
| Relay service | An outbound client inside the network | A third party sees every payload |
| Reverse tunnel or ingress | The public edge, into a controlled listener | An inbound surface you must secure |
| Runner or polling | The agent, outbound to GitHub | Instant delivery, replaced by a schedule |
Arolygu yw’r lleiaf cain a’r hawsaf i’w weithredu. Mae relay yn cadw adborth bron yn syth heb agor porth. Runner fel arfer yw’r ateb cywir pan fydd cyfrinachedd y payload yn diystyru trydydd parti, oherwydd gall y gwaith redeg ar beiriant sydd eisoes y tu mewn i’r rhwydwaith.
Dewiswch yn ôl yr hyn y gallwch ei weithredu, nid yn ôl yr hyn sy’n swnio’n fodern.
Anfonwch ddanfoniad allan gyda smee
Crëwch sianel ar y gwasanaeth relay a chadwch ei URL. Y tu mewn i’r rhwydwaith, gosodwch y cleient ac anfonwch ddanfoniadau i’r llwybr y mae Jenkins yn ei ddisgwyl. Daw’r payload URL yng ngosodiadau’r storfa yn URL y sianel, gyda’r math cynnwys wedi’i osod i application/json.
sudo npm install --global smee-client
smee -u CHANNEL_URL --path /github-webhook/ --port 8080Mae tri manylyn yn penderfynu a yw’n gweithio. Rhaid i’r llwybr gyd-fynd â’r hyn y mae Jenkins yn ei ddisgwyl ar gyfer digwyddiadau GitHub, sef /github-webhook/ yn ddiofyn. Rhaid i Jenkins fod yn gwrando ar y porth a roddwyd gennych i’r cleient. Ac mae’n rhaid i’r Jenkins URL a gyfluniwyd yn y swydd gytuno â’r llwybr hwnnw, neu bydd y digwyddiad yn cyrraedd ac yna’n cael ei daflu.
Mae slas olaf nad yw’n cyfateb yn cynhyrchu 404 sy’n darllen fel methiant danfon ac nid yw felly.
Ei redeg fel ei fod yn goroesi’r wythnos
Mae cleient blaen yn marw gyda’r derfynell, ac mae’r webhooks yn gweithio am ddiwrnod ac yna’n stopio. Rhowch unit gyda Restart=always iddo, ei redeg fel defnyddiwr Jenkins, a darllenwch y journal ar ôl y danfoniad go iawn cyntaf. Y cam olaf hwnnw sy’n gwahanu relay sy’n gweithio oddi wrth un sydd wedi’i gyflunio.
[Unit]
Description=smee webhook relay
After=network.target
[Service]
Type=simple
Restart=always
RestartSec=2
User=jenkins
ExecStart=/usr/bin/smee -u CHANNEL_URL --path /github-webhook/ --port 8080
[Install]
WantedBy=multi-user.targetProfwch gyda push go iawn yn hytrach na botwm ailchwarae. Mae ailchwarae yn arfer payload storio’r relay, nid y llwybr o GitHub i’ch sianel, felly gall basio tra bod danfon byw yn dal i fethu.
Rhowch rybudd pan fydd y unit yn stopio. Mae relay sydd i lawr yn dawel yn ôl ei wneuthuriad, a thawelwch yw’r union beth rydych chi’n ei ddadfygio’n barod.
Beth all y relay ei weld, a phryd i beidio â defnyddio un
Mae relay yn terfynu’r payload, felly mae’n gweld enwau storfa, data commit a phopeth arall y mae’r digwyddiad yn ei gario. Triniwch URL y sianel fel pwynt terfyn cyhoeddus. Cadwch y secret token Jenkins wedi’i gyflunio fel bod danfoniadau ffug yn cael eu gwrthod, a chyfyngwch y token y mae Jenkins yn ei ddefnyddio i’r lleiaf sydd ei angen.
Os yw cyfrinachedd y payload yn diystyru hynny, runner hunangynhaliol neu dwnnel gwrthdro dilys yw’r ateb.
Mae relay bellach yn seilwaith, ac mae’n haeddu’r un adolygiad â’r build y mae’n ei sbarduno. Cylchdrowch y sianel os yw’n gollwng, a nodwch y dyddiad y gwnaethoch wirio danfoniad byw ddiwethaf. Rhowch y dyddiad hwnnw yn y runbook wrth ymyl URL y sianel. Mae relay nad oes neb wedi’i adolygu am flwyddyn yn bwynt terfyn cyhoeddus nad oes neb yn berchen arno.