Taha @ MJTHD
/
GitHub
Blog
·1 Min. Lesezeit

Eine Seite mit Gitea CI und ArgoCD ausliefern

Die Deploy-Pipeline hinter dieser Seite: einmal bauen, aus Git synchronisieren, zwei Domains auf einen Service routen.

kubernetesgitopsci

Diese Seite läuft auf einem selbstgehosteten Kubernetes-Cluster. Das Deployment ist bewusst langweilig — langweilig ist genau das, was man um 2 Uhr nachts will.

Die Pipeline

Ein Push auf main startet einen Gitea-Actions-Workflow:

  1. Abhängigkeiten installieren, die Next.js-App bauen
  2. ein Standalone-Container-Image bauen
  3. es mit sha-<short> und latest taggen, in die Registry pushen

Auf dem Cluster wird kein Image gebaut. Das Build-Artefakt ist immutable und über den Commit content-adressiert.

Die Synchronisation

ArgoCD beobachtet das k8s/-Verzeichnis in diesem Repo. Ändert sich das Deployment-Manifest — oder ein Mensch erhöht den Image-Tag — gleicht ArgoCD den Cluster an Git an. selfHeal macht manuellen Drift rückgängig, prune entfernt gelöschte Ressourcen.

syncPolicy:
  automated:
    prune: true
    selfHeal: true
  syncOptions:
    - CreateNamespace=true
    - ServerSideApply=true

Zwei Domains, ein Service

Traefik terminiert TLS für beide Domains taha.moujtahid.com und taha.mjthd.com, mit Zertifikaten von cert-manager gegen Let's Encrypt. Beide Hosts zeigen auf denselben ClusterIP-Service — es läuft genau eine App.

Das Ergebnis: Code schreiben, pushen, und die Änderung ist in ein paar Minuten live — mit einem Zertifikat, das sich selbst erneuert.