Rapatrie l'environnement dev à la demande (#151) et l'en-tête CORP (#149). - deploy.yml : garde le routage de #151 (main vers prod, dev vers rec, toute autre branche vers dev) et l'appel par ci.yml après « CI ok ». Le groupe concurrency par environnement cède la place au flock sur le dossier, qui sérialise aussi deux branches lancées dans dev. La garde anti-recul ne joue que sur la même branche : dans dev, une autre branche que celle en place est toujours déployée. - provision-host.sh : le dossier dev reçoit aussi les clés de supervision, profil inactif, ports 3003, 9092 et 9095. - 10-infra.md, 50-cicd.md et ADR 0017 : trois environnements, supervision et verrou flock.
58 lines
3.0 KiB
Markdown
58 lines
3.0 KiB
Markdown
# 0017 - Un troisième environnement, `dev`, déployé à la demande depuis n'importe quelle branche
|
|
|
|
- Statut : accepté
|
|
- Date : 2026-09-23
|
|
|
|
## Contexte
|
|
|
|
L'[ADR 0009](0009-deux-environnements-compose-sur-la-vm-eni.md) a posé deux environnements sur
|
|
la VM ENI : la recette suit `dev`, la production suit `main`. Les environnements GitHub en
|
|
comptent trois, `dev`, `rec` et `prod`, et le troisième ne déployait rien.
|
|
|
|
Il manque un endroit où montrer une branche de travail avant son merge : la recette ne doit
|
|
porter que ce qui est intégré à `dev`, sinon elle cesse d'être une recette. Un
|
|
`workflow_dispatch` sur une branche de travail envoyait d'ailleurs cette branche dans la
|
|
recette, puisque tout ce qui n'était pas `main` y partait.
|
|
|
|
La VM est passée à 32 Go : une troisième TimescaleDB, réglée à 2 Go comme les deux autres,
|
|
tient sans peine.
|
|
|
|
## Décision
|
|
|
|
**Un troisième projet Compose, `enervision-dev`, dans `/srv/enervision/dev`**, bâti exactement
|
|
comme les deux autres : son clone, son `.env`, son certificat, préparés par
|
|
`scripts/provision-host.sh`.
|
|
|
|
**Déployé à la demande, jamais sur un push.** `deploy.yml` envoie `main` en prod, `dev` en
|
|
recette, et toute autre branche lancée depuis l'onglet Actions dans `dev`. Seul un membre ayant
|
|
le droit d'écriture sur le dépôt peut lancer un workflow.
|
|
|
|
**Ports décalés d'un cran de plus** : HTTPS `9443`, et sur `127.0.0.1` la redirection HTTP
|
|
`8083`, PostgreSQL `5435`, Mailpit `8027`, Airflow `8084`. Nom d'hôte `dev.enervision.local`,
|
|
pour la même raison de cookie que la recette.
|
|
|
|
**Le verrou de déploiement suit l'environnement** (un `flock` sur son dossier, ADR 0014), et non
|
|
plus la branche : deux branches lancées coup sur coup écriraient sinon dans le même dossier en
|
|
même temps.
|
|
|
|
## Alternatives écartées
|
|
|
|
- **`dev` suit la branche `dev` à chaque push, la recette devient manuelle** : la recette
|
|
offrirait une version figée au jury, mais la doc CI/CD, l'ADR 0009 et l'habitude de l'équipe
|
|
basculeraient à deux jours du rendu.
|
|
- **Un environnement par branche de travail** : un projet Compose et une TimescaleDB par
|
|
branche, sans mécanisme de nettoyage. La machine ne le porterait pas longtemps.
|
|
- **Garder `dev` sur les postes seulement** : rien à montrer d'une branche non mergée sans
|
|
passer par la recette.
|
|
|
|
## Conséquences
|
|
|
|
- Une branche de travail créée avant ce changement porte l'ancien `deploy.yml` : lancée à la
|
|
main, elle part encore dans la recette. Limiter l'environnement GitHub `rec` à la branche
|
|
`dev` ferme ce chemin, réglage que seul un administrateur du dépôt peut poser.
|
|
- `dev` ne garde aucune donnée d'une branche à l'autre au-delà de ce que ses migrations
|
|
acceptent : une branche dont les migrations divergent de `dev` peut laisser la base dans un
|
|
état que la suivante refuse. Recréer le volume, `docker compose down -v`, est alors le remède.
|
|
- Trois environnements construisent leurs images séparément : l'écart de l'ADR 0009, un même
|
|
commit construit deux fois, reste ouvert jusqu'au passage à GHCR.
|