CI/CD und Migrationen
Status: Entwurf · Spec-Kandidat: ja
Anforderungen
- CI/CD-fähige Bereitstellung (NFR-007).
- Migrationswerkzeug Pflicht (Datenbankschema versioniert).
- Lint- und Testpflicht vor Merge.
- Reproduzierbare Builds (deterministische Container-Images).
Source-Hosting + Build-Pipeline (gesetzt)
- Quellcode liegt auf GitHub. Pro Service ein eigenes Repository (oder ein gemeinsamer Mono-Repo-Pfad — Detail offen, abhängig von Stack-Wahl).
- Image-Build erfolgt durch Coolify über die
docker-compose.yamldes jeweiligen Repos. Coolify zieht den GitHub-Branch (typischmainfür Prod,stagingfür Test), baut Multi-Stage-Image lokal auf der Coolify-Instanz und deployt rolling. - Kein externes Image-Registry nötig: Coolify hält gebaute Images lokal. Wer ein dediziertes Registry möchte (z. B. GHCR), kann in Coolify auf Pre-Build via GitHub Actions umstellen — derzeit nicht erforderlich.
- Trigger: Push auf den deploy-Branch löst Build + Deploy aus (Webhook von GitHub auf Coolify).
- Tests vor Merge laufen in GitHub Actions (kostenfrei für öffentliche und in den Free-Tier-Limits private Repos): Lint, Unit, Integration. Erst grüner Run → Merge → Coolify-Deploy.
Migrationen
- Alle Änderungen am
mdm-Schema sind versioniert. - Reine Metadaten-Änderungen (neuer Entitätstyp, neues Attribut) erfolgen nicht über Migrationen, sondern über die API. Damit bleibt NFR-004 erfüllt.
- Datenbank-Funktionen, Trigger und Views sind ebenfalls Bestandteil der Migrationen.
- Rollback-Strategie pro Migration definiert (dokumentierter Forward-Fix als Standard).
- Migrations-Ausführung im Deploy:
migrate-Service imdocker-compose.yamlals One-Shot-Job (depends_on der App), odercommand:-Override im App-Container vor Start.
Pipeline-Stufen (Skizze)
GitHub Actions (vor Merge auf deploy-Branch):
- Lint / Static Analysis
- Unit Tests
- Integrationstests gegen ephemere PostgreSQL (Service-Container)
- Sicherheits-Scan (Abhängigkeiten, optional Image)
Coolify (nach Push auf deploy-Branch):
git pull→ Build viadocker-compose.yaml- Run Migrations-Job
- Rolling-Deploy mit Health-Check
- Bei Fehler: vorheriger Container bleibt, kein Traffic-Switch
Manuelle Freigabe für Produktion über getrennten Branch / Environment in Coolify.
Offen
- Wahl Migrationswerkzeug (Liquibase, Flyway, golang-migrate, Atlas, sqlx-migrate, …) — abhängig von Stack-Wahl (siehe Tech-Stack-Entscheidung).
- Strategie für lange laufende Migrationen (Lock-Vermeidung, Online-Schemaänderungen).
- Branch-Konvention:
main/staging/productionvs. trunk-based mit Tags. Abhängig von Team-Größe. - Mono-Repo vs. Multi-Repo (API + Worker + Frontend) — Stack-Wahl entscheidet das mit.