CI/CD لمشاريع PHP: GitHub Actions مستوى متقدم

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

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

ابدأ الدورة

مقدمة: من CI/CD الأساسي إلى مستوى الإنتاج



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



نفترض أنك بالفعل على دراية بأساسيات بناء جملة YAML والهيكل الأساسي لـ .github/workflows. الآن سننتقل إلى تحسين وتوسيع الإمكانيات.



1. تسريع عمليات البناء: التخزين المؤقت لـ Composer والاستراتيجية المثلى



كل تشغيل لسير العمل يقوم بتنزيل التبعيات من جديد. يستغرق هذا من 1-3 دقائق، يمكن تقليصها إلى 5-10 ثوانٍ باستخدام التخزين المؤقت.



التخزين المؤقت الذكي لـ vendor



نستخدم actions/cache مع مفتاح يعتمد على تجزئة composer.lock. إذا لم يتغير ملف القفل، فسيتم استعادة التبعيات من ذاكرة التخزين المؤقت.



name: PHP CIon: [push, pull_request]

jobs: test: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4

- name: Setup PHP uses: shivammathur/setup-php@v2 with: php-version: '8.2' tools: composer:v2

- name: Cache Composer dependencies 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 --no-progress --prefer-dist


لاحظ restore-keys: إذا لم يتم العثور على المفتاح الدقيق، فسيتم استخدام آخر ذاكرة تخزين مؤقت لهذا النظام. هذا يوفر حماية عند تغيير الفروع.



البناء المصفوفي لإصدارات PHP المختلفة



لضمان التوافق، اختبر على إصدارات متعددة من PHP بالتوازي:



jobs:  test:    strategy:      matrix:        php-version: ['8.1', '8.2', '8.3']        dependency-stability: [prefer-lowest, prefer-stable]

steps: - uses: actions/checkout@v4 - name: Setup PHP ${{ matrix.php-version }} uses: shivammathur/setup-php@v2 with: php-version: ${{ matrix.php-version }}

- name: Cache uses: actions/cache@v3 with: path: vendor key: ${{ runner.os }}-php${{ matrix.php-version }}-${{ hashFiles('**/composer.lock') }}

- name: Install dependencies run: | composer update --${{ matrix.dependency-stability }} --prefer-dist --no-interaction

- name: Run tests run: vendor/bin/phpunit


يكشف هذا النهج عن مشاكل التوافق قبل الدمج في الفرع الرئيسي. ستحصل على 6 وظائف متوازية (3 إصدارات × استراتيجيتي استقرار).



2. المراحل المتقدمة: التحليل الثابت وجودة الكود



اختبارات الوحدة ليست الأداة الوحيدة لمراقبة الجودة. سنضيف PHPStan (أقصى مستوى تحليل) و PHP Code Sniffer.



الفحص والتحليل الثابت



أنشئ وظيفة منفصلة للتحليل، تعمل بالتوازي مع الاختبارات:



jobs:  static-analysis:    runs-on: ubuntu-latest    steps:      - uses: actions/checkout@v4      - uses: shivammathur/setup-php@v2        with:          php-version: '8.2'          coverage: none

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

- run: composer install --no-interaction --prefer-dist

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

- name: PHPCS run: vendor/bin/phpcs --standard=PSR12 src/

المدونات

توصيات الكتب