# Stages und Umgebungen

# Stages und Branches

<p class="callout info">Zielgruppe: Anwender und Betreuer · Stand: 06.11.2026</p>

Jedes Deployment-Repo kennt vier Stages, und jede Stage ist ein eigener Branch. Ein Commit wandert von Stage zu Stage. Ob er weiterwandert, entscheiden feste Gates: mal manuell, mal automatisch.

## Die vier Stages

| Stage = Branch | Zweck | Weiter zur nächsten Stage |
|---|---|---|
| `pre-development` | Einstieg, Default-Branch; im Lab die einzige Stage | manuell (`promote-next-branch`) |
| `development` | Entwicklungsumgebung | automatisch |
| `staging` | Abnahme vor Produktion | manuell (`approve-and-promote-production`) |
| `production` | Produktion | – |

- Einen `main`-Branch gibt es nicht.
- Jede Stage hat ihren eigenen Terraform-State. Der State-Name ist der Branch-Name.
- Alle vier Stage-Branches sind geschützt. Daran hängen Secrets und Freigaben.

## Stages ein- und ausschalten

- `enabled-stages` legt fest, welche Stages wirklich deployen. Inaktive Stages laufen in der Kaskade mit, ändern aber nichts.
- `promote-from` und `promote-to` begrenzen die Kaskade. `promote-to: pre-development` ist der Lab-Modus ohne Promotion.
- Eine Stage wird erst aktiv, wenn ihre Hosts definiert und ihre Variablen gesetzt sind.

## Wie die Stage an anderen Stellen heißt

| Ort | Schreibweise |
|---|---|
| Branch, OpenBao-Pfad, Terraform (`TF_VAR_deployment_stage`) | `pre-development`, `development`, `staging`, `production` |
| Maschinen-Module (VM-Variable `stage`) | nur `dev`, `mngmt`, `prd`. Lab-VMs laufen als `dev`, `staging` läuft mit `prd` |
| Consul-KV und Namen im Lab | `lab`, z. B. `services/lab/…` |

<p class="callout warning">Das sind drei Vokabulare für ähnliche Dinge. Für Secret-Pfade gilt immer der Branch-Name. <code>lab</code>, <code>dev</code> oder <code>prd</code> im OpenBao-Pfad findet keine Pipeline.</p>

## Weiterführend

- [Lab, DEV und Produktion](https://docs.squeeze.one/books/developer-good-practice/page/lab-dev-und-produktion)
- [README der CI-Component, Abschnitte „Promotion“ und „Stages und Kippschalter“](https://gitlab.dexpro.services/cloud-core-infrastructure/ci-components/deployment)

# Lab, DEV und Produktion

<p class="callout info">Zielgruppe: Anwender und Betreuer · Stand: 06.11.2026</p>

Die Plattform wird am Standort Bremen 1 neu aufgebaut. Zuerst entsteht alles im **Lab** als Proof of Concept. Erst danach folgen DEV und Produktion, und die alten Umgebungen werden abgelöst.

## Die Umgebungen

| Umgebung | Für wen | Stand |
|---|---|---|
| **Lab** | nur Plattformbetrieb (Betreuer) | Neuaufbau läuft (Consul, OpenBao, Edge, Datenbanken, Nomad) |
| **DEV** (neu) | Abteilungen und Teams | geplant, entsteht nach dem Lab-PoC |
| **Produktion** (neu) | Kunden | geplant |
| **Bestand** (alte DEV/PRD) | laufender Betrieb | wird nach dem Lab-PoC abgelöst |

## Regeln

- **Erst Lab, dann der Rest.** Neues wird im Lab fertig gebaut und nachgewiesen, bevor es nach DEV geht.
- **Fehler global beheben.** Was im Lab auffällt, wird in Rollen und Modulen behoben. Diese Korrekturen dürfen veröffentlicht werden.
- **Bestand nicht umbauen.** In alten DEV-, PRD- und Legacy-Umgebungen gibt es bis zur Ablösung keine Umbauten, Rotationen oder Abrisse. Solche Punkte werden als „nach Lab-PoC“ vorgemerkt.
- **Lab ist kein Angebot für Teams.** Was Abteilungen nutzen sollen, entsteht in DEV.

## Unterschiede Lab und DEV

| Thema | Lab | DEV |
|---|---|---|
| Datenbanken (OpenSearch, MongoDB, Journal/Index) | dürfen im Nomad-Cluster laufen | laufen außerhalb von Nomad |
| Menschen-Login an OpenBao | Admin-Token | OIDC mit Entra ID |
| Stages | nur `pre-development` | alle vier |
| Repo-Namen | enthalten `lab`, z. B. `bremen1/lab-edge-routers` | ohne `lab` |

Dienste im Lab sind unter `*.lab.bre1.dexpro.services` erreichbar.

## Weiterführend

- [Stages und Branches](https://docs.squeeze.one/books/developer-good-practice/page/stages-und-branches)
- [Glossar](https://docs.squeeze.one/books/developer-good-practice/page/glossar)