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

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

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

ابدأ الدورة

مقدمة: لماذا CI/CD هو المعيار الجديد لتطوير PHP

\n

تطوير PHP الحديث لا يمكن تصوره بدون أتمتة. النشر اليدوي، تشغيل الاختبارات "بالعين" وفحص الكود في اللحظة الأخيرة - طريق مباشر للأخطاء في بيئة الإنتاج. CI/CD (التكامل المستمر / النشر المستمر) يحل هذه المشكلات من خلال دمج الفحوصات ونشر الكود مباشرة في سير عملك.

\n

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

\n\n

1. أساسيات GitHub Actions: هيكل Workflow لـ PHP

\n

Workflow في GitHub Actions هو عملية آلية محددة في ملف YAML داخل مجلد .github/workflows/. لمشروع PHP، يتضمن workflow النموذجي:

\n
    \n
  • المشغلات: push إلى فرع main، pull request.
  • \n
  • Runner: Ubuntu latest (دعم PHP).
  • \n
  • الخطوات: Checkout، تثبيت PHP، Composer، الاختبارات، أدوات فحص الكود.
  • \n
\n

لنلقِ نظرة على ملف ci.yml الأدنى:

\n
name: PHP CI\n\non:\n  push:\n    branches: [ main ]\n  pull_request:\n    branches: [ main ]\n\njobs:\n  build:\n    runs-on: ubuntu-latest\n\n    steps:\n    - uses: actions/checkout@v3\n\n    - name: Setup PHP\n      uses: shivammathur/setup-php@v2\n      with:\n        php-version: '8.2'\n        extensions: mbstring, pdo_mysql, xml\n        coverage: xdebug\n\n    - name: Install Composer dependencies\n      run: composer install --no-progress --prefer-dist\n\n    - name: Run PHPUnit\n      run: vendor/bin/phpunit --testdox
\n

يتم تشغيل هذا workflow مع كل push. يتحقق من أن الكود يتم تجميعه وأن الاختبارات تمر. لاحظ action shivammathur/setup-php - فهو المعيار الفعلي لـ PHP.

\n\n

2. إعداد متقدم: التحليل الثابت، أدوات فحص الكود والتخزين المؤقت

\n

لا يقتصر CI على الاختبارات فقط. للحفاظ على جودة الكود، أضف التحليل الثابت (PHPStan, Psalm) وفحص الأسلوب (PHP CS Fixer).

\n

2.1. إضافة PHPStan و PHP CS Fixer

\n

قم بتثبيتهما كتبعيات تطوير:

\n
composer require --dev phpstan/phpstan friendsofphp/php-cs-fixer
\n

أضف الخطوات إلى workflow:

\n
    - name: Run PHPStan\n      run: vendor/bin/phpstan analyse --memory-limit=1G\n\n    - name: Check code style\n      run: vendor/bin/php-cs-fixer fix --dry-run --diff
\n

نصيحة: استخدم --dry-run لعدم تغيير الملفات، فقط للفحص. إذا تم انتهاك الأسلوب - سيفشل CI، وسيقوم المطور بالإصلاح.

\n

2.2. التخزين المؤقت لتبعيات Composer

\n

كل تشغيل لـ CI يقوم بتنزيل الحزم من جديد - وهذا يستغرق وقتاً طويلاً. قم بتفعيل التخزين المؤقت:

\n
    - name: Cache Composer packages\n      id: composer-cache\n      uses: actions/cache@v3\n      with:\n        path: vendor\n        key: ${{ runner.os }}-php-${{ hashFiles('**/composer.lock') }}\n        restore-keys: |\n          ${{ runner.os }}-php-\n\n    - name: Install dependencies\n      if: steps.composer-cache.outputs.cache-hit != 'true'\n      run: composer install --no-progress --prefer-dist
\n

الآن ستكون عمليات التشغيل المتكررة أسرع بمقدار 2-3 مرات.

\n\n

3. الاختبار مع قاعدة البيانات وخدمات Docker

\n

تتطلب العديد من تطبيقات PHP MySQL أو PostgreSQL أو Redis للاختبارات. يتيح GitHub Actions تشغيل حاويات الخدمة (Service Containers).

\n

3.1. مثال مع MySQL و Laravel

\n

لنفترض أن مشروعك يستخدم Laravel مع MySQL. أضف الخدمة وقم بتكوين .env:

\n
jobs:\n  test:\n    runs-on: ubuntu-latest\n    services:\n      mysql:\n        image: mysql:8.0\n        env:\n          MYSQL_ROOT_PASSWORD: root\n          MYSQ                

المدونات

توصيات الكتب