Kí ni ìdí tí àwọn webhook GitHub fi ń parí àkókò lórí Jenkins tó wà lẹ́yìn VPN
GitHub ń fi àwọn webhook ránṣẹ́ sínú, nítorí náà VPN tó ń dá Jenkins àbò ń kọ̀ wọ́n. Tú àwọn ìfihàn jáde nípasẹ̀ relay, tàbí fi agent tó ń ṣàyẹ̀wò rọ́pò webhook.
Ojú-ìwé ìfihàn fi parí àkókò hàn, Jenkins kò sì ṣàkọsílẹ̀ kankan, èyí tó jẹ́ àmì ìsopọ̀ tí kò dé rárá. GitHub ń fi webhook ránṣẹ́ gẹ́gẹ́ bí HTTP POST tó ń jáde láti inú àwọn ohun àmúṣọrọ̀ tirẹ̀ sí payload URL tí o ṣètò. VPN ń dá Jenkins àbò nípa kíkọ̀ irú ìsopọ̀ bẹ́ẹ̀ gan-an. Kò sí ohun tó bàjẹ́ ní ẹ̀gbẹ́ kankan. Ìṣòro náà wà nínú ìtọ́sọ́nà ìbéèrè.
Ohun tí ìfihàn ń gbìyànjú ní ti gidi
GitHub ń yanjú orúkọ agbàlejò nínú payload URL, ó sì so mọ́ ọn láti orí íńtánẹ́ẹ̀tì gbogbo ènìyàn. Tí URL yẹn bá tọ́ka sí àdírẹ́sì àdáni kan, tàbí sí orúkọ tí a kìkì yanjú rẹ̀ nínú nẹ́tíwọ́kì rẹ, ìgbìyànjú yẹn yóò kùnà kí a tó rán ìbéèrè kankan. Tí ó bá tọ́ka sí orúkọ gbogbo ènìyàn tí etí rẹ ń sọ nù, ìgbìyànjú yẹn yóò parí àkókò ní àkókò yẹn.
Ìyàtọ̀ yìí ṣe pàtàkì fún àyẹ̀wò àrùn. Ìkùnà DNS àti pọ́ọ̀tì tí a yọ̀ǹda jẹ́ pé àwọn méjèèjì dàbí pé kò sí ohun tó ṣẹlẹ̀ ní ẹ̀gbẹ́ Jenkins, àwọn méjèèjì sì farahàn lórí GitHub gẹ́gẹ́ bí ìfihàn tó kùnà pẹ̀lú ìdí tó yàtọ̀ tí a so mọ́. Ka ìdí yẹn kí o tó yí URL padà.
Ònà abẹ́lẹ̀ tó ń pe jáde kò dá olùgbọ́. Ìyẹn ni apá tí àwọn ènìyàn retí pé yóò ṣiṣẹ́ lọ́nà yàtọ̀.
Àwọn ọ̀nà mẹ́ta láti tún ìtọ́sọ́nà ìsopọ̀ ṣe
Ògùn-ìtúnṣe kọ̀ọ̀kan ń yí ẹni tó bẹ̀rẹ̀ ìsopọ̀ padà, àwọn ìrísí mẹ́ta péré sì wà.
| 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 |
Ṣíṣàyẹ̀wò ni ó kéré jù nínú ẹ̀wà, ó sì rọrùn jù láti ṣàkóso. Relay ń pa ìdáhùnpadà tó fẹ́rẹ̀ẹ́ má jẹ́ kíákíá mọ́ láì sí pọ́ọ̀tì kan. Runner sábà máa ń jẹ́ ìdáhùn tó tọ́ nígbà tí àṣírí payload bá yọ ẹnìkẹta kúrò, nítorí iṣẹ́ náà lè ṣiṣẹ́ lórí ẹ̀rọ tó ti wà nínú nẹ́tíwọ́kì tẹ́lẹ̀.
Yan ní ibámu pẹ̀lú ohun tí o lè ṣàkóso, kì í ṣe ohun tó dàbí òde-òní.
Fi ìfihàn jáde pẹ̀lú smee
Ṣí kíkà kan lórí iṣẹ́ relay kí o sì pa URL rẹ̀ mọ́. Nínú nẹ́tíwọ́kì, fi kíkà mọ́ ẹ̀rọ kí o sì rán àwọn ìfihàn sí ọ̀nà tí Jenkins retí. Payload URL nínú ètò àkójọpọ̀ di URL kíkà náà, pẹ̀lú irú àkóónú tí a ṣètò sí application/json.
sudo npm install --global smee-client
smee -u CHANNEL_URL --path /github-webhook/ --port 8080Àwọn àlàyé mẹ́ta ni ó ń pinnu bóyá yóò ṣiṣẹ́. Ọ̀nà gbọ́dọ̀ bá ohun tí Jenkins retí fún àwọn ìṣẹ̀lẹ̀ GitHub mu, èyí tó jẹ́ /github-webhook/ ní àìdánilójú. Jenkins gbọ́dọ̀ máa gbọ́ lórí pọ́ọ̀tì tí o fún kíkà náà. Àti Jenkins URL tí a ṣètò nínú iṣẹ́ gbọ́dọ̀ bá ọ̀nà yẹn mu, bí bẹ́ẹ̀ kọ́ ìṣẹ̀lẹ̀ yóò dé kí a sì sọ ọ́ nù.
Àìbáramu slas àṣẹ̀yìn ń dá 404 tí a ka bí ìkùnà ìfihàn tí kì í sì ṣe bẹ́ẹ̀.
Ṣíṣe é kí ó lè gbé ọ̀sẹ̀ náà já
Kíkà tó wà ní iwájú ń kú pẹ̀lú ẹ̀rọ ìkànnì, àwọn webhook sì ń ṣiṣẹ́ ọjọ́ kan àwọn yóò sì dá. Fún un ní unit tó ní Restart=always, ṣe é gẹ́gẹ́ bí olùlò Jenkins, kí o sì ka journal lẹ́yìn ìfihàn gidi àkọ́kọ́. Ìgbésẹ̀ ìkẹyìn yẹn gan-an ni ó ń ya relay tó ń ṣiṣẹ́ sọ́tọ̀ kúrò nínú èyí tí a ti ṣètò.
[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.targetDán wò pẹ̀lú push gidi dípò bọ́tìnnì àtúnṣe. Àtúnṣe ń ṣe àdánwò payload tí relay pa mọ́, kì í ṣe ọ̀nà láti GitHub sí kíkà rẹ, nítorí náà ó lè jáwé olúborí nígbà tí ìfihàn tààrà ṣì ń kùnà.
Fún ìkìlọ̀ nígbà tí unit bá dá. Relay tó ti ṣubú dakẹ́ nípasẹ̀ ìṣẹ̀dá rẹ̀, ìdákẹ́jẹ́ ni ohun tí o ti ń ṣàwárí ìṣòro rẹ̀ tẹ́lẹ̀.
Ohun tí relay lè rí, àti ìgbà tí kò yẹ kí a lò ó
Relay ń parí payload, nítorí náà ó ń rí orúkọ àwọn àkójọpọ̀, dátà commit àti ohunkóhun mìíràn tí ìṣẹ̀lẹ̀ náà gbé. Kí o ka URL kíkà náà gẹ́gẹ́ bí ibi ìparí gbogbo ènìyàn. Pa secret token Jenkins mọ́ ní ṣíṣètò kí a lè kọ àwọn ìfihàn èké, kí o sì dín token tí Jenkins ń lò kù sí ìwọ̀n tó kéré jù tó pọn dandan.
Tí àṣírí payload bá yọ ìyẹn kúrò, runner tí a gbàléjò fúnra wa tàbí ọ̀nà abẹ́lẹ̀ ìdàkejì tí a fọwọ́ sí ni ìdáhùn.
Relay ti di ohun àmúṣọrọ̀ báyìí, ó sì yẹ fún àyẹ̀wò kan náà bí build tí ó ń dá sílẹ̀. Yí kíkà náà padà tí ó bá ń ṣàn, kí o sì kọ ọjọ́ tí o gbẹ̀yìn ṣàyẹ̀wò ìfihàn tààrà kan. Fi ọjọ́ yẹn sínú runbook lẹ́gbẹ̀ẹ́ URL kíkà náà. Relay tí ẹnìkankan kò ṣàyẹ̀wò fún ọdún kan jẹ́ ibi ìparí gbogbo ènìyàn tí ẹnìkankan kò ní.