مقدمة: لماذا نحتاج CI/CD لمشاريع JavaScript؟
\n\nتطوير تطبيقات JavaScript الحديثة على Node.js لا يتطلب فقط كتابة كود عالي الجودة، بل يتطلب أيضًا توصيله بشكل موثوق للمستخدمين النهائيين. الاختبار اليدوي، والبناء، والنشر ليست فقط بطيئة، بل محفوفة أيضًا بالأخطاء البشرية. هنا يأتي دور CI/CD (التكامل المستمر / النشر المستمر) - منهجية لأتمتة جميع مراحل دورة حياة البرمجيات.
\n\nCI/CD لمشاريع JavaScript يسمح بتشغيل الاختبارات تلقائيًا مع كل دفع إلى المستودع، وبناء التطبيق، ونشره على الخادم أو في السحابة. أحد أشهر الأدوات لتنفيذ هذه المنهجية هو GitHub Actions - نظام أتمتة سير العمل المدمج في منصة GitHub.
\n\nفي هذه المقالة، سنشرح كيفية إعداد خط أنابيب CI/CD كامل لمشروع JavaScript (Node.js) باستخدام GitHub Actions: من كتابة التكوين إلى النشر. ستتعلم كيفية تسريع التطوير، وتحسين جودة الكود، والتخلص من العمليات الروتينية.
\n\nالجزء الرئيسي: إنشاء خط أنابيب CI/CD باستخدام GitHub Actions
\n\n1. ما هو GitHub Actions وكيف يعمل؟
\n\nGitHub Actions هي منصة لأتمتة سير العمل (workflows) التي يتم تشغيلها استجابةً للأحداث في المستودع (push، pull request، إنشاء issue، إلخ). سير العمل هو مجموعة من الخطوات التي يتم تنفيذها على أجهزة افتراضية (runners). يمكن لكل خطوة تشغيل نصوص برمجية، أو تثبيت تبعيات، أو استدعاء خدمات خارجية.
\n\nالمفاهيم الأساسية:
\n- \n
- Workflow — ملف تكوين YAML، مخزّن في مجلد
.github/workflows/. \n - Event — المشغل الذي يبدأ سير العمل (مثل
pushأوpull_request). \n - Job — مجموعة من الخطوات التي يتم تنفيذها على runner واحد (التبعيات، الاختبارات، البناء). \n
- Step — أمر أو إجراء فردي (action). \n
بالنسبة لمشاريع JavaScript، سنستخدم runner القياسي مع Ubuntu، لأنه يدعم Node.js بشكل افتراضي.
\n\n2. الإعداد الأساسي: الاختبار والتحليل (Linting)
\n\nلنبدأ بإنشاء سير عمل بسيط لاختبار وتحليل الكود. قم بإنشاء ملف .github/workflows/ci.yml في جذر مستودعك.
مثال على تكوين لمشروع Node.js:
\n\nname: CI for Node.js\n\non:\n push:\n branches: [ main, develop ]\n pull_request:\n branches: [ main ]\n\njobs:\n test:\n runs-on: ubuntu-latest\n\n strategy:\n matrix:\n node-version: [18.x, 20.x]\n\n steps:\n - name: Checkout repository\n uses: actions/checkout@v4\n\n - name: Setup Node.js ${{ matrix.node-version }}\n uses: actions/setup-node@v4\n with:\n node-version: ${{ matrix.node-version }}\n cache: 'npm'\n\n - name: Install dependencies\n run: npm ci\n\n - name: Run linter\n run: npm run lint\n\n - name: Run tests\n run: npm test\n\nدعنا نشرح النقاط الرئيسية:
\n- \n
- Matrix strategy — يسمح بتشغيل الاختبارات على إصدارات متعددة من Node.js (18.x و 20.x) بالتوازي. \n
- actions/checkout — إجراء قياسي لاستنساخ المستودع. \n
- actions/setup-node — يقوم بتثبيت الإصدار المطلوب من Node.js ويتضمن التخزين المؤقت لـ
node_modulesلتسريع العملية. \n - npm ci — تثبيت نظيف للتبعيات من
package-lock.json(أسرع وأكثر موثوقية منnpm install). \n
بعد دفع هذا الملف إلى المستودع، سيقوم GitHub Actions تلقائيًا بتشغيل الاختبارات. سترى النتيجة في قسم "Actions" في مستودعك.
\n\n3. بناء ونشر صورة Docker
\n\nإ