CI/CD لمشاريع PHP: GitHub Actions – دليل شامل

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

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

ابدأ الدورة

CI/CD لمشاريع PHP: GitHub Actions



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



ما هو CI/CD ولماذا هو مهم لمطور PHP؟

التكامل المستمر (CI) هو ممارسة يتم فيها التحقق من كل commit تلقائيًا: يتم تشغيل اختبارات الوحدة، وأدوات فحص الكود (linters)، وفحوصات الأمان. النشر المستمر (CD) هو الخطوة التالية، حيث يتم نشر الكود الذي اجتاز CI بنجاح تلقائيًا على الخادم (بيئة الاختبار staging أو الإنتاج production).

بالنسبة لـ PHP، هذا مهم بشكل خاص: اللغة ديناميكية، وغالبًا ما يتم اكتشاف أخطاء الكتابة (typing) والنحو (syntax) فقط في وقت التشغيل (runtime). يتيح لك GitHub Actions إعداد خط أنابيب يقوم بما يلي:

  • تشغيل اختبارات PHPUnit على إصدارات مختلفة من PHP (7.4, 8.0, 8.1, 8.2).
  • التحقق من الكود باستخدام PHP_CodeSniffer أو PHPStan.
  • تنفيذ النشر على الخادم عبر SSH أو Docker.


إنشاء سير عمل (Workflow) في GitHub Actions

للبدء، قم بإنشاء مجلد .github/workflows في جذر مشروع PHP الخاص بك. بداخله، قم بإنشاء ملف، على سبيل المثال ci.yml. هذا سيكون خط الأنابيب الخاص بك.

لنلق نظرة على مثال أساسي لـ CI. سيتم تشغيله مع كل دفعة إلى الفرع main أو عند إنشاء طلب سحب (Pull Request).



name: PHP CI

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

jobs: build: runs-on: ubuntu-latest

strategy: matrix: php-versions: ['7.4', '8.0', '8.1', '8.2']

steps: - uses: actions/checkout@v3

- name: Setup PHP uses: shivammathur/setup-php@v2 with: php-version: ${{ matrix.php-versions }} tools: composer, phpunit

- name: Validate composer.json and composer.lock run: composer validate --strict

- name: Cache Composer packages id: composer-cache uses: actions/cache@v3 with: path: vendor key: ${{ runner.os }}-php-${{ hashFiles('**/composer.lock') }} restore-keys: | ${{ runner.os }}-php-

- name: Install dependencies run: composer install --prefer-dist --no-progress

- name: Run PHPUnit tests run: phpunit --configuration phpunit.xml


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

  • استراتيجية المصفوفة (Matrix strategy) — تسمح بتشغيل الاختبارات على إصدارات متعددة من PHP في وقت واحد. هذا يضمن توافق الكود.
  • shivammathur/setup-php — إجراء (action) شائع لإعداد بيئة PHP. يقوم بتثبيت الإصدار المطلوب، و Composer، و PHPUnit.
  • التخزين المؤقت (Caching) لمجلد vendor — يسرّع عمليات التشغيل اللاحقة عن طريق عدم إعادة تحميل التبعيات.
  • composer validate — يتحقق من صحة ملف composer.json.


إضافة التحليل الثابت (Static Analysis) وفحص الكود (Linting)

الاختبارات جيدة، لكن لا يمكن الاستغناء عن التحكم في جودة الكود. دعنا نضيف إلى نفس سير العمل (أو ننشئ وظيفة job منفصلة) فحصًا باستخدام PHPStan و PHP_CodeSniffer.



    - name: Run PHPStan      run: vendor/bin/phpstan analyse src tests --level=max

- name: Run PHP_CodeSniffer run: vendor/bin/phpcs --standard=PSR2 src tests


يمكن إضافة هذه الخطوات بعد تثبيت التبعيات. PHPStan بمستوى max سيجد أخطاء الأنواع المحتملة، بينما PHP_CodeSniffer بمعيار PSR-2 (أو PSR-12) سيضمن نمط كود موحد. إذا فشلت أي خطوة

المدونات

توصيات الكتب