Afhendingarsíðan sýnir tímamörk og Jenkins skráir ekkert, sem er einkenni tengingar sem komst aldrei. GitHub sendir webhook sem útleiðandi HTTP POST frá eigin innviðum á payload URL-ið sem þú stilltir. VPN verndar Jenkins með því að hafna nákvæmlega slíkri tengingu. Ekkert er bilað á hvorum tveggja hlið. Vandamálið er stefna beiðninnar.

Hvað afhendingin reynir í raun

GitHub leysir hýsilnafnið í payload URL-inu og tengist því frá opinberu internetinu. Ef það URL vísar á einkaaðsetur, eða á nafn sem leysist aðeins innan netsins þíns, mistekst tilraunin áður en nokkur beiðni er send. Ef það vísar á opinbert nafn sem jaðarinn þinn hendir, rennur tilraunin út á tíma í staðinn.

Þessi greinarmunur skiptir máli fyrir greiningu. DNS-bilun og síaður port líta bæði út eins og ekkert hafi gerst á Jenkins-hliðinni, og bæði birtast á GitHub sem misheppnuð afhending með annarri ástæðu viðhengda. Lestu þá ástæðu áður en þú breytir URL-inu.

Tunnill sem hringir út á við býr ekki til hlustanda. Það er sá hluti sem fólk á von á að virki öðruvísi.

Þrjár leiðir til að laga stefnu tengingarinnar

Sérhver lausn breytir því hver hefur frumkvæði að tengingunni, og það eru aðeins þrjú form.

ApproachWho initiatesWhat you give up
Relay serviceAn outbound client inside the networkA third party sees every payload
Reverse tunnel or ingressThe public edge, into a controlled listenerAn inbound surface you must secure
Runner or pollingThe agent, outbound to GitHubInstant delivery, replaced by a schedule

Könnun er minnst glæsileg og auðveldust í rekstri. Relay heldur nærri samstundis endurgjöf án þess að opna port. Runner er yfirleitt rétta svarið þegar trúnaður payloads útilokar þriðja aðila, því vinnan getur keyrt á vél sem þegar stendur innan netsins.

Veldu eftir því sem þú getur rekið, ekki eftir því sem hljómar nútímalega.

Sendu afhendingu út á við með smee

Búðu til rás á relay-þjónustunni og geymdu URL-ið hennar. Innan netsins skaltu setja upp biðlarann og senda afhendingar á slóðina sem Jenkins á von á. Payload URL-ið í stillingum geymslunnar verður URL rásarinnar, með efnisgerðina stillta á application/json.

sudo npm install --global smee-client
smee -u CHANNEL_URL --path /github-webhook/ --port 8080

Þrír smáatriðir ráða því hvort það virkar. Slóðin verður að passa við það sem Jenkins á von á fyrir GitHub-atburði, sem er sjálfgefið /github-webhook/. Jenkins verður að hlusta á portið sem þú gafst biðlaranum. Og Jenkins URL-ið sem er stillt í verkinu verður að samræmast þeirri slóð, annars kemur atburðurinn og er þá hent.

Ósamræmi í lokastriki framleiðir 404 sem lesst sem misheppnuð afhending og er það ekki.

Keyra það svo það lifi vikuna af

Biðlari í forgrunni deyr með terminalnum, og webhookin virka í einn dag og stöðvast svo. Gefðu honum unit með Restart=always, keyrðu hann sem Jenkins-notanda og lestu journalið eftir fyrstu raunverulegu afhendinguna. Það er þetta síðasta skref sem aðgreinir virkandi relay frá stilltu.

[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.target

Prófaðu með raunverulegu push frekar en endurspilunartakka. Endurspilun æfir geymda payload relay-sins, ekki slóðina frá GitHub að rásinni þinni, svo hún getur staðist á meðan lifandi afhending mistekst enn.

Gefðu viðvörun þegar unitið stöðvast. Relay sem er niðri er þögult að byggingu, og þögnin er einmitt það sem þú ert þegar að kemba.

Hvað relay-ið getur séð, og hvenær á ekki að nota eitt

Relay lýkur payloadinu, svo það sér geymsluheiti, commit-gögn og hvað sem atburðurinn ber. Meðhöndlaðu URL rásarinnar sem opinbert endapunkt. Haltu leynilega token Jenkins stilltu svo fölsuðum afhendingum sé hafnað, og takmarkaðu tokenið sem Jenkins notar við nauðsynlegt lágmark.

Ef trúnaður payloads útilokar það, sjálfhýst runner eða auðkenndur öfugur tunnill er svarið.

Relay er nú innviðir og á skilið sömu yfirferð og buildið sem það hleypir af stað. Snúðu rásinni ef hún lekur og skráðu dagsetninguna sem þú staðfestir síðast lifandi afhendingu. Settu þá dagsetningu í runbookið við hlið URL rásarinnar. Relay sem enginn hefur farið yfir í eitt ár er opinbert endapunkt sem enginn á.

Tengdir greinar