David Schirrmeister ad7156e6dc update
2025-05-26 12:44:26 +02:00

173 lines
5.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Continuous Development
## Configuration Management
### Version Control System (VCS)
- Erlauben mehrere Versionen von Dateien
- Falls etwas bearbeitet wurde, sieht man, wie es vorher aussah
- Erlaubt dem Team zusammenzuarbeiten
- auch wenn verteilt
#### Good Practices VC
- Absolut alles im VCS speichern
- Tests, Datenbankscripte, Buildscripte, Dokumentationen, etc.
- Alle Informationen, die benötigt werden, um irgendwelche Test- / Produktionsumgebungen wiederherzustellen
### VC - Release Versioning
- Jeder Release sollte eine eigene Nummer haben
#### Versionsschema
- SemVer (Semantic Versioning)
- **MAJOR**._Minor_.patch
- Major
- Bahnbrechende Änderungen (Hohes Risiko)
- inkompatible API Änderungen
- Entfernen von Features
- Änderungen am Datenbankschema, die Daten entfernen
- Minor Version
- Features (Mittleres Risiko)
- neues Feature
- UI ändern
- DB-Schema erweitern (keine Daten entfernen)
- patch version
- Alle anderen Änderungen (kaum Risiko)
- kleinere Bug-Fixes
- Zusätzliche Labels
- alpha
- beta
- bspw:
- _1.0.0-alpha.1_
- ![image_843.png](image_843.png)
- ![image_844.png](image_844.png)
### VC - Meaningful Commits
```Git
<type>[optional scope]: <description>
[optional body]
[optional footer(a)]
```
#### Commit Types
- chore
- bspw. Abhängigkeiten updaten
- refactor
- docs
- style
- Formatieren, fehlende Semikolons, ...
- test
- perf
- Performance Verbesserungen
- ci
- CI/CD related
- build
- Änderungen, die das Build-System oder externe Abhängigkeiten betreffen
- revert
- Rückgängig machen
### VC - Branching
- Vermeide lange Branches
- Überprüfe regelmäßig die Main-Line
#### VC - Branching GitFlow
- ![image_845.png](image_845.png)
- Development Branch (develop)
- master/main für produktionsfertigen Code
- develop für letzte Development Änderungen
- Feature Branch (feature/*)
- für neue Features
- existiert nur so lange, wie das Feature entwickelt wird
- Hotfix Branch (hotfix/*)
- Wie ein Release-Branch, aber für unerwartete, kurzfristige Releases
**Probleme:**
- Hotfix / Release Branch
- macht die Sache deutlich (teilweise unnötig) komplizierter
- Devs machen häufig Fehler
- direkt auf main mergen, ...
### Dependency Management
- Komponenten / Module von anderen Teams innerhalb der Organisation
- 3rd Party Bibliotheken
#### Managing Components
- größere Projekte sollten in mehrere Komponenten zerlegt werden
- ggf. auch separate Pipelines zum builden
#### Managing External Libraries
- kommen meist in binärer Form
- am besten lokale Kopien in Versionen, welche funktionieren
- latest könnte bugs haben / die Anwendung kaputt machen
- trotzdem regelmäßig updaten!
### Software Configurations
- sollten gemanaged und getestet werden
- erlauben der Software mehr Flexibilität
- Wann?
- Während des buildens / packaging
- schlecht, dann ist das image nicht universell einsetzbar
- Deployment / Startup / Run Time
- egal wann sie sollten immer über den gleichen Mechanismus geschehen
- bspw. Passwörter sollten nicht gehardcoded werden
### Environment Management
- Jede Software benötigt Hardware/Software/Infrastruktur/externe Systeme
- = Environment
- Sollte automatisiert laufen
- sollte einfacher sein einfach den kaputten wegzuwerfen und neu zu erstellen, als zu reparieren
## CI/CD
![image_859.png](image_859.png)
- Continuous Integration
- kein Dev will immer die gesamte Anwendung testen / laufen lassen
- CI übernimmt
- automatisierte Tests
- Bugs werden früher gefunden
- Continuous Delivery
- Erweiterung von CI um Release in Staging
- Continuous Deployment
- automatisches Deployment in Produktionsumgebung
### CI/CD Good Practices
- Wenn ein Fehler auftritt, ist es höchste Prio diesen zu fixen
- Vorher keine weiteren Änderungen pushen
- nicht nach Hause gehen, wenns nicht mehr geht
- entweder fixen oder rückgängig machen
- wer Änderungen macht ist auch verantwortlich
- Tests vorher lokal laufen lassen
- wenn welche fehlschlagen → nicht auskommentieren
- Pipeline nach dem pushen beobachten
- Pipeline stoppen lassen bei Fehlern
- fehlschlagende Tests
- langsame Tests
- hässlicher Codestyle
## Deployment Pipeline
![image_860.png](image_860.png)
- binarys so selten wie möglich erstellen
- dauert lange
- falls eine doppelt verwendet werden kann → doppelt nutzen
- bspw. Staging/Production
- Smoke-Testing vom Environment
- primitiv checken, ob Anwendung läuft und bspw. Startseite gewünschte Daten zeigt
- Staging-Umgebung nutzen für Acceptance Stage
- Alle Änderungen sollten durch die Pipeline gehen
- Falls irgendwas fehlschlägt → Pipeline stoppen
### Stages
#### Commit Stage
![image_861.png](image_861.png)
- Bestandteile:
- Code kompilieren
- Tests laufen lassen (Unit, Integration)
- Binaries erstellen
- statische Codeanalyse
- Falls Commit Stage funktioniert → Release Kandidaten erstellen
#### Acceptance Stage
![image_862.png](image_862.png)
- Bestandteile
- Service Testing
- Laufen in produktionsähnlicher Umgebung