Orbit
تفعيل النشر عبر Deploy Hooks
A deploy hook is a secret URL that queues a new deployment when something sends it an HTTP POST. There is no authentication header: the secrecy of the URL is the authentication. Use hooks to let a…
تشغيل عمليات النشر عبر Deploy Hooks
أداة deploy hook هي عنوان URL سري يطلب نشر جديد عند إرسال طلب HTTP POST إليه. لا توجد رأس مصادقة: سرية عنوان URL هي المصادقة. استخدم hooks لتسمح لـ CMS بدون واجهة مستخدم أو مهمة cron أو خط أنابيب CI أو أي webhook آخر بإعادة بناء مشروعك دون الحاجة إلى git push.
مكان العثور على Deploy Hooks
يملك Hooks علامة تبويب خاصة به: افتح مشروعك في Kapsule Orbit وانقر على Hooks على /orbit/<project-id>/hooks.
تظهر لوحة Deploy hooks نفسها أيضاً في منتصف علامة تبويب Settings الخاصة بالمشروع، حتى تتمكن من إدارتها من أي مكان.

إنشاء Deploy Hook
- افتح Kapsule Orbit ثم مشروعك ثم Hooks.
- انقر على Add deploy hook.
- أدخل Hook name سيكون منطقياً بعد ستة أشهر. يقترح النص التوضيحي الشكل: "Contentful publish" أو "Nightly cron".
- اختر Target environment. الافتراضي هو Production (default). إذا كان لديك مشروع يحتوي على بيئة staging، يمكنك توجيه hook نحو staging بدلاً من ذلك.
- انقر على Create hook.
يظهر hook في القائمة مع عنوان URL الخاص به وزر Copy URL وزر Delete hook.
عنوان URL للـ Hook
تبدو عناوين URL للـ hooks كما يلي:
https://kpanel.kapsulehost.com/api/orbit/hooks/<token>
الرمز المميز هو سر فريد يتم إنشاؤه عند إنشاء hook.
تعامل مع عنوان URL للـ hook تماماً مثل مفتاح API. يمكن لأي شخص لديه يمكنه تشغيل نشر مشروعك، وليس أي من بوابات نشر Kapsule Orbit ستوقفهم: قفل النشر والموافقة المطلوبة وفحوصات CI المطلوبة ونجاح staging المطلوب ينطبق على النشر الذي يتم تشغيله عبر push فقط، و hook يمرر مباشرة. لا تلصق أبداً عنوان URL للـ hook في مستودع عام أو مستند مشترك أو لقطة شاشة أو تذكرة دعم.
تشغيل Hook
أرسل طلب POST. لا يلزم وجود body أو headers.
curl -X POST \
https://kpanel.kapsulehost.com/api/orbit/hooks/<your-token>
يرد Kapsule Orbit مع HTTP 202 ومعرّف النشر. يظهر النشر على علامة تبويب Deployments خلال بضع ثوان.
تقبل نقطة النهاية POST فقط. لن يؤدي طلب GET إلى تشغيل نشر. بعض تكاملات webhook الأقدم تستخدم GET افتراضياً، لذا تحقق من الطريقة إذا لم يتم تشغيل hook تم تكوينه.
ما يقوم Hook بنشره فعلياً
يحل hook بيئته المستهدفة (التي اخترتها أو بيئة الإنتاج الخاصة بالمشروع)، ويقرأ فرع تلك البيئة، ويطلب من مزود git الخاص بك آخر commit للفرع الحالي. ثم يطلب نشر تلك الـ commit.
يترتب على ذلك ثلاث عواقب جديرة بالاهتمام:
- يقوم hook دائماً بنشر فرع الرأس. لا يمكنك تمرير commit SHA أو اسم فرع في request body؛ يتم تجاهل request body بالكامل.
- يحتاج hook إلى اتصال مزود يعمل بشكل صحيح. إذا قطعت اتصال GitHub أو GitLab أو Bitbucket، فلن يتمكن hook من قراءة رأس الفرع وسيفشل مع خطأ بدلاً من نشر كود قديم.
- يعيد hook تشغيل البناء الكامل. إنه ليس تراجعاً وليس ترقية؛ بل هو بناء جديد لكل ما هو موجود حالياً في الفرع.
الاتصالات المتكررة والمتداخلة
يتعامل Kapsule Orbit مع انفجارات استدعاءات hook بشكل معقول بدلاً من طلب بناء لكل منها.
- إذا كان نشر نفس commit بالفعل جارياً على تلك البيئة، يعيد hook النشر الموجود ويعلم الاستجابة كمكررة. لا يبدأ بناء ثانٍ.
- إذا كان البناء قيد التشغيل لـ commit مختلفة على تلك البيئة، يتم إلغاؤه تلقائياً واستبداله بالبناء الجديد، حتى لا تدفع ثمن بناء الذي أصبح إنتاجه قديماً بالفعل.
يجعل هذا hooks آمنة لـ CMS تطلق webhook لكل إدخال منشور. ينتج عن نشر ستة صفحات في دقيقة واحدة بناء واحد وليس ستة، ولا تحرق ست دقائق بناء.
توصيل CMS بدون واجهة مستخدم
تتمتع معظم CMSes بدون واجهة مستخدم بميزة "webhook on publish". النمط هو نفسه دائماً: وجّه webhook نحو عنوان URL للـ hook الخاص بك، استخدم POST، واترك إعدادات المصادقة فارغة.
Contentful
- انتقل إلى Settings ثم Webhooks ثم Add webhook.
- عيّن عنوان URL إلى عنوان URL للـ hook الخاص بك في Kapsule Orbit.
- عيّن الطريقة على POST.
- عيّن المحفز على Publish أو أياً من أحداث المحتوى التي يجب أن تعيد بناء الموقع.
- احفظ.
Sanity
في لوحة معلومات مشروعك، انتقل إلى API ثم Webhooks ثم Create webhook. عيّن عنوان URL إلى عنوان URL للـ hook الخاص بك والطريقة على POST واختر مجموعة البيانات وأحداث المحفز.
Prismic
في لوحة المعلومات، انتقل إلى Settings ثم Webhooks وأضف عنوان URL للـ hook الخاص بك. يستدعيه Prismic عند نشر كل مستند.
توصيل مهمة Cron أو خط أنابيب CI
أي جدولة يمكنها إجراء طلب HTTP ستفي بالغرض:
# crontab: rebuild every night at 2am
0 2 * * * curl -fsS -X POST https://kpanel.kapsulehost.com/api/orbit/hooks/<your-token>
بالنسبة إلى CI، فإن deploy hook هي الخيار الأبسط عندما تريد خط الأنابيب الخاص بك أن يقرر ما إذا كان النشر يحدث. إنهُ الأسلوب الموصى به لـ Bitbucket Pipelines لأن بوابات إعدادات CI المطلوبة في Kapsule Orbit على أسماء وظائف GitHub Actions أو خط أنابيب GitLab وليس على Bitbucket.
إذا كنت بحاجة إلى أكثر من "نشر فرع الرأس"، استخدم رمز API بدلاً من hook. Kapsule Orbit ثم Tokens ينشئ رموز bearer ذات نطاق لـ CI/CD مع REST API موثق وسير عمل GitHub Actions جاهز. تم تضمين الوصول إلى API في خطة Apex.
إعادة البناء في جدول زمني دون Hook
إذا كل ما تريده هو إعادة بناء دورية، فأنت لا تحتاج إلى hook على الإطلاق. Scheduled rebuild في Settings تحت Runtime تعيد بناء الإنتاج تلقائياً كل ساعة أو 6 ساعات أو 12 ساعة أو يومياً أو كل يومين أو أسبوعياً. تم تصميمه بالضبط لحالة موقع مدفوع بـ CMS ولا توجد عنوان URL سري يجب حمايته.
التحقق من نشاط Hook
تعرض كل صف hook عدد المرات التي تم استخدامها ومتى تم استخدامها آخر مرة، في النموذج "Used 14 times, last 3 Jul". هذه هي أسرع طريقة للتأكد من أن CMS الخاص بك يستدعي hook عندما تعتقد أنه يجب أن يفعل ذلك.
إذا لم يكن العدد يزداد، فإن المشكلة تكون على الجانب المستدعي: تحقق من أن الطريقة هي POST وأن عنوان URL دقيق وأن التكامل لا يفشل بصمت على TLS أو خطأ جدار حماية.
حذف Hook
انقر على Delete hook على الصف وأكد. سيحذرك الحوار من أن أي خدمة تستخدمه ستتوقف عن العمل، وهذا بالضبط ما يحدث.
لا توجد طريقة لتدوير رمز hook في المكان. إذا تسرب عنوان URL، فإنك تحذف hook وتنشئ واحداً جديداً، ثم تحدّث كل نظام استخدم عنوان URL القديم. يبدأ الحذف في الحال فور الحذف، لذا خطط للتبديل قبل الحذف وليس بعده.
استكشاف الأخطاء وإصلاحها
لا يحدث شيء عند استدعاء hook. تحقق من أن الطريقة هي POST. تحقق من عنوان URL حرفاً حرفياً بما في ذلك الرمز المميز. تحقق من عدد استخدام hook على علامة تبويب Hooks: إذا لم تزيد، فإن الطلب لم يصل أبداً.
يعيد hook خطأ حول آخر commit. لم يتمكن Kapsule Orbit من قراءة رأس الفرع من مزود git الخاص بك. أعد توصيل المزود من Kapsule Orbit ثم New project ثم Reconnect وأكد أن المستودع لا يزال يمكن الوصول إليه.
يعيد hook خطأ حول البيئة المستهدفة. البيئة التي أشار إليها hook لم تعد موجودة، غالباً لأن بيئة staging تم حذفها. احذف hook وأنشئ واحداً جديداً لبيئة نشطة.
يطلق hook لكن النشر هو نفس المشروع الأخير. تلك هي سلوك إلغاء التكرار: رأس الفرع لم يتغير، لذا لا يوجد شيء جديد للبناء. ادفع commit أو استخدم Deploy now إذا كنت تريد على وجه التحديد إعادة بناء نفس commit.
قراءة ذات صلة
- نشر مشروعك لبوابات النشر وأيهما تتجاوزه hooks
- توصيل مستودع Bitbucket لحالة استخدام CI التي تحلها hooks
- متغيرات البيئة لأن بناء يتم تشغيله عبر hook يقرأ نفس التكوين الذي يقرأه أي بناء آخر