सभी लेख
repository इवेंट वेबहुक के रूप में एक लोकल डेवलपमेंट लैपटॉप में प्रवाहित होते हुए।
GitHubwebhook debugginglocal testingCI/CD

GitHub वेबहुक को लोकल टेस्ट करें: पूरी गाइड

GitHub वेबहुक की लोकल टेस्टिंग आपको staging पर डिप्लॉय किए बिना push, pull request, issue और workflow इवेंट अपनी मशीन पर पाने देती है। एक localhost टनल चलाएँ, अपनी GitHub App या repository सेटिंग्स में HTTPS URL रजिस्टर करें, और पूर्ण सिग्नेचर सत्यापन के साथ handler डीबग करें।

GitHub वेबहुक को सार्वजनिक endpoint क्यों चाहिए

GitHub वेबहुक इवेंट को एक कॉन्फ़िगर किए URL पर HTTP POST अनुरोध के रूप में भेजता है। 127.0.0.1 पर आपकी लोकल मशीन GitHub के सर्वर से पहुँच योग्य नहीं है। एक localhost टनल वह सार्वजनिक HTTPS endpoint देता है जो GitHub को चाहिए।

GitHub Apps बनाम repository वेबहुक

repository वेबहुक

Settings → Webhooks में प्रति repository कॉन्फ़िगर किए जाते हैं। फ़ीचर डेवलपमेंट के दौरान एक ही repo के इवेंट handler टेस्ट करने के लिए अच्छे।

GitHub App वेबहुक

आपकी GitHub App सेटिंग्स में ऐप-स्तर पर कॉन्फ़िगर किए जाते हैं। कई repository या organization को सेवा देने वाले इंटीग्रेशन बनाते समय ज़रूरी।

दोनों डिलीवरी प्रकार X-Hub-Signature-256 हेडर के माध्यम से HMAC-SHA256 सिग्नेचर सत्यापन का उपयोग करते हैं।

चरण-दर-चरण: GitHub वेबहुक लोकल टेस्टिंग

  1. वेबहुक endpoint (उदाहरण /api/webhooks/github) के साथ अपना लोकल ऐप शुरू करें।
  2. सार्वजनिक HTTPS URL पाने के लिए npx portpreview 3000 चलाएँ।
  3. GitHub में, टनल URL और अपना वेबहुक path payload URL के रूप में जोड़ें।
  4. content type को application/json पर सेट करें और पाने वाले इवेंट चुनें।
  5. एक वेबहुक secret जेनरेट करें और इसे अपने लोकल environment variables में रखें।
  6. इवेंट ट्रिगर करें (कमिट push करें, PR खोलें, issue बनाएँ) और डिलीवरी जाँचें।
  7. सत्यापित करें कि आपका handler सिग्नेचर मान्य करता है और 10 सेकंड में 2xx प्रतिक्रिया देता है।

GitHub वेबहुक सिग्नेचर लोकल सत्यापित करें

GitHub हर payload को आपके वेबहुक secret से साइन करता है। आपके handler को:

  • JSON पार्स करने से पहले कच्चा अनुरोध body पढ़ना चाहिए।
  • अपने secret से HMAC-SHA256 गणना करनी चाहिए।
  • स्थिर-समय तुलना से X-Hub-Signature-256 हेडर के साथ मिलान करना चाहिए।

मूल हेडर सुरक्षित रखने वाले टनल टूल आपको असली सत्यापन पथ टेस्ट करने देते हैं। लोकल डेवलपमेंट के दौरान कभी भी सिग्नेचर जाँच न छोड़ें।

लोकल टेस्ट करने योग्य इवेंट

  • push — CI ट्रिगर लॉजिक, branch protection हुक, डिप्लॉयमेंट pipeline।
  • pull_request — रिव्यू ऑटोमेशन, label बॉट, merge जाँच।
  • issues — issue tracker सिंक, असाइनमेंट workflow।
  • installation — GitHub App इंस्टॉल/अनइंस्टॉल जीवनचक्र।
  • workflow_run — CI-बाद ऑटोमेशन और artifact प्रोसेसिंग।

विफल GitHub वेबहुक डिलीवरी डीबग करें

GitHub विफल डिलीवरी को एक्सपोनेंशियल backoff के साथ फिर से भेजता है। लोकल टेस्टिंग में सामान्य विफलताएँ:

  • handler timeout (GitHub 10 सेकंड में प्रतिक्रिया की अपेक्षा करता है)।
  • सत्यापन से पहले body पार्स करने से सिग्नेचर बेमेल।
  • GitHub के फिर से प्रयास करते समय टनल सत्र समाप्त।
  • ग़लत इवेंट फ़िल्टर — handler ऐसे इवेंट पाता है जो वह प्रोसेस नहीं करता।

नए कमिट push किए बिना विफल डिलीवरी को फिर से टेस्ट करने के लिए वेबहुक रीप्ले का उपयोग करें।

GitHub वेबहुक टेस्टिंग बनाम smee.io

smee.io लोकल डेवलपमेंट के लिए एक लोकप्रिय GitHub वेबहुक प्रॉक्सी है। यह बुनियादी फ़ॉरवर्डिंग में अच्छा है पर इसमें अंतर्निहित अनुरोध जाँच और रीप्ले नहीं है। PortPreview टनलिंग को कैप्चर और रीप्ले के साथ एक टूल में जोड़ता है। व्यापक वेबहुक डीबगिंग गाइड के लिए देखें वेबहुक को लोकल कैसे डीबग करें

अंतर्निहित अनुरोध दृश्यता के साथ GitHub वेबहुक टेस्टिंग के लिए PortPreview वेटलिस्ट में शामिल हों

अक्सर पूछे जाने वाले प्रश्न

मैं localhost पर GitHub वेबहुक कैसे टेस्ट करूँ?
PortPreview के साथ एक localhost टनल शुरू करें, HTTPS URL को अपनी GitHub repository या App सेटिंग्स में वेबहुक payload URL के रूप में जोड़ें, फिर इवेंट ट्रिगर करें और हर डिलीवरी जाँचें।
क्या GitHub सिग्नेचर सत्यापन टनल के साथ काम करता है?
हाँ। PortPreview X-Hub-Signature-256 हेडर और कच्चा अनुरोध body सुरक्षित रखता है ताकि HMAC सत्यापन production जैसा ही काम करे।
अगर मेरा लोकल handler GitHub के लिए बहुत धीमा है तो क्या होगा?
GitHub 10 सेकंड में 2xx प्रतिक्रिया की अपेक्षा करता है, वरना डिलीवरी को विफल चिह्नित करके फिर से प्रयास करता है। लंबे कार्यों के लिए async प्रोसेसिंग का उपयोग करें और तुरंत 202 लौटाएँ।