Introduction : Pourquoi CI/CD est le nouveau standard du développement PHP
\nLe développement PHP moderne est impensable sans automatisation. Le déploiement manuel, l'exécution de tests « à l'œil » et la vérification du code à la dernière minute sont un chemin direct vers les bugs en production. CI/CD (Continuous Integration / Continuous Deployment) résout ces problèmes en intégrant les vérifications et le déploiement du code directement dans votre flux de travail.
\nGitHub Actions est un outil puissant et gratuit pour intégrer CI/CD directement dans votre dépôt. Dans cet article, nous allons voir comment configurer un pipeline complet pour un projet PHP sous Laravel ou Symfony : de l'installation des dépendances au déploiement sur le serveur. Vous obtiendrez des configurations prêtes à l'emploi et la compréhension de chaque étape.
\n\n1. Bases de GitHub Actions : structure d'un Workflow pour PHP
\nUn Workflow dans GitHub Actions est un processus automatisé défini dans un fichier YAML dans le dossier .github/workflows/. Pour un projet PHP, un workflow typique comprend :
- \n
- Déclencheurs : push sur la branche
main, pull request. \n - Runner : Ubuntu latest (support PHP). \n
- Étapes : Checkout, installation de PHP, Composer, tests, linters. \n
Examinons un fichier minimal 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\nCe workflow s'exécute à chaque push. Il vérifie que le code se compile et que les tests passent. Notez l'action shivammathur/setup-php — c'est de facto la norme pour PHP.
2. Configuration avancée : analyse statique, linters et mise en cache
\nLe CI ne se limite pas aux tests. Pour maintenir la qualité du code, ajoutez l'analyse statique (PHPStan, Psalm) et la vérification du style (PHP CS Fixer).
\n2.1. Ajout de PHPStan et PHP CS Fixer
\nInstallez-les comme dépendances de développement :
\ncomposer require --dev phpstan/phpstan friendsofphp/php-cs-fixer\nComplétez les étapes dans le 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\nConseil : utilisez --dry-run pour ne pas modifier les fichiers, mais seulement les vérifier. Si le style n'est pas respecté, le CI échouera et le développeur corrigera.
2.2. Mise en cache des dépendances Composer
\nChaque exécution du CI télécharge à nouveau les paquets — c'est long. Activons la mise en cache :
\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\nDésormais, les exécutions répétées seront 2 à 3 fois plus rapides.
\n\n3. Tests avec base de données et services Docker
\nDe nombreuses applications PHP nécessitent MySQL, PostgreSQL ou Redis pour les tests. GitHub Actions permet d'exécuter des conteneurs de services (Service Containers).
\n3.1. Exemple avec MySQL et Laravel
\nSupposons que votre projet utilise Laravel avec MySQL. Ajoutez le service et configurez le .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