CI/CD لمشاريع JavaScript: GitHub Actions من الألف إلى الياء

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

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

ابدأ الدورة
```html

مقدمة: لماذا CI/CD ضروري لمشاريع JavaScript

تطوير الويب الحديث لا يمكن تصوره بدون أتمتة. كل يوم، يواجه مطورو JavaScript (Node.js) مهامًا روتينية: تشغيل الاختبارات، فحص الكود باستخدام linter، بناء ونشر التطبيق. التنفيذ اليدوي لهذه العمليات لا يستهلك الوقت فحسب، بل إنه محفوف بالأخطاء أيضًا. هنا يأتي دور CI/CD (Continuous Integration / Continuous Deployment) — وهي منهجية تتيح أتمتة جميع مراحل دورة حياة البرنامج.

GitHub Actions هي أداة أتمتة مدمجة على منصة GitHub، وهي مثالية لإعداد خطوط أنابيب CI/CD. في هذه المقالة، سنشرح بالتفصيل كيفية إعداد دورة أتمتة كاملة من الصفر لمشروع JavaScript (Node.js): بدءًا من تشغيل الاختبارات وصولاً إلى النشر على الخادم. ستتعلم كيفية إنشاء سير عمل، وكتابة ملفات التكوين، وتجنب الأخطاء الشائعة.

أساسيات GitHub Actions: الهيكل والمكونات

قبل كتابة الكود، دعنا نفهم المفاهيم الأساسية لـ GitHub Actions. يتم وصف خط الأنابيب بأكمله في ملفات YAML، والتي يتم تخزينها في دليل .github/workflows الخاص بمستودعك.

العناصر الأساسية لسير العمل (Workflow)

  • Workflow — هو عملية آلية تتكون من مهمة واحدة أو أكثر من Job (المهام).
  • Job — مجموعة من الخطوات (Step) التي يتم تنفيذها على Runner واحد (جهاز افتراضي).
  • Step — أمر أو إجراء فردي (Action).
  • Event — المشغل الذي يبدأ سير العمل (على سبيل المثال، push، pull request).

بالنسبة لمشاريع JavaScript، يبدو سير العمل القياسي كما يلي:

name: CI/CD لـ Node.js

on:
  push:
    branches: [ main ]
  pull_request:
    branches: [ main ]

jobs:
  build-and-test:
    runs-on: ubuntu-latest
    
    strategy:
      matrix:
        node-version: [18.x, 20.x]
    
    steps:
    - uses: actions/checkout@v4
    - name: تثبيت Node.js
      uses: actions/setup-node@v4
      with:
        node-version: ${{ matrix.node-version }}
    - name: تثبيت التبعيات
      run: npm ci
    - name: فحص الكود (Linting)
      run: npm run lint
    - name: الاختبارات
      run: npm test

لاحظ strategy.matrix — هذا يسمح باختبار الكود على إصدارات متعددة من Node.js في وقت واحد، وهو أمر بالغ الأهمية للمكتبات والحزم.

الإعداد التدريجي لـ CI/CD لمشروع Node.js

دعنا نلقي نظرة على مثال كامل لإعداد خط أنابيب لتطبيق ويب نموذجي يعمل بـ Express.js. سنبدأ بالملف الأساسي .github/workflows/node-ci.yml.

الخطوة 1: التحقق الأساسي من الكود

name: Node.js CI

on:
  push:
    branches: [ develop, main ]
  pull_request:
    branches: [ main ]

jobs:
  quality:
    runs-on: ubuntu-latest
    
    steps:
    - uses: actions/checkout@v4
    
    - name: إعداد Node.js
      uses: actions/setup-node@v4
      with:
        node-version: '20'
        cache: 'npm'
    
    - name: تثبيت التبعيات
      run: npm ci
    
    - name: فحص الكود (Lint)
      run: npm run lint
    
    - name: تشغيل اختبارات الوحدة
      run: npm run test:unit
    
    - name: بناء المشروع
      run: npm run build

النقاط الرئيسية:

  • cache: 'npm' — يخبئ node_modules، مما يسرع عمليات التشغيل اللاحقة.
  • npm ci — تثبيت نظيف للتبعيات، أسرع وأكثر موثوقية من npm install.
  • فصل الاختبارات إلى وحدة (unit) وتكاملية (integration) (اختياري) يسمح بالحصول على ردود فعل أسرع.

الخطوة 2: اختبارات التكامل مع قاعدة البيانات

لاختبار مع قاعدة بيانات حقيقية، استخدم خدمات GitHub Actions:

jobs:
  integration-tests:
    runs-on: ubuntu-latest
    
```                

المدونات

توصيات الكتب