آپ VPN کے ذریعے Jenkins کھول سکتے ہیں اور پھر بھی دیکھ سکتے ہیں کہ GitHub ناکام ویب ہک کی اطلاع دیتا ہے، کیونکہ یہ دو مختلف مالکان کے ساتھ دو مختلف کنکشن ہیں۔ براؤزر اُس سرنگ سے گزرتا ہے جس پر آپ کے لیپ ٹاپ نے بات چیت کی؛ GitHub کی ترسیل کی سروس عوامی انٹرنیٹ سے شروع ہوتی ہے اور نجی نیٹ ورک تک اُس کا کوئی راستہ نہیں۔ ریپوزٹری تک رسائی اسے نہیں بدلتی، چاہے Jenkins خود اسی ریپوزٹری سے بغیر مشکل کے لے سکے۔ کوئی اندراج، ریلے یا پولنگ منتخب کریں، پھر وہ راستہ جانچیں جس سے واقعہ واقعی گزرتا ہے۔

براؤزر سیشن صرف ایک سمت ثابت کرتا ہے

VPN کنکشن ایک سوال کا جواب دیتا ہے: کیا یہ لیپ ٹاپ اندرونی میزبان تک پہنچ سکتا ہے۔ ویب ہک کی ترسیل دوسرا سوال پوچھتی ہے: کیا کوئی بیرونی سروس اُس میزبان سے کنکشن کھول سکتی ہے۔ Jenkins کا ریپوزٹری سے لینا باہر جانے والا ٹریفک ہے اور اندر آنے والی رسائی کے بارے میں کچھ نہیں کہتا۔ اپنے خاکے میں دونوں سمتیں الگ سطروں پر رکھیں، یہ بھی کہ کون سا فریق ہر ایک کو شروع کرتا ہے۔

کچھ بھی بدلنے سے پہلے ترسیل کا ریکارڈ پڑھیں۔ وقت کا ختم ہونا، کنکشن کا ری سیٹ ہونا اور قبول شدہ درخواست جو کسی کام سے نہیں ملی، ان کے تین مختلف مالک ہیں: نیٹ ورک، پراکسی اور ٹرگر کی ترتیب۔

آپشن A: تنگ اینڈ پوائنٹ کھولیں

اگر ادارہ پہلے ہی منظور شدہ اندراج شائع کرتا ہے تو ڈیش بورڈ کی بجائے ویب ہک کا راستہ کھولیں۔ عام طور پر اس کا مطلب ایک ریورس پراکسی اصول ہے جو ہک URL پر POST قبول کرتا ہے اور انہیں Jenkins تک بھیجتا ہے، جبکہ انتظامی انٹرفیس باہر سے ناقابل رسائی رہتا ہے۔

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

وہ امتحان VPN رسائی کے بغیر نیٹ ورک سے چلائیں، کیونکہ سرنگ کے اندر سے کامیابی کچھ ثابت نہیں کرتی۔ اینڈ پوائنٹ کو مشترکہ راز کے بغیر درخواستیں مسترد کرنی چاہئیں، جسے GitHub دستخط ہیڈر کے طور پر بھیجتا ہے، اور صرف وہی ایک راستہ اور طریقہ قبول کرنا چاہیے جو آپ نے شائع کیا۔ عوامی Jenkins کنسول ویب ہک کا حل نہیں ہے؛ یہ اگلے اسکینر کا انتظار کرنے والا واقعہ ہے۔ اصول کو اتنا تنگ رکھیں کہ باقی ایپلیکیشن اپنے پہلے کے رسائی کنٹرول برقرار رکھے۔

آپشن B: ریلے سے سمت الٹیں

جہاں اندر آنے والا انکشاف منظور نہیں ہوگا، وہاں نیٹ ورک کے اندر ایک چھوٹا کلائنٹ ریلے کی طرف باہر جانے والا کنکشن رکھ سکتا ہے اور بھیجے گئے واقعات وصول کر سکتا ہے۔ تب ریلہ ترسیل کے راستے کا حصہ بن جاتا ہے، اس لیے اس کی دستیابی اور توثیق بلڈ کے کام جتنی ہی اہم ہیں۔

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

فائر وال کے پیچھے ویب ہکس کے بارے میں Jenkins کی رہنمائی اس شکل کو بیان کرتی ہے، اور اپنا فارورڈر لکھنے سے پہلے اسے پڑھنا مناسب ہے۔ ریلے پر TLS ختم کریں، واقعہ کے کام تک پہنچنے سے پہلے دستخط کی تصدیق کریں، اور باہر جانے والے لنک کی نگرانی کریں، کیونکہ گرنے والی سرنگ بالکل ایسے ہی دکھتی ہے جیسے کبھی نہ بھیجا گیا واقعہ۔ یہ بھی تصدیق کریں کہ ریلہ درخواست کے جسم کو بائٹ بہ بائٹ محفوظ رکھتا ہے، کیونکہ دستخط کی جانچ راستے میں تجزیہ اور دوبارہ انکوڈ کی گئی JSON پر ناکام ہوتی ہے۔

آپشن C: بجائے اس کے ریپوزٹری پول کریں

پولنگ تاخیر کو سادگی سے بدلتی ہے اور اسے اندر آنے والے راستے کی ضرورت ہی نہیں۔ Jenkins شیڈول کے مطابق پول کر سکتا ہے، یا ایک چھوٹا کام API سے پوچھ سکتا ہے اور ناواقف نظرثانی دیکھ کر بلڈ شروع کر سکتا ہے۔

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

ہر پولنگ API کالز خرچ کرتی ہے اور push اور بلڈ کے درمیان تاخیر بڑھاتی ہے، جو مصروف ریپوزٹریوں اور مشترکہ رفتار کی حدوں پر نظر آتی ہے۔ اسے وہاں محفوظ اسناد بھی درکار ہوتی ہیں جہاں پولر چلتا ہے، اس لیے ٹوکن کو ریپوزٹری تک صرف پڑھنے کی رسائی تک محدود رکھیں اور کسی بھی دوسرے راز کی طرح اسے بدلتے رہیں۔ یہ تب منتخب کریں جب واقعات کی مقدار کم ہو یا جب کوئی اندراج کبھی منظور نہ ہو، اور کام کی تفصیل میں یہ لکھیں تاکہ بعد میں کسی کو حیرت نہ ہو کہ بلڈ کیوں پیچھے رہ رہے ہیں۔

صفحے کی لوڈنگ نہیں، حقیقی ترسیل قبول کریں

آپ نے جو بھی آپشن چنا ہو، قبولیت کا امتحان ماخذ پلیٹ فارم کا بھیجا ہوا واقعہ ہے، مراعات یافتہ لیپ ٹاپ سے کھلا براؤزر ٹیب نہیں۔ اسکریچ برانچ میں خالی commit push کریں اور ترسیل کا ردعمل کوڈ، ریلے لاگ یا پولنگ کام کی آؤٹ پٹ اسی ترتیب سے پڑھیں۔ اینڈ پوائنٹ سے 200 اور بلڈ نہ ہونا بتاتا ہے کہ ٹرگر فلٹر غلط ہے؛ وقت کا ختم ہونا بتاتا ہے کہ راستہ اب بھی بند ہے۔ درج کریں کہ تین ڈیزائنوں میں سے کون سا استعمال ہو رہا ہے، ورنہ اگلا ڈیبگ کرنے والا براؤزر کا امتحان دہرائے گا اور اسی بند گلی میں پہنچے گا۔

یہی منطق ادائیگی کے کال بیکس اور دیگر بیرونی اطلاعات پر لاگو کریں: ہر ایک کو نجی ایپلیکیشن میں اپنا راستہ چاہیے، چاہے ہر شخص کے پاس پہلے سے VPN سیشن ہو۔ ترسیل کا راستہ ایپلیکیشن کے ڈیزائن کا حصہ ہے، نیٹ ورکنگ کے حاشیے کا نہیں۔

متعلقہ مضامین