Nouveau : Datasets open source gratuits disponibles !Decouvrir →
🐍
Intermediaire 25 min Django

CI/CD pour Django avec GitHub Actions

Pourquoi CI/CD pour Django avec GitHub Actions ?

La CI/CD (Continuous Integration / Continuous Deployment) est un processus essentiel dans le développement logiciel moderne. Elle permet d'automatiser les étapes de construction, de tests et de déploiement du code source pour une application web. Cela augmente la qualité du code, réduit le temps de livraison et favorise une meilleure collaboration entre les équipes.

Un cas concret est l'intégration continue d'une application Django qui gère un blog. A chaque modification du code, on souhaite que toutes les modifications soient testées automatiquement pour s'assurer qu'elles n'introduisent pas de bugs et que l'application fonctionne toujours correctement.

Prerequis

Pour suivre ce tutoriel, vous aurez besoin des éléments suivants :

  • Un compte GitHub
  • Python 3.8 ou plus récent installé sur votre ordinateur
  • pip (généralement inclus avec Python)
  • Git
  • Virtualenv (pour créer un environnement virtuel)

Concepts fondamentaux

Workflow

Un workflow est une série d'étapes qui sont exécutées automatiquement. Par exemple, dans le cas de Django sur GitHub Actions, un workflow peut comprendre les étapes suivantes :

  1. Lancement du workflow : Lorsqu'un push se fait vers la branche principale.
  2. Chargement du code source : Le code source est téléchargé sur l'agent d'action.
  3. Création de l'environnement virtuel : Un environnement virtuel est créé pour installer les dépendances.
  4. Installation des dépendances : Les dépendances sont installées avec pip.
  5. Exécution des tests : Les tests sont exécutés pour s'assurer que le code fonctionne correctement.
  6. Déploiement (optionnel) : Si les tests passent, l'application peut être déployée sur un serveur.

Actions

Les actions sont des composants individuels qui effectuent une tâche spécifique dans un workflow. Par exemple :

  • actions/checkout@v2 : Cette action permet de charger le code source du dépôt.
  • actions/setup-python@v2 : Cette action configure l'environnement Python.

Triggers

Les triggers définissent quand un workflow doit être lancé. Pour Django sur GitHub Actions, on pourrait utiliser des triggers comme :

on:
  push:
    branches: [ main ]

Cela signifie que le workflow sera lancé chaque fois qu'un commit est poussé sur la branche main.

Mise en pratique : projet fil rouge

Nous allons créer un mini-projet Django simple, qui sera un gestionnaire de tâches basique. Le projet comprendra :

  • Un modèle pour les tâches.
  • Une vue pour afficher et ajouter des tâches.
  • Un template HTML pour l'affichage des tâches.

Étape 1 : Création du dépôt sur GitHub

  1. Connectez-vous à votre compte GitHub.
  2. Cliquez sur le bouton "New" pour créer un nouveau dépôt.
  3. Nommez-le django-todo.

Étape 2 : Clôture et création de l'environnement virtuel

git clone https://github.com/votre_nom_utilisateur/django-todo.git
cd django-todo
virtualenv venv
source venv/bin/activate  # Sous Windows, utilisez `venv\Scripts\activate`

Étape 3 : Initialisation du projet Django

pip install django
django-admin startproject todo .
touch .gitignore
echo "venv/" >> .gitignore

Ajoutez les fichiers suivants au répertoire todo :

  • settings.py : Configurez la base de données SQLite.
  • urls.py : Ajoutez une URL pour l'accueil du site.
  • views.py : Créez une vue pour afficher les tâches.

Étape 4 : Création d'un modèle et des vues

Créez un fichier models.py dans le répertoire todo :

from django.db import models

class Task(models.Model):
    title = models.CharField(max_length=200)
    completed = models.BooleanField(default=False)

    def __str__(self):
        return self.title

Créez un fichier views.py dans le répertoire todo :

from django.shortcuts import render, redirect
from .models import Task

def index(request):
    tasks = Task.objects.all()
    return render(request, 'index.html', {'tasks': tasks})

def add_task(request):
    if request.method == 'POST':
        title = request.POST.get('title')
        task = Task(title=title)
        task.save()
        return redirect('index')
    return render(request, 'add_task.html')

Créez un fichier urls.py dans le répertoire todo :

from django.urls import path
from .views import index, add_task

urlpatterns = [
    path('', index, name='index'),
    path('add/', add_task, name='add_task'),
]

Étape 5 : Création des templates HTML

Créez un répertoire templates dans le répertoire todo, puis créez les fichiers suivants :

  • index.html
  • add_task.html

Fichier index.html :

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Todo List</title>
</head>
<body>
    <h1>Todo List</h1>
    <ul>
        {% for task in tasks %}
            <li>task.title - task.completed</li>
        {% endfor %}
    </ul>
    <a href="{% url 'add_task' %}">Add Task</a>
</body>
</html>

Fichier add_task.html :

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Add Task</title>
</head>
<body>
    <h1>Add Task</h1>
    <form method="POST">
        {% csrf_token %}
        <input type="text" name="title" placeholder="Task Title" required>
        <button type="submit">Add</button>
    </form>
    <a href="{% url 'index' %}">Back to List</a>
</body>
</html>

Étape 6 : Configuration de la base de données

Dans settings.py, configurez la base de données :

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': BASE_DIR / 'db.sqlite3',
    }
}

Étape 7 : Migrations et serveur

python manage.py makemigrations
python manage.py migrate
python manage.py runserver

Accédez à http://127.0.0.1:8000/ pour voir l'application en action.

Erreurs frequentes et debugging

Erreur 1 : Le serveur ne démarre pas

Code incorrect :

python manage.py runserver

Correction :

Certains environnements peuvent avoir des problèmes avec les versions de Python installées. Essayez de spécifier une version particulière :

python3.8 -m django runserver

Erreur 2 : Les tests échouent

Code incorrect :

python manage.py test

Correction :

Vérifiez que tous les fichiers de test sont correctement importés et configurés. Assurez-vous que le modèle est correctement défini et que la vue retourne les données attendues.

Erreur 3 : Le déploiement échoue

Code incorrect :

## .github/workflows/deploy.yml
name: Deploy

on:
  push:
    branches: [ main ]

jobs:
  build-and-deploy:
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v2
      - name: Set up Python 3.8
        uses: actions/setup-python@v2
        with:
          python-version: '3.8'
      - name: Install dependencies
        run: |
          python -m pip install --upgrade pip
          pip install -r requirements.txt
      - name: Run tests
        run: python manage.py test

Correction :

Assurez-vous que les dépendances nécessaires sont mentionnées dans requirements.txt. Si vous utilisez des services de déploiement, vérifiez les paramètres et la configuration.

Pour aller plus loin

  1. Tests fonctionnels avec Selenium : Ajoutez des tests fonctionnels pour simuler l'interaction utilisateur.
  2. Déploiement sur Heroku : Configurez un pipeline GitHub Actions pour déployer votre application Django sur Heroku.
  3. Intégration avec Docker : Utilisez Docker pour créer une image conteneurisée de votre application.

Défi pratique

Implémentez une fonctionnalité supplémentaire à votre gestionnaire de tâches, par exemple :

  • Une fonction pour marquer les tâches comme terminées.
  • Un système d'authentification utilisateurs.

Besoin d'aide sur Django ?

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 Django ?
Pour configurer GitHub Actions pour un projet Django, vous devez créer un fichier `.github/workflows/main.yml` dans votre dépôt GitHub. Ce fichier doit contenir des étapes définissant l'environnement d'exécution, les dépendances nécessaires et le processus de déploiement.
Quelles sont les meilleures pratiques pour optimiser la performance des tests unitaires dans un projet Django lors de la mise en œuvre du CI/CD ?
Pour optimiser les performances des tests unitaires, il est recommandé d'utiliser des échantillons de données réduits et de paramétrer correctement le cache pour les packages Python. Il faut également s'assurer que les tests ne modifient pas la base de données ni l'environnement global.
Comment gérer les dépendances dans un projet Django lors de la mise en œuvre du CI/CD ?
Pour gérer les dépendances, vous devriez utiliser `pipenv` ou `poetry` pour créer et gérer un environnement virtuel isolé. Dans le fichier `.github/workflows/main.yml`, vous pouvez installer les dépendances en utilisant la commande appropriée pour chaque gestionnaire de dépendance.

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.