# Was ist Build? | SAFe DevOps Health Radar

> Build ist der Schritt im SAFe DevOps Health Radar, in dem committed Code kontinuierlich integriert, getestet und zu einem deploybaren Artefakt mit eingebauter Qualität kompiliert wird. Erfahren Sie mehr über Continuous Integration, Gated Commits und Application Security.

- Date: 2021-09-12
- Source: https://romanoroth.com/de/blogs/was-ist-build-safe-devops-health-radar/
- Tags: DevOps, SAFe, Continuous Integration, Application Security, Build Automation, Code Quality


Build ist der Schritt im SAFe for DevOps Health Radar, in dem committed Code kontinuierlich integriert, getestet und zu einem deploybaren Artefakt mit eingebauter Qualität verarbeitet wird. In diesem Video erkläre ich, was der Build-Schritt umfasst, warum Continuous Integration wichtig ist und wie Techniken wie Gated Commits und statische Sicherheitsanalyse helfen, Qualität bei hoher Geschwindigkeit aufrechtzuerhalten.

<div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;">
			<iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube-nocookie.com/embed/e-ByGY6gJ2A?autoplay=0&amp;controls=1&amp;end=0&amp;loop=0&amp;mute=0&amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"></iframe>
		</div>


## Vom committed Code zum deploybaren Artefakt

Bevor wir den Build-Schritt erreichen, haben wir die früheren Stufen des SAFe for DevOps Health Radar durchlaufen. Alles beginnt mit Ideen vom Kunden oder Business. Wir formulieren Hypothesen, forschen gemeinsam, um das echte Kundenbedürfnis zu identifizieren, definieren die minimale Architektur und entwickeln eine Vision mit Roadmap und Features. Im Develop-Schritt brechen wir Features in User Stories herunter und implementieren sie.

Sobald der Code committed ist, beginnt der Build-Schritt. Das Ziel ist es, den committed Code mit dem Rest der Codebasis zu reintegrieren, Tests und Code-Analysen durchzuführen und ein deploybares Artefakt mit eingebauter Qualität zu erzeugen.

## Continuous Integration

Jeder Commit in die Versionskontrolle sollte einen automatisierten Prozess auslösen. Der Continuous Integration Server nimmt den neu committed Code, reintegriert ihn mit dem Rest der Codebasis und führt dann eine Reihe von Prüfungen durch:

1. **Build/Kompilieren** des Codes zusammen mit dem Rest der Codebasis
2. **Unit Tests ausführen**, um die Korrektheit auf Komponentenebene zu überprüfen
3. **Code-Analyse durchführen**, um die Codequalität zu prüfen
4. **Sicherheits-Code-Analyse ausführen** (statische Analyse), um Schwachstellen zu erkennen

Das zentrale Prinzip ist schnelles Feedback. Entwickler müssen so schnell wie möglich wissen, ob ihr committed Code in Ordnung war oder ob er Probleme eingeführt hat.

## Das Problem mit langlebigen Branches

Eine der häufigsten Problemquellen sind langlebige Branches. Teams arbeiten oft einen ganzen Sprint auf einem Branch und versuchen dann am letzten Tag, alles zu reintegrieren. Dieser Ansatz verursacht viele Probleme und ist selten erfolgreich.

Die Lösung ist, so schnell wie möglich zurückzumergen, damit es immer einen Branch gibt, der die aktuelle Version der Software enthält. Ob das Team Trunk-Based Development oder Git Flow verfolgt, ist seine Entscheidung. Wichtig ist, dass Code schnell zurückgemergt wird, damit Continuous Integration seine Aufgabe erfüllen kann.

## Broken Builds und Gated Commits

Ein Broken Build betrifft nicht nur das eigene Team, sondern auch andere Teams, die an derselben Codebasis arbeiten. Deshalb hat ein Broken Build immer die höchste Priorität und muss sofort behoben werden.

Eine Strategie, um Broken Builds von vornherein zu vermeiden, ist der **Gated Commit**. Bei Gated Commits nimmt der Build Server den neu committed Code und reintegriert ihn mit dem Rest der Codebasis, ohne ihn bereits in die Versionskontrolle zu committen. Dann wird der Code kompiliert, die Unit Tests ausgeführt, die Code-Analyse durchgeführt und die Sicherheitsanalyse ausgeführt. Nur wenn alles erfolgreich ist, committet der Build Server den Code in die Versionskontrolle. Falls etwas fehlschlägt, kommt der Code zurück mit einer Benachrichtigung. Diese Technik verhindert, dass Defekte jemals in die Haupt-Codebasis gelangen.

## Application Security

Statische Sicherheitsprüfungen sind ein wesentlicher Bestandteil des Build-Schritts. Unter dem Oberbegriff Application Security analysieren wir statisch nicht nur unseren eigenen Quellcode, sondern auch die Pakete und Bibliotheken, von denen wir abhängen. Eine Schwachstelle in irgendeiner Bibliothek in der Abhängigkeitskette kann zu einer Schwachstelle in unserer Anwendung werden. Automatisierte Sicherheits-Scan-Tools erkennen diese Probleme frühzeitig, bevor das Artefakt in die Produktion gelangt.

## Die Reifegrade

Der SAFe DevOps Health Radar bietet ein Reifegradmodell für den Build-Schritt:

- **Sit:** Builds werden weniger als einmal pro Iteration oder Sprint ausgeführt und sind komplett manuell.
- **Crawl:** Builds werden einmal pro Iteration oder Sprint ausgeführt und sind teilweise automatisiert. Dev-Branches sind über Monate oder länger offen und Builds brechen häufig.
- **Walk:** Automatisierte Builds laufen einmal täglich. Broken Builds werden in zwei bis vier Stunden behoben. Manuelle Unit Tests werden gegen jeden Build ausgeführt. Dev-Branches sind zwei bis vier Wochen offen.
- **Run:** Builds laufen automatisch bei jedem Code-Commit. Broken Builds werden innerhalb einer Stunde behoben. Automatisierte Unit Tests werden gegen jeden Build ausgeführt. Dev-Branches werden in jedem Sprint in den Trunk gemergt.
- **Fly:** Builds laufen bei jedem Commit. Builds beinhalten statische Code-Analyse und Sicherheitsanalyse. Gated Commits verhindern, dass Defekte in die Versionskontrolle gelangen. Dev-Branches werden bei jedem Commit in den Trunk gemergt.

## Kernaussagen

- **Das Ziel von Build ist ein deploybares Artefakt mit eingebauter Qualität.** Committed Code muss reintegriert, kompiliert, getestet und analysiert werden, bevor er zu einem Artefakt wird.
- **Continuous Integration ist essenziell.** Jeder Commit sollte automatisch einen Build, Unit Tests, Code-Analyse und Sicherheitsanalyse auslösen.
- **Langlebige Branches vermeiden.** So schnell wie möglich in den Haupt-Branch zurückmergen, um die Integration reibungslos zu halten.
- **Broken Builds sofort beheben.** Ein Broken Build hat die höchste Priorität, weil er das gesamte Team und andere Teams betrifft.
- **Gated Commits nutzen, um Broken Builds zu verhindern.** Der Build Server validiert den Code, bevor er in die Versionskontrolle gelangt.
- **Application Security in den Build einbinden.** Eigenen Code und alle Abhängigkeiten bei jedem Build auf Schwachstellen scannen.

