Aller au contenu

CI/CD — Options de déploiement automatique après git push

Résumé

GitHub Actions est en production sur PsychoEnLigne depuis le 20260513. Tout push sur main touchant BackEnd/ ou FrontEnd/ déclenche automatiquement le déploiement Docker, quelle que soit la source (PC local, VPS, Claude Code). La notification Telegram arrive en fin de déploiement.

Voir PsychoEnLigneV2/architecture/workflow-developpement-deploiement pour le contexte complet des deux workflows.


Principe

Un CI/CD réagit automatiquement à un événement git (push sur main) et exécute une suite d'actions définies dans un fichier de configuration — ici : se connecter au VPS et lancer deploy.sh.


Option 1 — GitHub Actions (recommandée)

Fichier .github/workflows/deploy.yml dans le repo :

"À chaque push sur main, si des fichiers BackEnd/ ou FrontEnd/ ont changé → SSH sur le VPS → deploy.sh"

  • GitHub héberge le runner (machine d'exécution)
  • La clé SSH privée du VPS est stockée comme "secret" dans les paramètres du repo GitHub
  • Condition sur les fichiers modifiés possible (même logique que SKILL.md step 3b)

Avantages : gratuit, logs visibles dans GitHub UI, aucun composant à installer sur le VPS.
Inconvénient : dépend de GitHub, délai ~30-60 secondes avant démarrage du job.


Option 2 — Webhook GitHub → VPS

GitHub envoie une requête HTTP (POST) vers le VPS à chaque push. Un listener léger (outil webhook en Go) reçoit la requête et lance deploy.sh.

Avantages : quasi-instantané (~2s), indépendant de l'infrastructure GitHub.
Inconvénient : faut exposer un port sur le VPS, gérer la sécurité du webhook (secret partagé).


Comparaison

GitHub Actions Webhook Hermes /cc
Déclenché par push GitHub push GitHub commande Telegram
Délai ~30-60s ~2s immédiat
Config fichier dans le repo listener sur VPS SKILL.md
Logs GitHub UI fichier sur VPS Telegram

Recommandation

GitHub Actions est le choix le plus simple à mettre en place et à maintenir. Il résout exactement le problème : dès que Claude Code ou l'utilisateur fait un push, le déploiement part automatiquement sans passer par Telegram.

Le webhook est une bonne alternative si on veut éviter la dépendance GitHub ou gagner en réactivité.


Implémentation finale validée en production (20260513)

Workflow .github/workflows/deploy.yml

Points clés du fichier final : - concurrency: cancel-in-progress: true — un seul déploiement à la fois, le plus récent annule l'ancien - su - kanmaber -c "git pull" sur l'hôte VPS avant d'appeler deploy.sh — le container n'a pas de clé SSH GitHub - appleboy/ssh-action@v1 pour le SSH depuis GitHub vers le VPS

Problèmes rencontrés et résolus

Problème Cause Solution
SSH auth failed (handshake) Mauvaise clé dans le secret GitHub (clé publique au lieu de privée) Générer une clé dédiée ~/.ssh/github_actions, copier la privée dans le secret
git pull échoue dans le container Pas de clé SSH GitHub dans Hermes Pull sur l'hôte VPS via su - kanmaber dans le script GitHub Actions
Permission denied on .git/ Root avait créé des fichiers dans .git/ chown -R kanmaber:kanmaber /home/kanmaber/projets/PsychoEnLigne/.git
fatal: dubious ownership dans deploy.sh Git 2.35+ refuse les volumes avec owner différent du user courant git config --global --add safe.directory "$PROJECT_DIR" au début de deploy.sh
Token Telegram invalide (404) Token tronqué/obsolète dans .env projet Copier le token depuis /home/kanmaber/hermes/data/.env
Race condition double déploiement Deux commits rapprochés → deux jobs simultanés concurrency: cancel-in-progress: true dans deploy.yml

Liens connexes