Mein Team verwendet derzeit einen relativ einfachen Verzweigungs- / Bereitstellungsprozess, der folgendermaßen aussieht:
┌────────┐ ┌────┐ ┌──────┐
Environments: │ DEV │ │ QA │ │ PROD │
└────────┘ └────┘ └──────┘
▲ ▲ ▲
│ │ │
┌────────┐ ┌────┐ ┌──────┐
Builds: │ DEV │ │ QA │ │ PROD │
└────────┘ └────┘ └──────┘
▲ ▲ ▲
│ │ │
┌────────┐ ┌────┐ ┌──────┐
Branches: │ master │ │ qa │ │ prod │
└────────┘ └────┘ └──────┘
Jede Umgebung hat einen eigenen Zweig (wir verwenden git ) und einen eigenen Build, der diesen Zweig verwendet. Wenn wir von einer Umgebung in eine andere umsteigen möchten, z. B. von DEV in QA, führen wir den master
Zweig in qa
einem neuen QA-Build zusammen und starten ihn (der dann automatisch in der QA-Umgebung bereitgestellt wird).
Wir überlegen, auf einen neuen Prozess umzusteigen, bei dem es nicht mehr erforderlich ist, für jede Umgebung eine eigene Zweigstelle zu erstellen. Stattdessen würde ein einzelner Release-Build ein "Bereitstellungspaket" erstellen, das dann in einer beliebigen Umgebung bereitgestellt werden könnte. Wir stellen uns vor, ein typischer Workflow würde ungefähr so aussehen:
┌────────┐ ┌────┐ ┌──────┐
Environments: │ DEV │ ──► │ QA │ ──► │ PROD │
└────────┘ └────┘ └──────┘
▲
\
┌───────────────┐
Builds: │ release build │
└───────────────┘
▲
│
┌────────┐ ┌─────────┐
Branches: │ master │ │ release │
└────────┘ └─────────┘
Das Heraufstufen von einer Umgebung in eine andere wird in der Quellcodeverwaltung nicht mehr behandelt. Stattdessen nehmen wir einfach die bereits erstellten Binärdateien (das "Bereitstellungspaket") und legen sie in der neuen Umgebung ab.
Mit diesem neuen System können wir jeden Build in jeder Umgebung bereitstellen, was mehrere Vorteile hat. Zum Beispiel ist es trivial, PROD-Fehlerbehebungen in DEV und QA zu testen. Unser derzeitiges System bietet keine einfache Möglichkeit, dies zu tun, ohne einen Zweig zurückzusetzen, was wir natürlich gerne vermeiden würden.
Der größte Nachteil dieses neuen Systems besteht darin, dass wir nicht mehr automatisch nachverfolgen können, welcher Code sich in welcher Umgebung befindet. Wenn wir eine Korrektur in PROD vornehmen müssen, haben wir keinen eigenen Zweig mehr, der mit der aktuellen Produktionscodebasis synchronisiert ist. Gleiches gilt für die Qualitätssicherung. Wenn wir eine schnelle Umstellung auf die Qualitätssicherung vorantreiben möchten, ohne die laufenden Arbeiten auszubaggern master
, verfügen wir nicht mehr über eine Zweigstelle, die den aktuellen Status der Qualitätssicherungsumgebung widerspiegelt.
Wie können wir verfolgen, welcher Code in jeder Umgebung vorhanden ist?
Einige Optionen, über die wir nachdenken:
- Verwenden von Git-Tags , um zu verfolgen, welches Commit sich in welcher Umgebung befindet
- Einbetten des vom Build verwendeten git-Commits in jedes Bereitstellungspaket