CI/CD¶
Tous les dépôts de l'écosystème utilisent GitHub Actions. Cette page décrit les modèles et conventions communs.
Principes fondamentaux¶
- On vérifie sur la PR, on déploie sur main. Une PR lance la construction
et les tests, et ne déploie rien. Le déploiement ne démarre qu'après la
fusion dans
main. - On ne reconstruit que ce qui a changé.
paths-filterdétermine les parties modifiées et seuls ces services sont reconstruits. - Pas de déploiements concurrents. Un groupe
concurrencymet les déploiements de production en file d'attente pour qu'ils ne se chevauchent jamais. - Les secrets uniquement dans GitHub Secrets. Ils ne sont jamais écrits dans un fichier de workflow.
La forme habituelle d'un workflow¶
name: deploy
on:
push:
branches: [main]
paths:
- 'backend/**'
- 'frontend/**'
- '.github/workflows/deploy.yml'
workflow_dispatch: # possibilité de lancement manuel
concurrency:
group: deploy-production
cancel-in-progress: false # ne jamais interrompre un déploiement en cours
cancel-in-progress: false est essentiel
Un déploiement coupé en plein milieu peut laisser un état incomplet : le nouveau conteneur non démarré, l'ancien déjà arrêté. Il faut laisser le déploiement aller à son terme et mettre le suivant en file d'attente.
L'étape de vérification (PR)¶
| Vérification | Ce qu'elle fait |
|---|---|
| Build | Le code compile-t-il |
| Tests unitaires | Logique métier |
| Tests d'intégration | testcontainers — de vrais PostgreSQL/Redis |
| Lint | Style de code |
| Build strict de la documentation | Détecte les liens cassés et les fichiers manquants |
Le contrôle strict de la documentation¶
MkDocs est construit en mode --strict. Dans ce mode, les avertissements
deviennent des erreurs :
- liens internes cassés,
- fichiers déclarés dans
navmais inexistants, - fichiers existants mais absents de
nav.
Cela empêche une documentation cassée d'atteindre la production.
L'étape de déploiement¶
Elle se connecte à l'hôte en SSH. Les secrets nécessaires (nommage courant) :
| Secret | Signification |
|---|---|
DEPLOY_HOST |
Adresse du serveur |
DEPLOY_USER |
Utilisateur SSH |
DEPLOY_SSH_KEY |
Clé privée |
DEPLOY_PORT |
Port SSH (facultatif, 22 par défaut) |
DEPLOY_PATH |
Chemin sur l'hôte |
Une clé SSH, pas un mot de passe
Le déploiement utilise une clé SSH, pas un mot de passe. Une clé se révoque facilement, risque moins de se retrouver par accident dans les journaux, et se renouvelle sans avoir à la redistribuer à tout un groupe.
Constructions partielles¶
Dans un monorepo, un changement ne doit pas imposer de reconstruire tous les services :
- uses: dorny/paths-filter@v3
id: filter
with:
filters: |
backend: 'backend/**'
frontend: 'frontend/**'
edge: 'nginx/**'
Seuls les services modifiés sont ensuite reconstruits. Si c'est l'edge (nginx)
qui a changé, il n'y a pas de reconstruction complète — seulement une
synchronisation de la config + nginx -t + reload.
Déployer la configuration de l'edge¶
Le conf.d de l'edge nginx est géré par git. Séquence de déploiement :
- Synchroniser le dépôt sur l'hôte avec
git fetch && git reset --hard, docker exec <nginx> nginx -t— valider la configuration,- En cas de succès,
nginx -s reload.
Ne sautez jamais nginx -t
Un reload avec une configuration erronée empêche nginx de redémarrer — et
à cet instant tous les domaines tombent. nginx -t doit s'exécuter avant
le reload, et un échec doit interrompre le déploiement.
Runners auto-hébergés¶
Les builds iOS et Windows (signature de code, notarisation, empaquetage MSIX) utilisent des runners macOS / Windows auto-hébergés. Ils exigent des outils et des certificats propres à la plateforme, et ne peuvent donc pas s'exécuter sur des runners cloud.
Versionnement et rollback¶
- Les images sont taguées. Une variable
<SVC>_IMAGE_TAGsur l'hôte permet d'épingler une version précise. - Pour les sites statiques, on redéploie l'archive de la construction précédente.
La CI/CD de ce dépôt¶
Le dépôt docs-gerege-mn comporte deux workflows :
| Workflow | Quand | Ce qu'il fait |
|---|---|---|
ci.yml |
PR + push sur main |
Build MkDocs --strict ; laisse un artefact |
deploy.yml |
Push sur main + manuel |
Build → copie → mise à jour du conteneur → installation du vhost edge → vérification du site en ligne |
Voir Cette plateforme documentaire pour le détail.