الاختبار والنشر من CI
حلقة عملية من التحرير الأول إلى النشر التلقائي، مع ذكر حدود المحاكاة المحلية مقدمًا.
1. قم بتشغيله محليًا
يقوم aura functions serve بتشغيل ملفك باستخدام Deno وإعادة تشغيله عند الحفظ.
إنه خادم Deno عادي. بالمقارنة مع المنصة، فهي تحتوي على:
- لا توجد رؤوس للنظام الأساسي.
x-aura-roleوx-aura-user-idغائبون: أرسلهم بنفسك معcurl -Hلاختبار فروع الترخيص. - لا أسرار. قم بتمريرها إلى صدفتك:
STRIPE_SECRET_KEY=sk_test_… aura functions serve checkout. - بلا حدود. لا يتم تطبيق حدود الذاكرة والمهلة وحجم الجسم والمعدل.
- طلبات عادية. تقوم باستدعاء الوظيفة مباشرةً، لذا فإن
pathوmethodهما الخياران الخاصان بـcurl، وليس خياراتinvokeالخاصة بـ SDK.
لا يمكن لـ SDK استهداف هذا الخادم، لأن invoke يستدعي مسار النظام الأساسي. اختبر مسار SDK مقابل مشروع حقيقي، على النحو التالي.
2. اختبره على أرض الواقع
قم بإنشاء مشروع للتطوير (راجع وظيفتك الأولى)، وقم بنشر الوظيفة هناك، واختبرها من خلال SDK. يغطي هذا رؤوس هوية النظام الأساسي وحدوده وفئات الأخطاء.
نصائح:
- استخدم مشروعًا مخصصًا، ولا تقم أبدًا بالإنتاج، واحتفظ بمفاتيحه في أسرار CI الخاصة بك.
- حد معدل الاستدعاء هو 15 مكالمة ثم مكالمة واحدة في الثانية لكل IP. باعد بين اختباراتك، أو قم بتشغيلها بشكل تسلسلي.
3. النشر من CI
يتم تثبيت aura CLI من npm على نظام التشغيل macOS Apple Silicon ومن المصدر في مكان آخر، لذا تكون مهمة Linux CI أكثر بساطة مع HTTP API. يتم النشر باستخدام POST واحد لكل وظيفة، ويتم مصادقته باستخدام مفتاح service_role. تم تشغيل هذه الحلقة بالضبط مقابل مشروع حقيقي وتم الرد على الوظيفة بعد ذلك.
الحقائق التي تجعل هذا آمنًا للتشغيل في كل دفعة:
- يستبدل
POSTرمز دالة موجودة ويحتفظ بأسراره لأن الجسم لا يحتوي علىenv_vars. - الوظيفة عبارة عن ملف واحد: لا يتم شحن الواردات النسبية. قم بالحزمة أولاً إذا كنت تستخدم الوحدات المحلية.
- لا يوجد محفوظات الإصدارات على الخادم. سجل Git الخاص بك هو التراجع: للرجوع للخلف، قم بالتراجع عن الالتزام والسماح لـ CI بالنشر مرة أخرى.
ثم قم بإجراء اختبارات التكامل الخاصة بك على المشروع الذي قمت بنشره للتو، في المهمة التالية.
4. التطوير والتدريج والإنتاج
مشروع واحد هو بيئة واحدة. قم بإنشاء مشروع واحد لكل بيئة، لكل منها عنوان URL الخاص بها والمفاتيح الخاصة بها، ودع CI تختار الهدف:
| البيئة | مشروع | تم النشر متى |
|---|---|---|
| التنمية | واحد لكل مطور أو مشترك | حسب الطلب من الفرع |
| التدريج | my-app-staging | كل دفعة إلى main |
| الإنتاج | my-app | علامة الإصدار، بعد اجتياز اختبارات التدريج |
قم بتخزين AURA_PROJECT_URL وAURA_SERVICE_ROLE_KEY لكل بيئة GitHub، وقم بتعيين أسرار كل وظيفة على حدة في كل مشروع. لا شيء مشترك بين المشاريع.