Deployment

Deployment-Repo mit der CI-Component

Zielgruppe: Anwender und Betreuer · Stand: 06.11.2026

Alle Terraform/OpenTofu-Deployments laufen über dieselbe GitLab-CI-Component. Ein Deployment-Repo bindet sie ein und bekommt damit Stages, Promotion, Freigaben, Destroy und die Ansible-Umgebung, ohne eigene Pipeline-Logik.

Voraussetzungen

Vorgehen

  1. .gitlab-ci.yml auf das include der Component reduzieren:

    include:
      - component: $CI_SERVER_FQDN/cloud-core-infrastructure/ci-components/deployment/terraform@<version>
        inputs:
          enabled-stages: "development,staging"
          root-config: proxmox
    
    • <version>: immer eine feste Version bzw. einen SHA, nie einen Branch
  2. Keine eigenen stages: und keinen workflow: definieren. Eigene Jobs nutzen extends: .deployment:base.

  3. Projekt einrichten: scripts/setup-project.sh <projekt> aus dem Component-Repo legt Trigger-Token, Push-Rechte und den Default-Branch pre-development an.

  4. Bei root-config: proxmox gehört die erzeugte deployment.generated.tf in die .gitignore. Backend und Standard-Provider bringt die Component dann mit.

  5. Braucht das Repo Secrets aus OpenBao: openbao-jwt-role und openbao-addr setzen (siehe Pipeline per GitLab-JWT anmelden).

Prüfen

Die Pipeline auf pre-development zeigt die Jobs plan, apply-freigeben und deploy. Der Plan ist im Job-Log lesbar.

Stolperfallen

Weiterführend

Merge heißt Deploy

Zielgruppe: Anwender und Betreuer · Stand: 06.11.2026

Ein Merge auf einen Stage-Branch ist kein Code-Review-Abschluss, sondern der Start eines Deployments. Je nach Pin der CI-Component wird sofort angewendet oder erst nach einem Klick. Und je nach Repo wandert der Commit danach weiter in die nächste Stage.

Behandle jeden Merge auf pre-development, development, staging oder production wie ein Deployment. Sieh dir den Plan an, bevor du mergst.

Was ein Merge auslöst

Aktuelle Component (mit Freigabe-Gate):

  1. plan plant und legt den Plan geschützt ab.
  2. apply-freigeben wartet auf einen manuellen Klick.
  3. deploy wendet genau diesen Plan an.

Ältere Pins (ohne Gate): Ein Merge auf pre-development plant und wendet sofort an, ohne Klick.

Promotion: Danach wandert der Commit nach den Regeln der Kaskade weiter. Bei älteren Pins ging das bis development und staging automatisch, z. B. bei den Breeze- und Freeze-Project-Deployern. Mit der aktuellen Component ist der Schritt nach development manuell.

Vorgehen vor einem Merge

  1. Den Pin der Component im Repo prüfen: Gibt es apply-freigeben?
  2. Den Plan gegen den Ziel-State ansehen (MR-Pipeline oder ein Lauf nur mit Plan).
  3. Auf unerwartete Replaces achten. Drift durch neue Modul- oder Rollenversionen läuft im selben Apply mit.
  4. Mehrere MRs im selben Repo nacheinander mergen, dazwischen rebasen und neu planen.
  5. Bei Repos mit Promotion klären, ob die Änderung weiterwandern soll.

Stolperfallen

Ein Merge, der „nur etwas hinzufügt“, kann trotzdem Replaces anwenden, wenn sich seit dem letzten Lauf Module oder Rollen geändert haben.

Weiterführend

Rollen und Module versionieren

Zielgruppe: Betreuer · Stand: 06.11.2026

Terraform-Module und Ansible-Rollen werden unterschiedlich versioniert. Module haben Versionslinien, Rollen nur zwei Branches. Kompatibilität entsteht immer im Modul, nie in der Rolle.

Ansible-Rollen

Terraform-Module

Kompatibilität bei Umbenennungen

  1. Die Rolle benennt Variablen einfach um, ohne Alias.
  2. Das Modul übergibt alte und neue Namen nebeneinander an das Playbook.
  3. Geht das nicht, entsteht eine neue Modul-Linie.
  4. Modul-MRs werden gemergt, bevor die Rolle auf stable kommt.

Globale Kontext-Variablen (site, stage, role_slug, state, checkmk_server) bleiben ohne Präfix.

Stolperfallen

Das Anlegen eines neuen Linien-Branches veröffentlicht sofort X.Y.0 mit dem Inhalt der Vorgängerlinie. Diese Version nicht verwenden, erst ab X.Y.1 pinnen.

Weiterführend

Repo-Struktur

Zielgruppe: Anwender und Betreuer · Stand: 06.11.2026

Jeder Nomad-Job und jeder Infrastruktur-Stack bekommt ein eigenes Repository in der Gruppe seiner Abteilung. Nichts lebt nur lokal oder als Unterordner in einem fremden Repo.

Regeln

Konfiguration, die nur auf einem Rechner oder Server liegt, geht verloren. Auch Testkonfigurationen gehören in ein Repo.

Weiterführend