Nouveau : Datasets open source gratuits disponibles !Decouvrir →
🐘
Intermediaire 25 min Laravel

CI/CD pour Laravel avec GitHub Actions

CI/CD pour Laravel avec GitHub Actions

Pourquoi CI/CD pour Laravel avec GitHub Actions ?

Dans un environnement de développement moderne, la continuité intégration et livraison (CI/CD) jouent un rôle crucial pour améliorer la qualité du code, accélérer le déploiement et assurer une meilleure collaboration entre les membres d'une équipe. Avec un projet Laravel, GitHub Actions offre une solution complète et flexible pour mettre en place des pipelines CI/CD.

Un cas concret : Imaginez que vous travaillez sur un gestionnaire de tâches pour une application web. Chaque fois qu'un développeur effectue des modifications dans le code source, il serait préférable d'automatiser les tests unitaires et d'intégration, ainsi que le déploiement sur un environnement de production sécurisé.

Prerequis

  • Connaissance approfondie de Laravel
  • Compréhension des concepts de CI/CD
  • Un compte GitHub avec accès au service Actions
  • Node.js (pour les tests frontaux si applicable)
  • Composer (pour gérer les dépendances PHP)

Concepts fondamentaux

1. Workflow : Definition du pipeline

Un workflow est un processus automatisé qui définit comment le code source doit être traité à chaque push ou pull request sur le dépôt GitHub.

## .github/workflows/laravel.yml
name: Laravel CI/CD

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

jobs:
  build:

    runs-on: ubuntu-latest

    steps:
    - uses: actions/checkout@v2

2. Job : Un groupe d'étapes à exécuter

Un job est un ensemble d'étapes qui s'exécutent dans le même environnement.

## .github/workflows/laravel.yml
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v2

3. Step : Une étape spécifique

Une étape est une action spécifique qui exécute un script ou utilise une image préconstruite.

## .github/workflows/laravel.yml
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v2
    - name: Set up PHP
      uses: shivammathur/setup-php@v2
      with:
        php-version: '8.1'

4. Run : Exécuter un script

Vous pouvez exécuter des scripts shell directement dans les étapes.

## .github/workflows/laravel.yml
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v2
    - name: Install dependencies
      run: composer install --no-dev --optimize-autoloader

5. Cache : Optimiser les performances des builds

Le cache permet d'accélérer le processus de build en réutilisant les dépendances déjà installées.

## .github/workflows/laravel.yml
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v2
    - name: Set up PHP
      uses: shivammathur/setup-php@v2
      with:
        php-version: '8.1'
    - name: Cache Composer dependencies
      id: composer-cache
      run: echo "::set-output name=dir::vendor"
    - name: Install dependencies
      run: composer install --no-dev --optimize-autoloader
      env:
        COMPOSER_MEMORY_LIMIT: "-1"

Mise en pratique : Projet fil rouge

1. Créer un nouveau projet Laravel

composer create-project --prefer-dist laravel/laravel task-manager
cd task-manager
git init
git add .
git commit -m "Initial commit"
git branch -M main
git remote add origin <votre-url-github>
git push -u origin main

2. Configurer le workflow GitHub Actions

Créer un fichier .github/workflows/laravel.yml avec le contenu suivant :

## .github/workflows/laravel.yml
name: Laravel CI/CD

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

jobs:
  build:

    runs-on: ubuntu-latest

    steps:
    - uses: actions/checkout@v2
    - name: Set up PHP
      uses: shivammathur/setup-php@v2
      with:
        php-version: '8.1'
    - name: Cache Composer dependencies
      id: composer-cache
      run: echo "::set-output name=dir::vendor"
    - name: Install dependencies
      run: composer install --no-dev --optimize-autoloader
      env:
        COMPOSER_MEMORY_LIMIT: "-1"
    - name: Run tests
      run: vendor/bin/phpunit

  deploy:

    needs: build
    runs-on: ubuntu-latest

    steps:
    - uses: actions/checkout@v2
    - name: Set up PHP
      uses: shivammathur/setup-php@v2
      with:
        php-version: '8.1'
    - name: Cache Composer dependencies
      id: composer-cache
      run: echo "::set-output name=dir::vendor"
    - name: Install dependencies
      run: composer install --no-dev --optimize-autoloader
      env:
        COMPOSER_MEMORY_LIMIT: "-1"
    - name: Deploy to production
      uses: appleboy/scp-action@master
      with:
        host: $secrets.PRODUCTION_HOST
        username: $secrets.PRODUCTION_USER
        password: $secrets.PRODUCTION_PASSWORD
        port: 22
        source: "app/**"
        target: "/var/www/task-manager/public_html/app"

3. Ajouter des variables d'environnement

Aller dans les paramètres de votre dépôt GitHub et ajouter les variables suivantes :

  • PRODUCTION_HOST
  • PRODUCTION_USER
  • PRODUCTION_PASSWORD

4. Push le code et vérifier le pipeline

Faites un commit et push sur la branche main, puis allez sur l'onglet Actions de votre dépôt GitHub pour voir le pipeline en cours d'exécution.

Erreurs frequentes et debugging

1. Erreur : Problème avec les dépendances Composer

## ❌ Mauvais
composer install --no-dev --optimize-autoloader
bash
## ✅ Correct
composer install --no-dev --prefer-dist --optimize-autoloader

2. Erreur : Tests unitaires échouent

## ❌ Mauvais
vendor/bin/phpunit
bash
## ✅ Correct
vendor/bin/phpunit --filter "TaskControllerTest"

3. Erreur : Déploiement SCP échoue

## ❌ Mauvais
- name: Deploy to production
  uses: appleboy/scp-action@master
  with:
    host: $secrets.PRODUCTION_HOST
    username: $secrets.PRODUCTION_USER
    password: $secrets.PRODUCTION_PASSWORD
    port: 22
    source: "app/**"
    target: "/var/www/task-manager/public_html/app"
yaml
## ✅ Correct
- name: Deploy to production
  uses: appleboy/scp-action@master
  with:
    host: $secrets.PRODUCTION_HOST
    username: $secrets.PRODUCTION_USER
    password: $secrets.PRODUCTION_PASSWORD
    port: 22
    source: "app/**"
    target: "/var/www/task-manager/public_html/app"

Pour aller plus loin

1. Tests frontaux avec PHPUnit

Ajoutez des tests frontaux à votre projet Laravel et configurez GitHub Actions pour les exécuter.

2. Déploiement sur Docker

Utilisez Docker pour déployer votre application sur un conteneur, ce qui facilite la mise en production et le scaling.

3. Utilisation de Laravel Forge

Forge est une plateforme pour gérer facilement les déploiements Laravel, il peut être intégré avec GitHub Actions pour un déploiement automatisé et sécurisé.

Défi pratique : Créez une application API RESTful en utilisant Laravel, ajoutez des tests unitaires et d'intégration, puis configurez GitHub Actions pour le build et le déploiement sur un environnement de production.

Besoin d'aide sur Laravel ?

Besoin d'aide sur un projet technique ? Decrivez-le pour des conseils personnalises.

Recevoir des conseils

Questions frequentes

Comment configurer GitHub Actions pour un projet Laravel?
Pour configurer GitHub Actions sur votre projet Laravel, vous devez créer un fichier `.github/workflows/laravel.yml` dans le répertoire racine de votre projet. Ce fichier doit contenir des étapes pour installer les dépendances, exécuter les tests et déployer votre application.
Quelles sont les avantages de l'utilisation de GitHub Actions pour Laravel?
GitHub Actions permet d'automatiser le processus de développement continu (CI) et du déploiement continu (CD) pour Laravel, en vous assurant que votre application est toujours testée et prête à être déployée. Cela augmente la productivité et réduit les erreurs humaines.
Comment puis-je ajouter des étapes de déploiement sur GitHub Actions?
Pour ajouter des étapes de déploiement sur GitHub Actions, vous pouvez modifier le fichier YAML du workflow. Par exemple, vous pouvez ajouter une étape pour déployer votre application sur un serveur distant ou utiliser des services en ligne comme Heroku ou Vercel.

Pages liees

Chaque semaine, le meilleur de la tech francaise

Tendances, salaires, outils et opportunites — directement dans votre boite mail.

Gratuit. Desabonnement en un clic. Pas de spam.