Tutoriel : Créer un Pipeline CI/CD avec GitHub Actions¶

Dans ce tutoriel, nous allons mettre en place un pipeline CI/CD (Intégration Continue / Déploiement Continu) pour votre projet utilisant GitHub Actions. Ce pipeline automatisera les tests, la vérification du code et le déploiement de votre application.

Étape 1 : Créer le fichier de workflow¶

  1. Dans votre dépôt GitHub, créez un dossier .github/workflows s'il n'existe pas déjà.
  2. Dans ce dossier, créez un nouveau fichier nommé ci-cd.yml.

Étape 2 : Configurer le workflow¶

Copiez le code suivant dans votre fichier ci-cd.yml :

name: Pipeline CI/CD

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

jobs:
  test:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v2
    - name: Configurer Python
      uses: actions/setup-python@v2
      with:
        python-version: '3.x'
    - name: Installer les dépendances
      run: |
        python -m pip install --upgrade pip
        pip install -r requirements.txt
    - name: Exécuter les tests
      run: python -m unittest discover tests

  lint:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v2
    - name: Configurer Python
      uses: actions/setup-python@v2
      with:
        python-version: '3.x'
    - name: Installer les dépendances
      run: |
        python -m pip install --upgrade pip
        pip install flake8
    - name: Exécuter le linter
      run: flake8 .

  deploy:
    needs: [test, lint]
    runs-on: ubuntu-latest
    if: github.ref == 'refs/heads/main' && github.event_name == 'push'
    steps:
    - uses: actions/checkout@v2
    - name: Déployer sur le serveur
      env:
        PRIVATE_KEY: ${{ secrets.SERVER_SSH_KEY }}
        HOST: ${{ secrets.SERVER_HOST }}
        USER: ${{ secrets.SERVER_USER }}
      run: |
        echo "$PRIVATE_KEY" > private_key && chmod 600 private_key
        ssh -o StrictHostKeyChecking=no -i private_key ${USER}@${HOST} '
          cd /chemin/vers/votre/projet &&
          git pull origin main &&
          pip install -r requirements.txt &&
          sudo systemctl restart nom-de-votre-service
        '

Étape 3 : Comprendre le workflow¶

Ce workflow se compose de trois jobs :

  1. test : Exécute les tests unitaires de votre application.
  2. lint : Vérifie la qualité du code avec flake8.
  3. deploy : Déploie l'application sur votre serveur si les tests et la vérification du code réussissent.

Étape 4 : Configurer les secrets¶

Pour que le déploiement fonctionne, vous devez configurer des secrets dans votre dépôt GitHub :

  1. Allez dans les paramètres de votre dépôt GitHub.
  2. Cliquez sur "Secrets" dans le menu de gauche.
  3. Ajoutez les secrets suivants :
    • SERVER_SSH_KEY : Votre clé SSH privée pour le serveur
    • SERVER_HOST : L'adresse IP ou le nom d'hôte de votre serveur
    • SERVER_USER : Le nom d'utilisateur pour la connexion SSH

Étape 5 : Personnaliser le déploiement¶

Modifiez la section deploy du workflow pour qu'elle corresponde à votre configuration de serveur :

  1. Remplacez /chemin/vers/votre/projet par le chemin réel de votre projet sur le serveur.
  2. Remplacez nom-de-votre-service par le nom du service que vous devez redémarrer.

Étape 6 : Activer le workflow¶

  1. Committez le fichier ci-cd.yml dans votre dépôt.
  2. Poussez les changements sur GitHub.

GitHub Actions détectera automatiquement le nouveau workflow et l'exécutera à chaque push sur la branche principale ou lors de l'ouverture d'une pull request.

Conclusion¶

Vous avez maintenant un pipeline CI/CD fonctionnel pour votre projet ! À chaque push sur la branche principale, vos tests seront exécutés, votre code sera vérifié, et si tout est en ordre, votre application sera automatiquement déployée sur votre serveur.

N'oubliez pas de maintenir vos tests à jour et d'ajouter de nouveaux tests au fur et à mesure que votre projet évolue. Bonne continuation avec votre développement !