CI/CD für PHP-Projekte: Einrichtung von GitHub Actions
Moderne PHP-Entwicklung ist ohne Automatisierung von Test-, Build- und Bereitstellungsprozessen undenkbar. CI/CD (Continuous Integration / Continuous Deployment) ermöglicht es Teams, Updates schneller auszuliefern, die Anzahl der Fehler zu reduzieren und eine hohe Codequalität aufrechtzuerhalten. In diesem Artikel werden wir im Detail besprechen, wie man CI/CD-Pipelines für PHP-Projekte mit GitHub Actions einrichtet – dem integrierten Automatisierungstool von GitHub.
Wir betrachten reale Beispiele für gängige Frameworks (Laravel, Symfony), lernen, wie man Tests ausführt, den Codestil überprüft, Artefakte erstellt und automatisch auf einen Server deployed. Der Artikel ist sowohl für Anfänger als auch für erfahrene Entwickler nützlich, die ihren Workflow optimieren möchten.
1. Grundlagen von GitHub Actions für PHP
GitHub Actions ist eine Plattform zur Automatisierung von Arbeitsabläufen direkt im Repository. Workflows werden in YAML-Dateien beschrieben, die im Verzeichnis .github/workflows/ gespeichert sind. Jeder Workflow besteht aus einem oder mehreren Jobs, die auf virtuellen Maschinen (Runner) ausgeführt werden, wenn bestimmte Ereignisse eintreten (Push, Pull Request, Release usw.).
Für PHP-Projekte umfassen die wichtigsten Schritte in der Regel:
- Installation von Abhängigkeiten über Composer
- Einrichtung der Umgebung (PHP-Version, Erweiterungen, Datenbank)
- Durchführung statischer Analysen (PHPStan, Psalm)
- Ausführung von Unit-Tests (PHPUnit, Pest)
- Überprüfung des Codestils (PHP CS Fixer, Laravel Pint)
- Erstellung und Veröffentlichung von Docker-Images
- Deployment auf Production-/Staging-Server
Ein minimaler Workflow für ein PHP-Projekt sieht wie folgt aus:
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 --testdoxDieser Workflow wird bei jedem Push oder bei der Erstellung eines Pull Requests in den main-Branch ausgelöst. Er überprüft den Code auf Einhaltung der Standards und führt Tests durch.
2. Erweiterte Konfiguration: Testen, Linting und statische Analyse
Ein reales Projekt erfordert eine tiefergehende Überprüfung der Codequalität. Betrachten wir ein Beispiel für das Framework Laravel mit einem vollständigen Satz an Werkzeugen.
Erstellen wir die Datei .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
```