Jenkins-i VPN üzərindən aça bilərsiniz və yenə də GitHub-ın uğursuz webhook bildirdiyini görərsiniz, çünki bunlar iki fərqli əlaqədir və iki fərqli sahibi var. Brauzer noutbukunuzun razılaşdırdığı tuneldən istifadə edir; GitHub-ın çatdırma xidməti isə açıq internetdən başlayır və özəl şəbəkəyə heç bir yolu yoxdur. Repozitoriyaya giriş bunu dəyişmir, hətta Jenkins özü həmin repozitoriyadan problemsiz götürə bilsə də. Giriş nöqtəsi, relay və ya polling seçin, sonra hadisənin həqiqətən getdiyi yolu yoxlayın.

Brauzer sessiyası yalnız bir istiqaməti sübut edir

VPN əlaqəsi bir suala cavab verir: bu noutbuk daxili hosta çata bilirmi. Webhook çatdırılması başqa bir sual verir: xarici xidmət həmin hosta əlaqə aça bilirmi. Jenkins-in repozitoriyanı götürməsi çıxan trafikdir və daxil olan əlçatanlıq barədə heç nə demir. Hər iki istiqaməti diaqramınızda ayrı sətirlərdə saxlayın, hər birini hansı tərəfin başlatdığını da qeyd edin.

Nəyisə dəyişməzdən əvvəl çatdırma qeydini oxuyun. Taymaut, əlaqənin sıfırlanması və heç bir işə uyğun gəlməyən qəbul edilmiş sorğu üç fərqli sahibə malikdir: şəbəkə, proxy və tetikleyici konfiqurasiyası.

Variant A: dar bir endpoint açın

Təşkilat artıq təsdiqlənmiş giriş nöqtəsi yayımlayırsa, idarə paneli yerinə webhook yolunu açın. Bu, adətən hook URL-inə POST qəbul edən və onları Jenkins-ə ötürən tərs proxy qaydası deməkdir, inzibati interfeys isə xaricdən əlçatmaz qalır.

curl -sS -o /dev/null -w "%{http_code}\n" -X POST https://jenkins.example.com/github-webhook/

Bu testi VPN girişi olmayan şəbəkədən keçirin, çünki tunelin içindən alınan uğur heç nə sübut etmir. Endpoint GitHub-ın imza başlığı kimi göndərdiyi ortaq sirri olmayan sorğuları rədd etməli və yalnız yayımladığınız tək yol və metodu qəbul etməlidir. Açıq Jenkins konsolu webhook düzəlişi deyil; bu, növbəti skanerin tapacağı hadisədir. Qaydanı kifayət qədər dar çərçivəyə salın ki, tətbiqin qalan hissəsi əvvəlki giriş nəzarətlərini saxlasın.

Variant B: istiqaməti relay ilə tərsinə çevirin

Daxil olan məruz qalma təsdiqlənməyəcəyi yerlərdə şəbəkə daxilindəki kiçik bir klient relay-ə çıxan əlaqəni açıq saxlayıb ötürülən hadisələri qəbul edə bilər. Relay sonra çatdırma yolunun bir hissəsi olur, buna görə onun əlçatanlığı və autentifikasiyası build işi qədər önəmlidir.

ssh -N -R 9000:localhost:8080 relay.example.net

Jenkins-in firewall arxasındakı webhook-lar barədə tövsiyələri bu formanı təsvir edir və fərdi ötürücü yazmazdan əvvəl oxumağa dəyər. TLS-i relay-də sonlandırın, hadisə işə çatmazdan əvvəl imzanı yoxlayın və çıxan əlaqəni izləyin, çünki düşmüş tunel heç göndərilməmiş hadisə kimi görünür. Relay-in sorğu gövdəsini bayt-bayt saxladığını da təsdiqləyin, çünki imza yoxlamaları yolda parse edilib yenidən kodlanmış JSON-da uğursuz olur.

Variant C: əvəzində repozitoriyanı polling edin

Polling gecikməni sadəliklə dəyişir və heç bir daxil olan yola ehtiyac duymur. Jenkins cədvəl üzrə polling edə bilər, ya da kiçik bir iş API-yə sorğu göndərib tanımadığı bir revizyon görəndə build başlada bilər.

curl -sS -u "$USER:$TOKEN" "https://api.github.com/repos/OWNER/REPO/commits?per_page=1"

Hər polling API çağırışı xərcləyir və push ilə build arasında gecikmə əlavə edir, bu da məşğul repozitoriyalarda və ortaq rate limit-lərdə görünür. O, həmçinin poller harada işləyirsə orada saxlanan etimadnamə tələb edir, buna görə tokeni yalnız oxumaq üçün repozitoriya girişi ilə məhdudlaşdırın və hər hansı digər sirr kimi döndərin. Bunu hadisə həcmi az olduqda və ya heç bir giriş nöqtəsi heç vaxt təsdiqlənməyəndə seçin və bunu iş təsvirində qeyd edin ki, sonra heç kim build-lərin niyə gecikdiyini soruşmasın.

Səhifə yükləməsini deyil, real çatdırmanı qəbul edin

Hansı variantı seçdiyinizdən asılı olmayaraq, qəbul testi mənbə platformasının göndərdiyi hadisədir, imtiyazlı noutbukdan açılan brauzer vərəqi deyil. Yetim budağa boş commit push edin və çatdırma cavab kodunu, relay jurnalını və ya polling işinin çıxışını bu ardıcıllıqla oxuyun. Endpoint-dən gələn 200 və build olmaması tetikleyici filtrinin səhv olduğunu bildirir; taymaut isə yolun hələ də bağlı olduğunu. Üç dizayndan hansının istifadə edildiyini qeyd edin, əks halda növbəti sazlama edən şəxs brauzer testini təkrarlayıb eyni dalana girəcək.

Eyni məntiqi ödəniş callback-lərinə və digər xarici bildirişlərə tətbiq edin: hər biri özəl tətbiqə öz yoluna ehtiyac duyur, hətta hər insanın artıq VPN sessiyası olsa belə. Çatdırma yolu tətbiqin dizaynına aiddir, şəbəkə haşiyəsinə deyil.

Əlaqəli məqalələr