خط أنابيب CI/CD لجافا سكريبت: الإعداد من الصفر في 10 خطوات

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

كيف تتوقف عن النشر يدويًا ولا تخاف من الالتزامات

\n\n

هل سبق لك أن جلست مساء الجمعة، ونظرت إلى الإنتاج وفكرت: "حسنًا، يبدو أن كل شيء يعمل، ولكن إذا قمت بتشغيل البناء الآن، هل سينكسر شيء؟" مألوف؟ النشر اليدوي يشبه القفز بالمظلات بدون مدرب: قد يكون مثيرًا، لكنه غالبًا ما ينتهي بشكل مؤلم.

\n\n

خط أنابيب CI/CD هو حبل الأمان التلقائي الخاص بك. هو من سيقوم ببناء المشروع، وتشغيل الاختبارات، وفحص الكود، وإذا كان كل شيء على ما يرام، فسينشر التحديث على الخادم. لا مزيد من "أوه، لقد نسيت تشغيل البناء" أو "لماذا فشلت الاختبارات، لقد كانت تعمل محليًا؟".

\n\n

في هذه المقالة، سنقوم بإعداد خط أنابيب CI/CD كامل لمشروع جافا سكريبت من الصفر. بدون حشو، مع أمثلة كود حقيقية وتكوينات جاهزة. هيا بنا!

\n\n

ما هو خط أنابيب CI/CD ولماذا يحتاجه مطور جافا سكريبت

\n\n

دعنا نوضح المصطلحات فورًا لتجنب الارتباك.

\n\n

التكامل المستمر (CI) — هو عندما يتم فحص كل التزام تقوم به تلقائيًا: يمر الكود عبر أدوات فحص الكود (linters)، والاختبارات، والبناء. إذا انكسر شيء ما، فستعرف ذلك بعد دقيقتين، وليس بعد أسبوع.

\n\n

التسليم المستمر (CD) — النشر التلقائي للكود الجاهز على الخادم بعد اجتياز جميع فحوصات CI بنجاح.

\n\n

بالنسبة لمشاريع جافا سكريبت، يعتبر CI/CD مهمًا بشكل خاص. لماذا؟ لأن النظام البيئي لـ JS يعتمد على آلاف التبعيات التي يمكن تحديثها في أي moment وتكسير الكود الخاص بك. الأتمتة تنقذك من مثل هذه المفاجآت.

\n\n

ما الذي سنقوم بإعداده

\n
    \n
  • GitHub Actions — أداة مجانية لـ CI/CD (تكفي لمعظم المشاريع)
  • \n
  • أداة فحص الكود (Linter) — التحقق من نمط الكود (ESLint)
  • \n
  • الاختبارات — تشغيل Jest تلقائيًا
  • \n
  • البناء — بناء المشروع (Webpack أو Vite)
  • \n
  • النشر — التحميل التلقائي على الخادم أو الاستضافة
  • \n
\n\n

الخطوة 1: تجهيز المشروع

\n\n

لنفترض أن لديك بالفعل مشروع جافا سكريبت (React، Vue، Node.js — لا يهم). إذا لم يكن لديك، فأنشئ مشروعًا بسيطًا للاختبار:

\n\n
mkdir my-ci-cd-project\ncd my-ci-cd-project\nnpm init -y\nnpm install --save-dev jest eslint
\n\n

أضف سكريبتًا أساسيًا في package.json:

\n\n
{\n  "scripts": {\n    "test": "jest",\n    "lint": "eslint src/",\n    "build": "webpack --mode production",\n    "deploy": "rsync -avz dist/ user@server:/var/www"\n  }\n}
\n\n

الآن لدينا أوامر محلية سيقوم CI/CD بتنفيذها تلقائيًا.

\n\n

الخطوة 2: إنشاء سير عمل GitHub Actions

\n\n

GitHub Actions هو عقل خط الأنابيب لدينا. كل شيء يُدار بواسطة ملفات YAML في مجلد .github/workflows/.

\n\n

أنشئ ملفًا .github/workflows/ci-cd.yml:

\n\n
name: CI/CD Pipeline\n\non:\n  push:\n    branches: [ main, develop ]\n  pull_request:\n    branches: [ main ]\n\njobs:\n  build-and-test:\n    runs-on: ubuntu-latest\n    \n    steps:\n    - uses: actions/checkout@v3\n    \n    - name: Setup Node.js\n      uses: actions/setup-node@v3\n      with:\n        node-version: '18'\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    - name: Build project\n      run: npm run build
\n\n

ماذا يحدث هنا؟ عند كل دفع إلى main أو develop، يقوم GitHub بتشغيل جهاز افتراضي بنظام Ubuntu، وتثبيت Node.js 18، وتثبيت التبعيات (تثبيت نظيف عبر npm ci — أسرع وأكثر موثوقية من npm install)، وفحص الكود باستخدام أداة الفحص، وتشغيل الاختبارات، وبناء المشروع.

\n\n

إذا فشلت أي خطوة، سيتوقف خط الأنابيب وستتلقى إشعارًا.

\n\n

الخطوة 3: إضافة أداة الفحص والاختبارات

\n\n

ESLint و Jest هما المعياران لجافا سكريبت. سنقوم بإعدادهما في

المدونات

توصيات الكتب