Einführung in CI/CD für PHP-Projekte mit GitHub Actions
Moderne PHP-Anwendungsentwicklung ist ohne Automatisierung nicht möglich. Manuelles Testen und Deployment sind nicht nur zeitaufwendig, sondern auch fehleranfällig. CI/CD (Continuous Integration / Continuous Deployment) löst diese Probleme, indem es die Code-Überprüfung und die Auslieferung an den Server automatisiert. Eines der beliebtesten Werkzeuge dafür ist GitHub Actions.
GitHub Actions ist eine integrierte Plattform zur Automatisierung von Arbeitsabläufen (Workflows), mit der Sie Tests, Linter, Builds und Deployments direkt aus Ihrem GitHub-Repository ausführen können. In diesem Artikel werden wir uns ansehen, wie Sie eine vollständige CI/CD-Pipeline für ein PHP-Projekt einrichten: vom einfachen Teststart bis zum automatischen Deployment auf den Produktionsserver.
Wir verwenden ein Beispiel auf Basis von Laravel, aber alle Prinzipien sind auf jedes PHP-Framework (Symfony, Yii, WordPress usw.) anwendbar. Sie erfahren, wie Sie YAML-Konfigurationen schreiben, Testmatrizen verwenden, Abhängigkeiten cachen und Code sicher deployen.
Hauptteil
1. Grundlagen von GitHub Actions: Struktur eines Workflows
Ein Workflow ist ein automatisierter Prozess, der durch ein bestimmtes Ereignis (Push, Pull Request, Tag-Erstellung) ausgelöst wird. Jeder Workflow wird in einer YAML-Datei beschrieben, die im Verzeichnis .github/workflows/ Ihres Repositorys gespeichert ist.
Grundlegende Struktur der Datei .github/workflows/ci.yml:
name: CI Pipeline
on: push: branches: [ main, develop ] pull_request: branches: [ main ]
jobs: test: runs-on: ubuntu-latest
steps: - name: Checkout repository uses: actions/checkout@v4
- name: Setup PHP uses: shivammathur/setup-php@v2 with: php-version: '8.2' extensions: mbstring, xml, bcmath, pdo_mysql coverage: xdebug
- name: Install dependencies run: composer install --no-progress --prefer-dist
- name: Run PHPUnit tests run: vendor/bin/phpunit --coverage-textLassen Sie uns die wichtigsten Elemente durchgehen:
on— Auslöser: Push in main/develop, Pull Request in main.jobs— Eine Reihe von Aufgaben (Jobs), die parallel oder sequenziell ausgeführt werden.runs-on— Das Betriebssystem für die Ausführung (normalerweiseubuntu-latest).steps— Die Abfolge der Schritte innerhalb eines Jobs.uses— Vorgefertigte Actions aus dem Marketplace (z. B.shivammathur/setup-php).run— Ausführung eines Shell-Befehls.
2. Erweiterte Konfiguration: Testmatrix und Caching
Für größere Projekte ist es sinnvoll, mehrere PHP-Versionen und Abhängigkeiten gleichzeitig zu testen. Dies geschieht über eine Matrix-Strategie (matrix strategy). Wichtig ist auch das Cachen des Composer-Vendor-Ordners, um die Ausführung des Workflows zu beschleunigen.
Beispiel mit Matrix und Cache:
name: Advanced CI
on: [push, pull_request]
jobs: test: runs-on: ubuntu-latest strategy: matrix: php: [ '8.1', '8.2', '8.3' ] dependency-stability: [ prefer-stable, prefer-lowest ]
steps: - uses: actions/checkout@v4
- name: Setup PHP uses: shivammathur/setup-php@v2 with: php-version: ${{ matrix.php }} extensions: mbstring, pdo, gd coverage: none
- name: Cache Composer packages uses: actions/cache@v3 with: path: vendor key: ${{ runner.os }}-php-${{ matrix.php }}-composer-${{ hashFiles('**/composer.lock') }} restore-keys: | ${{ runner.os }}-php-${{ matrix.php }}-composer-
- name: Install dependencies run: composer install --${{ matrix.dependency-stability }} --no-interaction
- name: Run test