Un pipeline CI/CD robuste est l'investissement le plus rentable d'un projet. J'ai vu des équipes senior passer des heures à déboguer des régressions qui auraient été détectées en 2 minutes par des tests automatisés. Voici comment ne pas faire cette erreur.
Ce que votre pipeline doit faire (dans cet ordre)
- Lint :
ruff check+ruff format --check— détecte les erreurs syntaxiques et de style - Tests :
pytestavec coverage — valide le comportement - Sécurité :
bandit(vulnérabilités Python) +safety(dépendances CVE) - Build Docker : construit l'image de production
- Deploy : seulement si tout ce qui précède est vert, seulement sur
main
Le workflow GitHub Actions complet
name: CI/CD Django
on: [push, pull_request]
jobs:
test:
runs-on: ubuntu-latest
services:
postgres:
image: postgres:16
env:
POSTGRES_PASSWORD: test
options: >-
--health-cmd pg_isready
--health-interval 10s
env:
DATABASE_URL: postgres://postgres:test@localhost/test
DJANGO_SECRET_KEY: ci-only-key
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: "3.12"
cache: pip
- run: pip install -r requirements.txt
- run: ruff check .
- run: pytest --cov=. --cov-report=xml -n auto
- run: bandit -r . -x tests/
Optimiser les temps de build : de 8 min à 2 min
- uses: actions/cache@v4
with:
path: ~/.cache/pip
key: ${{ runner.os }}-pip-${{ hashFiles('requirements.txt') }}
Ce cache seul réduit l'étape d'installation de 3 min à 15 secondes quand requirements.txt n'a pas changé. Ajoutez pytest -n auto pour les tests en parallèle.
Les 5 erreurs CI les plus fréquentes
- Tests qui passent en CI mais échouent en prod : la CI utilise SQLite, la prod PostgreSQL. Toujours utiliser PostgreSQL en CI via service Docker.
- Variables d'environnement manquantes : créez un
settings_ci.pyminimal avec toutes les variables requises. - Tests dépendants de l'ordre : utilisez
pytest-randomlypour détecter ces cas. - Secrets en clair dans les logs : vérifiez les logs avant de merger.
- Migrations non commitées : ajoutez
python manage.py migrate --checkdans la CI.
Métriques à surveiller après 3 mois
- Durée moyenne du pipeline : < 8 minutes
- Taux d'échec : < 5% (les échecs légitimes doivent être rares)
- Couverture de tests : en hausse continue, jamais en baisse
Un pipeline CI lent ou instable sera contourné. Investissez dans sa fiabilité.