مع تزايد حجم فريق الهواتف المحمولة والإصدارات الأسبوعية، من الضروري أن يكون لدينا خط أنابيب CI موثوق. نحتاج إلى أن نكون قادرين على إنشاء تطبيقاتنا واختبارها ونشرها في متجر التطبيقات ومتجر Google Play. كما نحتفظ بإصدارات معاينة داخلية لاختبار أحدث الميزات.
تعرف على كيفية استخدامنا لـ ClickUp و Fastlane و GitHub Actions لأتمتة عمليات التكامل المستمر (CI) والتسليم المستمر (CD).
حياة البق 🐜
لنبدأ بإلقاء نظرة سريعة على عملية إدارة الأخطاء وإصلاحها.
- يتم الإبلاغ عن خطأ (أو طلب ميزة) ويتم إنشاء مهمة في ClickUp
- يتم تعيين المهمة إلى مطور ويتم إصلاحها في PR مقابل فرع التجهيز.
- يقوم CI بتشغيل جميع الاختبارات، وإنشاء التطبيق، ونشر معاينة على الويب، وتحميل كل شيء إلى مهمة ClickUp.
- يقوم فريق ضمان الجودة لدينا بالتحقق من الإصلاح، وإذا كان جيدًا، يتم وضع علامة تم على المهمة.
- يتم دمج العلاقات العامة تلقائيًا في مرحلة الإعداد
- يتم إنشاء فرع التجهيز ونشره على TestFlight الداخلي لدينا.
- كل يوم أربعاء يتم إنشاء فرع إصدار وبنائه واختباره.
- في أيام الجمعة، نقوم بإنشاء إصدار على GitHub ويقوم CI بنشر الإصدار على App Store وPlay Store.
تحتوي مهمة ClickUp على كل ما يتعلق بالخطأ. نستخدم حالات مخصصة مثل "قيد التقدم" أو "مراجعة الكود" لتتبع الخطأ. تعمل سير عمل CI على تغيير الحالة تلقائيًا. تحتوي الحقول المخصصة على معلومات إضافية مثل من أبلغ عن الخطأ، ومن يعمل عليه، ومتى سيتم إصداره، وما إلى ذلك.
سير عمل العلاقات العامة 📜
الخطوتان الأوليان المذكورتان أعلاه لا تتعلقان بالفعل بالتكامل المستمر، ولكن الخطوة الثالثة مثيرة للاهتمام...
يعمل سير عمل التطوير لدينا مع أي علاقات عامة. فهو يتحقق من الأخطاء النحوية والتنسيق ويجري جميع الاختبارات قبل البدء في إنشاء منتجات Android وiOS.
عندما ينجح البناء، سينشر CI رسالة في المهمة المرتبطة. يمكن لمهندسي ضمان الجودة الانتقال إلى PR، وتنزيل عناصر البناء أو استخدام معاينة الويب.

رسالة CI آلية منشورة في مهمة ClickUp المرتبطة بعد إنشاء ناجح
إعداد Flutter على CI runner 🛠
نستخدم إجراء GitHub المعروف subosito/flutter-action لإعداد Flutter على CI. بشكل افتراضي، سيقوم بتثبيت أحدث إصدار مستقر من Flutter. لتجنب تعطيل سير عمل CI عند إصدار إصدار جديد من Flutter، يجب تحديد الإصدار يدويًا.
إذا كان لديك عدة سير عمل، فمن الأفضل تخزين إصدار flutter في ملف. نستخدم FLUTTER_VERSION في جذر المستودع.
هناك حل آخر سهل وهو تخزين إصدار Flutter كسرّ GitHub والوصول إليه باستخدام {{ secrets. FLUTER_VERSION }}.
معاينة الويب 🕸
بفضل قدرة Flutter على العمل على الويب، يمكننا إنشاء معاينة ويب كاملة الوظائف لطلبات السحب. باستخدام حزمة device_preview، يمكن ضبط حجم الجهاز وإعداداته.
أثبتت المعاينة أنها مفيدة للغاية ولا يستخدمها فريق ضمان الجودة لدينا فقط. كما يحبها المصممون ومديرو المنتجات لتكرار الميزات الجديدة بسرعة.

عبر Flutter
كيفية إنشاء معاينة ويب 🐶
للبدء، تأكد من أن تطبيقك متوافق مع Flutter web — لا يتم دعم جميع واجهات برمجة التطبيقات.
في تطبيقنا، على سبيل المثال، احتجنا إلى تعطيل الإشعارات الفورية ومآخذ الويب.
يعمل نموذج سير العمل هذا على إنشاء معاينة ويب لتطبيق Flutter الخاص بك وتحميله إلى سلة S3. نستخدم متغير بيئة ENABLE_DEVICE_PREVIEW لتعطيل device_preview في الإنتاج.
خطوة Fix base href ضرورية لأن المعاينة لن تكون في جذر المجموعة.
وبعض الأكواد لتمكين device_preview بشكل مشروط.
تعد متغيرات البيئة أداة قوية وتسمح لخوارزمية Flutter's tree shaking بإسقاط كود التصحيح لإصدارات الإصدار.
Fastlane 💨
يعمل Fastlane على تبسيط عملية إنشاء تطبيقات Flutter وتوقيعها ونشرها بشكل كبير. فهو يدير شهاداتنا وملفات تعريف التزويد والإعدادات الأخرى. نستخدم أسرار GitHub لتخزين كلمات المرور والرموز بشكل آمن.
إجراءات Fastlane المفيدة:
- fastlane match لإنشاء وتخزين مفاتيح وملفات تعريف iOS في مستودع GitHub
- build_app لإنشاء تطبيقات iOS و Android
- upload_to_testflight والتسليم لنشر إصدارات iOS
- upload_to_play_store لنشر إصدارات Android
نموذج بناء تطوير iOS 🍏
لا تنسَ setup_ci، فهي ستحميك من الأخطاء الغريبة 👾. تعرف على المزيد حول Fastlane لتطبيقات Flutter.
توقيع Android 🔒
أسهل طريقة لتوقيع إصدارات Android بأمان هي تخزين الرموز المميزة كأسرار GitHub واستخدام متغيرات البيئة ومفتاح مؤقت. jks تم إنشاؤها بواسطة CI:
نقوم بتخزين المفتاح jks كسلسلة مشفرة بـ base64 في Github Secrets ونقوم بفك تشفيرها في سير العمل:
إصدار وسير عمل الإنتاج 🚀
يعمل سير العمل قبل الإصدار على الفروع التي تبدأ بـ release/v. ويقوم بإزالة جميع عمليات تصحيح الأخطاء والرموز الداخلية للتأكد من أننا نختبر نفس الرموز التي سيتم إصدارها.
بالإضافة إلى ذلك، ينشر سير العمل قبل الإصدار على قنوات Slack المختلفة لإعلام فرق ضمان الجودة والتسويق بإصدار جديد باستخدام webhooks الواردة.
بعد اختبار كل شيء بدقة، نقوم بإنشاء إصدار على GitHub يؤدي إلى تشغيل سير عمل الإنتاج. يقوم هذا الإصدار بإنشاء التطبيق وتوقيعه بشهادات الإنتاج وإرساله إلى متجر التطبيقات.
المزيد من الحيل لـ CI الخاص بك 🦾
إذا كنت تستخدم مشغل الدفع لـ GitHub Actions، فمن المحتمل أن تواجه مشاكل إذا كان هناك عدة عمليات دفع إلى نفس الفرع في تتابع سريع. سيبدأ أكثر من مثيل واحد من سير العمل ويستهلك دقائق البناء أو يتسبب في مشاكل أخرى.
- نوصي باستخدام إجراء إلغاء سير العمل لإلغاء جميع الحالات السابقة لسير العمل.
- إذا كنت تبحث عن حل سهل وقابل للصيانة لإنشاء أرقام بناء متسلسلة، جرب Build Number Generator. يمكنك أيضًا استخدام GITHUB_RUN_ID ولكن لا يمكن تخصيصه.
- تحقق من تطبيق ClickUp GitHub للاطلاع على الفروع والالتزامات وحالة GitHub مباشرة في مهام ClickUp الخاصة بك. استخدم ClickUp Automations أو واجهة برمجة التطبيقات العامة لـ ClickUp للحصول على أتمتة متقدمة.
ملخص 🍩
إن بناء CI الخاص بك هو عملية ممتعة. من السهل البدء ويمكنك تطويره أثناء العمل. يعمل CI لدينا وفقًا لإحدى القيم الأساسية لـ ClickUp: التقدم نحو الكمال. نحن نعمل باستمرار على تحسين CI لفرق ضمان الجودة والهندسة لدينا.
يعد الجمع بين ClickUp و GitHub Actions و Fastlane قويًا للغاية ويسمح ببناء خط أنابيب CI/CD مرن وآلي بالكامل في أقل من ساعة. جربه!
لدينا العديد من الموضوعات الرائعة قيد الإعداد، لذا تابع مدونة ClickUp Engineering! 🦄

