5.4 · Déploiement & CI/CD (GitHub Actions, cloud)

Niveau 5 · Niveau pro & industrialisation

5.4Déploiement & CI/CD (GitHub Actions, cloud)

Objectif : Mettre en production une app Python et automatiser tests + déploiement.
Temps estimé : 16 min · lecture autonome · Si vous n'avez que 5 min : lisez « L'essentiel en 30s » + le schéma.

L'essentiel en 30 secondes

  • CI gardienne : à chaque push, checkout → install → ruff + pytest — le rouge bloque, le vert autorise.
  • Livrer versionné : image Docker au registre ou plateforme connectée au dépôt — chaque mise en ligne est traçable.
  • Prod sobre : secrets hors YAML, logs et /health, rollback testé — déployer, c'est pouvoir revenir.

Mini-cas filé — Nabil met en ligne à Alger

L'analyse conteneurisée de Nabil tourne bien — mais seulement sur les postes de l'équipe à Alger. Il la met en ligne : dépôt Git connecté, workflow GitHub Actions qui lance ruff et pytest à chaque push, image versionnée livrée sur une plateforme connectée au dépôt, logs et endpoint de santé en place. Dernier épisode des cas 5.1-5.3 — Nabil boucle du code pro à l'app vivante.

Dernier épisode des cas 5.1-5.3 — Nabil boucle conception, async et Docker avec la mise en production.

1. La CI : tester à chaque push

Le workflow GitHub Actions est le gardien : checkout → installer Python → pip install -r requirements → ruff + pytest. Chaque push est prouvé en minutes : le rouge bloque la fusion, le vert autorise. La CI n'est pas une option qu'on « mettra plus tard » — elle est en place dès le premier test. Nabil provoque volontairement un échec pour voir l'alerte : le jour où ça casse pour de vrai, il saura lire le rouge.

Le badge vert du README prouve l'exigence : style + tests à chaque changement, sans intervention humaine.

2. Livrer : image ou plateforme

Deux voies complémentaires. L'image Docker poussée au registre (voir 5.3) : traçable, reproductible, déployée où on veut. Ou la plateforme connectée au dépôt (type Render, Railway, Fly et équivalents) : chaque push vert met le site à jour automatiquement — simple pour débuter. Secrets en secrets du dépôt, jamais dans le YAML : la prod se configure, elle ne se code pas. Nabil compare les offres au moment de choisir (les formules évoluent) et vise la voie simple d'abord, le contrôle ensuite.

Dans les deux cas, chaque livraison est versionnée (tags, SHA) : on sait exactement quoi est en ligne.

3. Le minimum prod : logs, santé, rollback

Déployer = pouvoir revenir. Le minimum : logs structurés (logging), endpoint /health pour la supervision, versions pour revenir en arrière. Sans rollback testé, chaque mise en prod est un saut sans parachute. Nabil teste le retour avant le grand soir : le jour d'un incident, il restaure au lieu d'improviser — et fait valider le choix d'infrastructure et les accès par sa DSI avant d'exposer des données réelles.

Sans ce trio, on ne déploie pas : on parie.

Erreur d'interprétation fréquente : « La CI, on la mettra plus tard — et les secrets peuvent rester dans le YAML, c'est pratique ». Non. Sans CI dès le premier test, les régressions partent en prod en silence ; plus tard, c'est jamais. Et un secret dans le YAML versionné y reste lisible pour quiconque accède au dépôt : secrets en secrets du dépôt / variables d'environnement, jamais en clair.
Livrer en confiance Prouver en CI, livrer versionné, revenir si besoin CI (ruff+pytest) Prouverà chaque pushLivraison (versionnée) Imageou plateformeRollback (testé) Revenirsi besoin
Prouver en CI, livrer versionné, revenir si besoin
Version texte du schéma (SEO / lecteurs d'écran / traduction) : 1) CI : Nabil pousse à Alger, le workflow installe et lance ruff + pytest — le rouge bloque. 2) Livraison : si vert, image versionnée ou plateforme connectée met en ligne. 3) Prod : logs, /health et rollback testé ; secrets hors YAML. Leçon : prouver, livrer versionné, pouvoir revenir.

🔎 Exemple concret — Le workflow de Nabil

Style + tests à chaque push, badge vert en preuve.

name: ci
on: [push]
jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-python@v5
        with: {python-version: "3.12"}
      - run: pip install -r requirements.txt
      - run: ruff check . && pytest -q

Lecture : style + tests à chaque push — le rouge bloque la fusion.

Leçon : le badge vert du README prouve l'exigence en continu.

Vocabulaire de la section

Déploiement
Rendre l'app accessible en ligne, hors de votre poste.

Exemple simple : L'analyse de Nabil quitte localhost pour une adresse publique.

Ce que ce n'est pas : un script qui ne tourne que sur son PC.

Réflexe : mon app est-elle joignable hors de mon poste ?

CI
Tester automatiquement chaque changement, dès le premier test.

Exemple simple : Chaque push de Nabil lance ruff et pytest.

Ce que ce n'est pas : des tests lancés à la main quand on y pense.

Réflexe : un push peut-il passer sans preuve ?

Pipeline
Suite d'étapes auto (tests, build, déploiement) déclenchée à chaque push.

Exemple simple : Le workflow de Nabil : installer, contrôler, tester.

Ce que ce n'est pas : une mise en ligne manuelle à coups de copier-coller.

Réflexe : ma livraison est-elle reproductible ?

GitHub Actions
Pipelines décrits en YAML versionné dans .github/workflows.

Exemple simple : Le fichier ci.yml de Nabil, relu comme du code.

Ce que ce n'est pas : un serveur mystérieux qui déploie on ne sait comment.

Réflexe : mon pipeline est-il versionné et relisible ?

Rollback
Revenir à la version précédente, testé avant le besoin.

Exemple simple : Nabil restaure la version précédente après un incident.

Ce que ce n'est pas : réparer en panique directement en prod.

Réflexe : ai-je testé mon retour en arrière ?

En pratique — Automatiser tests et déploiement

  1. Versionnez votre projet avec Git et poussez-le sur un dépôt GitHub (git init, add, commit, push).
  2. Créez un workflow GitHub Actions (.github/workflows/ci.yml) qui installe les dépendances et lance pytest à chaque push.
  3. Vérifiez dans l'onglet « Actions » que le pipeline s'exécute et passe au vert ; provoquez un échec de test pour voir l'alerte.
  4. Déployez l'application sur une plateforme cloud (Render/Railway) connectée au dépôt : chaque push met le site à jour automatiquement.
Vous avez un pipeline CI/CD qui teste et déploie automatiquement à chaque modification : votre application est en ligne, fiable et maintenue. Parcours bouclé !

Script prêt à dire — annoncer la mise en ligne

« Notre analyse est prête à sortir de localhost : je mets la CI dès le premier test — ruff et pytest à chaque push, le rouge bloque. Je livre versionné via la plateforme connectée au dépôt, secrets en secrets du dépôt, logs et endpoint de santé en place, rollback testé. Avant d'exposer des données réelles, je fais valider l'infrastructure et les accès par la DSI. »

À dire au responsable pour faire valider la mise en ligne et le circuit DSI sur les données sensibles.

Modèle copier-coller — workflow CI Python générique

name: ci
on: [push]
jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-python@v5
        with: {python-version: "3.12"}
      - run: pip install -r requirements.txt
      - run: ruff check . && pytest -q

Solo / petit budget

Nabil seul : le workflow minimal (ruff + pytest) suffit — la CI gratuite du dépôt garde la prod.

TPE / équipe réduite

Badge vert + rouge qui bloque la fusion : personne ne livre sans preuve, même pressé.

PME à Alger

Nabil fait valider hébergeur, accès et sauvegardes par la DSI à Alger avant d'exposer des données réelles.

Équipe qui démarre

Binôme : l'un écrit le workflow, l'autre vérifie secrets, /health et rollback ; revue avant la première prod.

Prudence : Secrets : ne mettez jamais identifiants, clés ni jetons en clair dans le YAML, le code ou le dépôt — utilisez les secrets du dépôt et les variables d'environnement. Coûts cloud : les formules et paliers évoluent souvent, comparez les offres et surveillez la consommation au moment de choisir, sans vous engager à l'aveugle. Données sensibles : faites valider le choix d'infrastructure et les accès par la DSI (et un juriste si besoin) avant d'exposer des données réelles.

✓ Bonnes pratiques

  • CI dès le premier test : le vert autorise, le rouge bloque.
  • Secrets en secrets du dépôt, jamais en clair dans le YAML.
  • Rollback testé avant la prod : déployer, c'est pouvoir revenir.

✗ Pièges fréquents

  • « On mettra la CI plus tard » (les régressions partent en silence).
  • Secrets en clair dans le YAML versionné.
  • Déployer sans retour possible ni supervision (/health, logs).

Points clés à retenir

  • Le déploiement rend l'application accessible en ligne (cloud/PaaS).
  • La CI/CD automatise tests et mise en ligne à chaque changement du code.
  • GitHub Actions décrit les pipelines dans un fichier YAML versionné.
  • Git/GitHub est le socle : versionnement, collaboration et déclencheur des pipelines.

Défi 48h — appliquez demain

Ajoutez le workflow ci-dessus à 1 dépôt : pousse-t-il au vert — et le rouge bloque-t-il après un échec provoqué ?

Checklist sortie de section
  • Je peux expliquer CI vs CD en une phrase.
  • Mon workflow teste à chaque push (vert prouvé).
  • Je sais où vont les secrets (hors YAML).
Auto-évaluation 1-5 : ma livraison est-elle prouvée et traçable ?aucun secret ne traîne-t-il dans mon dépôt ?

Questions fréquentes

Qu'apporte la CI/CD par rapport à un déploiement manuel ?

Elle supprime les erreurs humaines et le temps perdu : à chaque modification, les tests s'exécutent automatiquement et, s'ils passent, l'application est mise en ligne sans intervention. On livre plus souvent, plus vite et plus sûrement — un standard des équipes modernes. Et le rouge qui bloque la fusion vaut tous les rappels à l'ordre.

Où héberger une application Python à moindre coût ?

Des plateformes connectées au dépôt (type Render, Railway, Fly et équivalents) proposent des paliers d'entrée et un déploiement automatique depuis GitHub : idéal pour débuter. Pour plus de contrôle, les grands clouds sont plus puissants mais plus complexes — à réserver aux besoins qui le justifient. Comparez les offres au moment de choisir (elles évoluent) et faites valider par la DSI avant d'exposer des données sensibles.

Vérifiez votre compréhension

Que fait un pipeline CI/CD (ex. GitHub Actions) ?

Ressources supplémentaires (optionnel, pour aller plus loin)

Examen du niveau 5Questions inédites et durcies pour valider vos acquis