Aller au contenu

ADR 0044 – Déploiement continu

Statut : Décidée. Date : 03/10/2026. Complète l’ADR 0028. Modifie l’ADR 0013 : qui exécute les migrations.

Le dépôt n’avait qu’une intégration continue. L’ADR 0028 fixe la cible (API sur Kubernetes, frontends en fichiers statiques sur Cloudflare) sans dire comment on y livre. L’équipe exploite déjà cette chaîne sur d’autres projets : la reprendre évite d’en maintenir deux.

  • Branches : develop livre en QA, main livre en production. Les branches de séquence partent de develop.
  • API : image construite par apps/api/Dockerfile, poussée sur le registre, déployée par helm upgrade --install avec le chart infra/charts/biotrace-api. En QA l’étiquette est v<version>-SNAPSHOT, en production v<version> (version de apps/api/package.json, incrémentée après chaque mise en production).
  • Migrations : un job du pipeline (migrations) lance dbmate migrate depuis le runner, avec le DATABASE_URL de l’environnement GitHub, avant helm upgrade. Un échec arrête le déploiement. L’image de l’API ne contient ni dbmate ni les migrations, et le rôle des migrations n’entre jamais dans le cluster (EC-032).
  • Frontends : back-office, documentation et build web du terrain sur Cloudflare Pages, un projet par application ; seules les applications touchées sont reconstruites (Turborepo).
  • Configuration : variables et secrets dans les environnements GitHub staging (QA) et production. Le pipeline en fait un ConfigMap et un Secret Kubernetes pour l’API.
  • Valeurs dans un dépôt de déploiement séparé (pratique des autres projets) : un dépôt et un jeton de plus, et des mots de passe en clair dans git.
  • Migrations par un Job Kubernetes lancé par Helm (ADR 0013 d’origine) : il oblige à embarquer dbmate et les migrations dans l’image de l’API, et à confier au cluster le rôle des migrations.
  • Manifestes bruts ou Kustomize : pas de notion de version déployée.
  • GitOps (Argo CD, Flux) : un composant de plus sur le cluster, sans besoin avéré à ce stade.

Deux outils de plus dans la chaîne : Helm et wrangler. Les valeurs d’un environnement ne sont pas relues dans git : la liste des variables et secrets attendus est tenue dans infra/README.md. La base doit être joignable depuis le runner du pipeline : son exposition réseau est à maîtriser (adresse filtrée, TLS). Le back-office et l’API ont deux origines : l’API gère le CORS (EC-080).

Le chart ne produit que des objets Kubernetes standard : helm template les donne tels quels à un autre outil. Les frontends sont des fichiers statiques, déployables chez tout hébergeur.