CI/CD لمشاريع PHP: إعداد GitHub Actions من الصفر

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

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

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

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



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



سنستعرض أمثلة حقيقية للأطر الشائعة (Laravel, Symfony)، ونتعلم كيفية تشغيل الاختبارات، والتحقق من نمط الكود، وجمع القطع الأثرية (artifacts)، والنشر التلقائي على الخادم. ستكون المقالة مفيدة لكل من المبتدئين والمطورين ذوي الخبرة الذين يرغبون في تحسين سير العمل الخاص بهم.



1. أساسيات GitHub Actions لـ PHP



GitHub Actions هي منصة لأتمتة سير العمل مباشرة داخل المستودع. يتم وصف سير العمل (Workflow) في ملفات YAML، والتي يتم تخزينها في الدليل .github/workflows/. يتكون كل سير عمل من job واحدة أو أكثر، يتم تنفيذها على أجهزة افتراضية (runner) عند حدوث أحداث معينة (push, pull request, release، إلخ).



بالنسبة لمشاريع PHP، تتضمن الخطوات الرئيسية عادةً:



  • تثبيت التبعيات عبر Composer
  • إعداد البيئة (إصدار PHP، الإضافات، قاعدة البيانات)
  • تشغيل التحليل الثابت (PHPStan, Psalm)
  • تنفيذ اختبارات الوحدة (PHPUnit, Pest)
  • التحقق من نمط الكود (PHP CS Fixer, Laravel Pint)
  • بناء ونشر صورة Docker
  • النشر على خادم الإنتاج/الاختبار (staging)


أبسط سير عمل لمشروع PHP يبدو كالتالي:



name: PHP CI

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

jobs: test: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Setup PHP uses: shivammathur/setup-php@v2 with: php-version: '8.2' extensions: mbstring, intl, pdo_mysql coverage: xdebug - name: Install dependencies run: composer install --prefer-dist --no-progress - name: Run tests run: vendor/bin/phpunit --testdox


يتم تشغيل سير العمل هذا مع كل push أو إنشاء pull request إلى الفرع main. يقوم بالتحقق من مطابقة الكود للمعايير وتنفيذ الاختبارات.



2. إعداد متقدم: الاختبار، التحليل اللغوي (linting) والتحليل الثابت



يتطلب المشروع الحقيقي فحصًا أعمق لجودة الكود. دعنا نلقي نظرة على مثال لإطار العمل Laravel مع مجموعة كاملة من الأدوات.



سنقوم بإنشاء ملف .github/workflows/laravel-ci.yml:



name: Laravel CI/CD

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

jobs: quality: runs-on: ubuntu-latest services: mysql: image: mysql:8.0 env: MYSQL_DATABASE: testing MYSQL_USER: user MYSQL_PASSWORD: secret MYSQL_ROOT_PASSWORD: root ports: - 3306:3306 options: --health-cmd="mysqladmin ping" --health-interval=10s --health-timeout=5s --health-retries=3

steps: - uses: actions/checkout@v4

- name: Setup PHP uses: shivammathur/setup-php@v2 with: php-version: '8.2' extensions: mbstring, intl, pdo_mysql, bcmath, redis coverage: pcov tools: composer:v2

- name: Copy .env run: | cp .env.example .env php artisan key:generate

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

- name: Run Laravel Pint (Code Style) run: vendor/bin/pint --test

- name: Run PHPStan (Static Analysis) run: vendor/bin/phpstan analyse --memory-limit=2G

```

المدونات

توصيات الكتب