يوم الخميس ونار الـ Deployment: إزاي ترفع الكود بتاعك من غير ما تضيع الويك إند؟
يا أهلاً بيك يا بطل في كابوس كل مبرمج! الساعة بقت 4 العصر، والمدير داخل عليك بيقولك عايزين نطلع التحديث الجديد (Update) قبل ما الأسبوع يخلص. وأنت يا عيني، قلبك مقبوض لأنك عارف إن "الرفع يوم الخميس" ده معناه غالباً إنك هتسهر طول الليل وبدل ما تخرج وتنبسط، هتلاقي نفسك بتعمل Debugging في عز يوم الجمعة الصبح.
في المقال ده، هنتكلم عن إزاي نكسر القاعدة دي، ونحول عملية الـ Deployment من "مهمة انتحارية" لعملية منظمة ومريحة تضمن لك تنام وأنت مطمن.
Table of contents [Show]
ليه الرفع يوم الخميس فكرة سيئة جداً؟
المشكلة مش في يوم الخميس نفسه، المشكلة في "التوقيت". لما بتعمل Deployment في نهاية الأسبوع، أنت حرفياً بتقلل من فرصك في إنك تلاقي حد يساعدك لو حصلت كارثة، لأن أغلب الفريق بيبقى في إجازة، والسيستم (System) بيبقى لوحده في المواجهة. القاعدة الذهبية هنا: "ما تعملش Release لأي كود جديد لو مش مستعد إنك تقضي الساعات الجاية بتحل مشاكل".
أكبر غلطة بيقع فيها المبرمجين المبتدئين هي إنهم يرفعوا الكود من جهازهم (Local Machine) للـ Production على طول. ده جنون! لازم يكون عندك بيئة اختبار (Staging Environment) مطابقة بنسبة 90% على الأقل لبيئة الـ Production.
الـ Staging مش مجرد سيرفر إضافي، ده "حقل تجارب" بتكتشف فيه المشاكل قبل ما المستخدمين الحقيقيين يلاقوها. لو الكود بتاعك ممرش بمرحلة الـ Integration Testing في بيئة الـ Staging، يبقى أنت بتلعب بالنار.
خطوات عملية عشان تـ Deploy وأنت مطمن
- استخدم الـ CI/CD Pipelines: بلاش الرفع اليدوي. استخدم أدوات زي GitHub Actions أو Jenkins عشان تضمن إن الكود بتاعك بيعدي على اختبارات آلية قبل ما يلمس السيرفر.
- طبق نظام الـ Rollback: لازم يكون عندك القدرة ترجع للنسخة القديمة (Previous Version) في ثواني لو الـ Deployment فشل.
- مراقبة الأداء (Monitoring): استخدم أدوات زي Sentry أو New Relic عشان تعرف أي خطأ (Error) بيحصل أول ما الكود يطلع، قبل ما العملاء يبعتوا تيكيتات (Tickets) الدعم الفني.
مثال سريع لعملية بسيطة باستخدام GitHub Actions
لو عايز تعمل Pipeline بسيط يختبر الكود قبل الـ Deployment، ممكن تستخدم ملف YAML زي ده في مشروعك:
name: Node.js CI
on: [push]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Run Tests
run: |
npm install
npm test
الكود ده بيتأكد إن أي تغيير هترفعه على الـ Repository بيمر باختبارات الـ (Unit Tests) قبل ما تسمح لأي حد إنه يرفعه فعلياً، وده بيحميك من أخطاء السذاجة.
نصيحة من أخ ليك
عايز نصيحتي؟ الخبرة مش بس في إنك تكتب كود زي الوحش، الخبرة في إنك "تخاف" على السيستم. اتعلم الـ (DevOps basics) حتى لو أنت Front-end أو Back-end developer. الـ Deployment جزء لا يتجزأ من الكود بتاعك. خليك دايمًا جاهز، وثق في الاختبارات (Tests) مش في حظك، وأهم حاجة: ابعد عن الـ Deployment يوم الخميس لو مفيش داعي قهري، واستمتع بإجازتك، لأن المبرمج اللي بيعرف يوازن بين حياته وشغله هو اللي بيكمل في المجال ده فترة أطول.