5.4النشر (deployment) والتكامل/التسليم المستمر (CI/CD) (GitHub Actions, cloud)
الأساسي في 30 ثانية
- تكامل مستمر (CI) حارس : عند كل دفع، checkout ← install ← ruff + pytest — الأحمر يحجب، والأخضر يأذن.
- سلم مُصدَرا : صورة Docker في السجل أو منصة متصلة بالمستودع — كل وضع على الخط قابل للتتبع.
- إنتاج رصين : أسرار خارج YAML، وسجلات و/health، وتراجع مجرب — النشر هو القدرة على العودة.
حالة مصغرة متسلسلة — نبيل ينشر على الخط في الجزائر
يدور تحليل نبيل المغلف بالحاويات جيدا — لكن فقط على أجهزة الفريق في الجزائر. وضعه على الخط : مستودع Git متصل، وسير عمل GitHub Actions يطلق ruff و pytest عند كل دفع، وصورة مُصدَرة مسلمة على منصة متصلة بالمستودع، وسجلات ونقطة صحة في مكانها. الحلقة الأخيرة للحالات 5.1-5.3 — أغلق نبيل من الشيفرة الاحترافية إلى التطبيق الحي.
الحلقة الأخيرة للحالات 5.1-5.3 — أغلق نبيل التصميم وغير المتزامن و Docker بالنشر في الإنتاج.
1. التكامل المستمر (CI) : الاختبار عند كل دفع
سير عمل GitHub Actions هو الحارس : checkout ← تثبيت بايثون ← pip install -r requirements ← ruff + pytest. كل دفع مثبت في دقائق : الأحمر يحجب الدمج، والأخضر يأذن. التكامل المستمر (CI) ليس خيارا « سنضعه لاحقا » — إنه في مكانه من أول اختبار. يثير نبيل عمدا فشلا لرؤية التنبيه : يوم يكسر حقا، سيعرف قراءة الأحمر.
تثبت الشارة الخضراء في README الصرامة : أسلوب + اختبارات عند كل تغيير، دون تدخل بشري.
2. التسليم : صورة أو منصة
طريقان متكاملان. صورة Docker المدفوعة إلى السجل (انظر 5.3) : قابلة للتتبع، وقابلة لإعادة الإنتاج، وتُنشر حيث نريد. أو منصة متصلة بالمستودع (نوع Render و Railway و Fly ومكافئاتها) : كل دفع أخضر يحدث الموقع تلقائيا — بسيط للبدء. الأسرار في أسرار المستودع، أبدا في YAML : الإنتاج يُعَد، ولا يُرمَّز. يقارن نبيل العروض لحظة الاختيار (تتطور الصيغ) ويستهدف الطريق البسيط أولا، والتحكم بعد.
في الحالتين، كل تسليم مُصدَر (وسوم، SHA) : نعرف بالضبط ما هو على الخط.
3. دنيا الإنتاج : سجلات وصحة وتراجع
النشر = القدرة على العودة. الدنيا : سجلات منظمة (logging)، ونقطة /health للمراقبة، وإصدارات للعودة إلى الوراء. دون تراجع مجرب، كل وضع في الإنتاج قفزة دون مظلة. جرب نبيل العودة قبل الليلة الكبرى : يوم حادث، استعاد بدل الارتجال — وجعل اختيار البنية والوصول تُصدِّق عليه مديرية الأنظمة (DSI) قبل كشف بيانات حقيقية.
دون هذا الثلاثي، لا ننشر : نراهن.
🔎 مثال ملموس — سير عمل نبيل
أسلوب + اختبارات عند كل دفع، وشارة خضراء إثباتا.
name: ci
on: [push]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with: {python-version: "3.12"}
- run: pip install -r requirements.txt
- run: ruff check . && pytest -q
القراءة : أسلوب + اختبارات عند كل دفع — الأحمر يحجب الدمج.
الدرس : تثبت الشارة الخضراء في README الصرامة باستمرار.
مفردات القسم
- النشر
- جعل التطبيق متاحا على الخط، خارج جهازكم.
مثال بسيط: غادر تحليل نبيل localhost إلى عنوان عمومي.
ما ليس كذلك: سكريبت لا يدور إلا على حاسوبه.
رد فعل: هل تطبيقي قابل للوصول خارج جهازي ؟
- التكامل المستمر (CI)
- اختبار كل تغيير تلقائيا، من أول اختبار.
مثال بسيط: يطلق كل دفع لنبيل ruff و pytest.
ما ليس كذلك: اختبارات تُطلَق يدويا حين نتذكر.
رد فعل: هل يمكن أن يمر دفع دون إثبات ؟
- خط الأنابيب (pipeline)
- سلسلة خطوات مؤتمتة (اختبارات، بناء، نشر) تُثار عند كل دفع.
مثال بسيط: سير عمل نبيل : التثبيت والمراقبة والاختبار.
ما ليس كذلك: وضع على الخط يدوي بنسخ-لصق.
رد فعل: هل تسليمي قابل لإعادة الإنتاج ؟
- GitHub Actions
- خطوط أنابيب موصوفة بـ YAML مُصدَر في .github/workflows.
مثال بسيط: ملف ci.yml عند نبيل، مقروء كشيفرة.
ما ليس كذلك: خادم غامض ينشر لا نعرف كيف.
رد فعل: هل خط أنابيب مُصدَر وقابل لإعادة القراءة ؟
- التراجع (rollback)
- العودة إلى الإصدار السابق، مجربة قبل الحاجة.
مثال بسيط: استعاد نبيل الإصدار السابق بعد حادث.
ما ليس كذلك: إصلاح بذعر مباشرة في الإنتاج.
رد فعل: هل جربت عودتي إلى الوراء ؟
في التطبيق — أتمتة الاختبارات والنشر
- صدروا مشروعكم مع Git وادفعوه إلى مستودع GitHub (git init, add, commit, push).
- أنشئوا سير عمل GitHub Actions (.github/workflows/ci.yml) يثبت الاعتمادات ويطلق pytest عند كل دفع.
- تحققوا في تبويب « Actions » أن خط الأنابيب يُنفَّذ ويمر بالأخضر ؛ وأثيروا فشل اختبار لرؤية التنبيه.
- انشروا التطبيق على منصة سحابة (Render/Railway) متصلة بالمستودع : كل دفع يحدث الموقع تلقائيا.
نص جاهز للقول — إعلان وضع الخط
« تحليلنا جاهز للخروج من localhost : أضع التكامل المستمر من أول اختبار — ruff و pytest عند كل دفع، والأحمر يحجب. أسلم مُصدَرا عبر المنصة المتصلة بالمستودع، والأسرار في أسرار المستودع، والسجلات ونقطة الصحة في مكانها، والتراجع مجرب. وقبل كشف بيانات حقيقية، أجعل البنية والوصول تُصدِّق عليهما مديرية الأنظمة. »
يُقال للمسؤول لتمرير وضع الخط ودائرة مديرية الأنظمة على البيانات الحساسة.
نموذج نسخ-لصق — سير عمل CI بايثون عام
name: ci
on: [push]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with: {python-version: "3.12"}
- run: pip install -r requirements.txt
- run: ruff check . && pytest -q
مستقل / ميزانية صغيرة
نبيل وحده : يكفي سير العمل الأدنى (ruff + pytest) — التكامل المستمر المجاني للمستودع يحرس الإنتاج.
مقاولة صغيرة / فريق مصغر
شارة خضراء + أحمر يحجب الدمج : لا أحد يسلم دون إثبات، حتى مستعجلا.
مقاولة متوسطة في الجزائر
يجعل نبيل المضيف والوصول والنسخ الاحتياطية تُصدِّق عليها مديرية الأنظمة في الجزائر قبل كشف بيانات حقيقية.
فريق يبدأ
ثنائي : أحدهما يكتب سير العمل، والآخر يتحقق من الأسرار و /health والتراجع ؛ ومراجعة قبل أول إنتاج.
✓ ممارسات جيدة
- تكامل مستمر من أول اختبار : الأخضر يأذن، والأحمر يحجب.
- الأسرار في أسرار المستودع، أبدا واضحة في YAML.
- تراجع مجرب قبل الإنتاج : النشر هو القدرة على العودة.
✗ أخطاء شائعة
- « سنضع التكامل المستمر لاحقا » (تذهب الانحدارات صمتا).
- أسرار واضحة في YAML المُصدَر.
- النشر دون عودة ممكنة ولا مراقبة (/health، سجلات).
النقاط الأساسية
- يجعل النشر التطبيق متاحا على الخط (سحابة/PaaS).
- يؤتمت CI/CD الاختبارات والوضع على الخط عند كل تغيير للشيفرة.
- يصف GitHub Actions خطوط الأنابيب في ملف YAML مُصدَر.
- Git/GitHub هو الأساس : إصدار وتعاون ومثير لخطوط الأنابيب.
تحدي 48 ساعة — طبق غدا
أضيفوا سير العمل أعلاه إلى مستودع واحد : هل يدفع إلى الأخضر — وهل يحجب الأحمر بعد فشل مُثار ؟
- أستطيع شرح CI مقابل CD في جملة واحدة.
- يختبر سير عملي عند كل دفع (مثبت بالأخضر).
- أعرف أين تذهب الأسرار (خارج YAML).
أسئلة شائعة
ماذا يجلب CI/CD مقابل نشر يدوي ؟
يحذف الأخطاء البشرية والوقت الضائع : عند كل تعديل، تُنفَّذ الاختبارات تلقائيا، وإن نجحت وُضع التطبيق على الخط دون تدخل. نسلم غالبا وأسرع وأأمن — معيار الفرق الحديثة. والأحمر الذي يحجب الدمج يعادل كل أوامر التذكير.
أين نستضيف تطبيق بايثون بأقل كلفة ؟
تقترح منصات متصلة بالمستودع (نوع Render و Railway و Fly ومكافئاتها) عتبات دخول ونشرا تلقائيا من GitHub : مثالي للبدء. لمزيد تحكم، السحب الكبرى أقوى لكن أعقد — تُحفَظ للحاجات المبررة. قارنوا العروض لحظة الاختيار (فهي تتطور) واجعلوا مديرية الأنظمة (DSI) تُصدِّق قبل كشف بيانات حساسة.
ماذا يفعل خط أنابيب CI/CD (مثلا GitHub Actions) ؟