مقدمة: لماذا CI/CD هو المعيار الجديد لتطوير PHP
\nتطوير PHP الحديث لا يمكن تصوره بدون أتمتة. النشر اليدوي، تشغيل الاختبارات "بالعين" وفحص الكود في اللحظة الأخيرة - طريق مباشر للأخطاء في بيئة الإنتاج. CI/CD (التكامل المستمر / النشر المستمر) يحل هذه المشكلات من خلال دمج الفحوصات ونشر الكود مباشرة في سير عملك.
\nGitHub Actions هي أداة قوية ومجانية لدمج CI/CD مباشرة في المستودع. في هذه المقالة، سنشرح كيفية إعداد خط أنابيب كامل لمشروع PHP على Laravel أو Symfony: من تثبيت التبعيات إلى النشر على الخادم. ستحصل على إعدادات جاهزة وفهم لكل مرحلة.
\n\n1. أساسيات GitHub Actions: هيكل Workflow لـ PHP
\nWorkflow في GitHub Actions هو عملية آلية محددة في ملف YAML داخل مجلد .github/workflows/. لمشروع PHP، يتضمن workflow النموذجي:
- \n
- المشغلات: push إلى فرع
main، pull request. \n - Runner: Ubuntu latest (دعم PHP). \n
- الخطوات: Checkout، تثبيت PHP، Composer، الاختبارات، أدوات فحص الكود. \n
لنلقِ نظرة على ملف ci.yml الأدنى:
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.
2. إعداد متقدم: التحليل الثابت، أدوات فحص الكود والتخزين المؤقت
\nلا يقتصر CI على الاختبارات فقط. للحفاظ على جودة الكود، أضف التحليل الثابت (PHPStan, Psalm) وفحص الأسلوب (PHP CS Fixer).
\n2.1. إضافة PHPStan و PHP CS Fixer
\nقم بتثبيتهما كتبعيات تطوير:
\ncomposer 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، وسيقوم المطور بالإصلاح.
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\n3. الاختبار مع قاعدة البيانات وخدمات Docker
\nتتطلب العديد من تطبيقات PHP MySQL أو PostgreSQL أو Redis للاختبارات. يتيح GitHub Actions تشغيل حاويات الخدمة (Service Containers).
\n3.1. مثال مع MySQL و Laravel
\nلنفترض أن مشروعك يستخدم Laravel مع MySQL. أضف الخدمة وقم بتكوين .env:
\njobs:\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