Ukurasa wa uwasilishaji unaonyesha muda kumalizika na Jenkins haiandiki chochote, ambayo ni ishara ya muunganisho ambao haukufika kamwe. GitHub hutuma webhook kama HTTP POST inayotoka kwenye miundombinu yake hadi payload URL uliyoisanidi. VPN inalinda Jenkins kwa kukataa aina hiyo ya muunganisho hasa. Hakuna kilichovunjika upande wowote. Tatizo ni mwelekeo wa ombi.

Uwasilishaji unajaribu nini hasa

GitHub hutatua jina la mwenyeji kwenye payload URL na kuunganisha nalo kutoka mtandao wa umma. Ikiwa URL hiyo inaelekeza kwenye anwani ya kibinafsi, au kwenye jina linalotatuliwa tu ndani ya mtandao wako, jaribio hushindwa kabla ya ombi lolote kutumwa. Ikiwa inaelekeza kwenye jina la umma ambalo ukingo wako hulitupa, jaribio badala yake hupata muda kumalizika.

Tofauti hii ni muhimu kwa utambuzi. Kushindwa kwa DNS na mlango uliochujwa zote zinaonekana kama hakuna kilichotokea upande wa Jenkins, na zote zinaonekana kwenye GitHub kama uwasilishaji ulioshindwa na sababu tofauti iliyoambatishwa. Soma sababu hiyo kabla ya kubadilisha URL.

Handaki inayopiga simu kwenda nje haiundi msikilizaji. Hiyo ndiyo sehemu ambayo watu wanatarajia ifanye kazi kwa njia tofauti.

Njia tatu za kurekebisha mwelekeo wa muunganisho

Kila suluhisho hubadilisha nani anaanzisha muunganisho, na kuna maumbo matatu tu.

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

Uchunguzi ni ule usio na umaridadi zaidi na rahisi zaidi kuendesha. Relay huweka mrejesho wa karibu papo hapo bila kufungua mlango. Runner kwa kawaida ni jibu sahihi wakati usiri wa payload unakataa mtu wa tatu, kwa sababu kazi inaweza kuendeshwa kwenye mashine ambayo tayari iko ndani ya mtandao.

Chagua kwa kile unachoweza kuendesha, sio kwa kile kinachosikika cha kisasa.

Peleka uwasilishaji nje kwa smee

Unda kituo kwenye huduma ya relay na uweke URL yake. Ndani ya mtandao, sakinisha mteja na upeleke uwasilishaji kwenye njia ambayo Jenkins inatarajia. Payload URL kwenye mipangilio ya hazina inakuwa URL ya kituo, na aina ya maudhui imewekwa kuwa application/json.

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

Maelezo matatu huamua ikiwa inafanya kazi. Njia lazima ilingane na kile Jenkins inatarajia kwa matukio ya GitHub, ambayo kwa chaguo-msingi ni /github-webhook/. Jenkins lazima isikilize kwenye mlango uliompa mteja. Na Jenkins URL iliyosanidiwa kwenye kazi lazima ikubaliane na njia hiyo, vinginevyo tukio hufika na kisha hutupwa.

Kutokulingana kwa mkwaju wa mwisho hutoa 404 inayosomwa kama kushindwa kwa uwasilishaji na sivyo.

Kuiendesha ili idumu wiki

Mteja wa mbele hufa pamoja na terminal, na webhook hufanya kazi siku moja kisha zinasimama. Mpe unit yenye Restart=always, iendeshe kama mtumiaji wa Jenkins, na usome journal baada ya uwasilishaji wa kwanza halisi. Hatua hiyo ya mwisho ndiyo inayotenganisha relay inayofanya kazi na iliyosanidiwa.

[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

Jaribu kwa push halisi badala ya kitufe cha kucheza tena. Kucheza tena hufanya mazoezi ya payload iliyohifadhiwa ya relay, sio njia kutoka GitHub hadi kituo chako, kwa hiyo inaweza kufaulu wakati uwasilishaji wa moja kwa moja bado unashindwa.

Toa tahadhari unit inaposimama. Relay iliyo chini ni kimya kwa muundo, na ukimya ndio hasa unachotafuta hitilafu.

Relay inaweza kuona nini, na ni lini usitumie moja

Relay hukamilisha payload, kwa hiyo inaona majina ya hazina, data ya commit na kila kitu kingine ambacho tukio hubeba. Chukulia URL ya kituo kama kituo cha mwisho cha umma. Weka token ya siri ya Jenkins imesanidiwa ili uwasilishaji wa kughushi ukataliwa, na punguza token ambayo Jenkins hutumia hadi kiwango cha chini kinachohitajika.

Ikiwa usiri wa payload unakataa hilo, runner inayohudumiwa na wewe mwenyewe au handaki ya kinyume iliyothibitishwa ndio jibu.

Relay sasa ni miundombinu, na inastahili mapitio sawa na build ambayo inaianzisha. Zungusha kituo ikiwa kinavuja, na andika tarehe uliyothibitisha mara ya mwisho uwasilishaji wa moja kwa moja. Weka tarehe hiyo kwenye runbook kando ya URL ya kituo. Relay ambayo hakuna mtu aliyeipitia kwa mwaka ni kituo cha mwisho cha umma ambacho hakuna mtu anamiliki.

Makala zinazohusiana