Der Begriff „Build kaputt machen“ bedeutet, Änderungen am Code vorzunehmen, die dafür sorgen, dass das Projekt nicht mehr erfolgreich kompiliert oder gebaut wird. Die meisten Entwickler sind in ihrer Praxis mindestens einmal auf diese Situation gestoßen. Laut der Stack Overflow Developer Survey 2023 bestätigen 80% der befragten Ingenieure, dass sie mindestens einmal den Build in einem Arbeits-Repository kaputt gemacht haben. Dies ist eines der häufigsten Probleme in der Teamentwicklung, das sofortige Behebung erfordert.
Die wichtigsten Punkte
Einen Build kaputt zu machen ist eine Situation, in der das Projekt nach Änderungen nicht mehr gebaut wird. Im Kontext von CI/CD bedeutet dies, dass die Build-Pipeline fehlschlägt und kein Artefakt erstellt wird.
In der Welt der Mobil- und Webentwicklung ist ein Build der Prozess der Übersetzung von Quellcode in eine ausführbare Datei oder ein Paket. Für Android ist es das Erstellen einer APK oder AAB über Gradle; für iOS die Kompilierung über Xcode; für Webprojekte das Bündeln über Webpack oder Vite. Sie können den Build in jeder dieser Phasen kaputt machen.
Moderne Versionskontrollsysteme und CI/CD-Tools wie Jenkins, GitHub Actions und GitLab CI erkennen automatisch einen kaputten Build und benachrichtigen das Team. In den meisten Projekten gilt die Regel: Wenn der Build kaputt ist, wird die Priorität aller anderen Aufgaben gesenkt, bis der Build repariert ist.
fun main() {
val message: String = "Build successful"
println(message)
// Diese Zeile macht den Build kaputt
val number: Int = "not a number"
}
In diesem Beispiel verursacht die Zuweisung eines Strings zu einer Variablen vom Typ Int einen Kompilierungsfehler. Typkonflikte sind eine der häufigsten Ursachen für einen kaputten Build in statisch typisierten Sprachen.
Es gibt mehrere Kategorien von Fehlern, die zu einem kaputten Build führen. Laut der GitLab-Analyse für 2024 verteilen sich die Ursachen wie folgt.
| Kategorie | Beispiel | Anteil der Fälle |
|---|---|---|
| Syntaxfehler | fehlende Klammer, falscher Import | 35% |
| Abhängigkeitsprobleme | Bibliotheksversionsinkompatibilität | 25% |
| Build-Konfiguration | falscher Ressourcenpfad | 20% |
| Merge-Konflikte | inkorrekt gelöster Konflikt | 15% |
| Infrastruktur | Probleme mit CI-Runner oder Cache | 5% |
Die tückischste Kategorie sind Abhängigkeitsprobleme. Die Aktualisierung einer Bibliothek in einem Modul kann den Build in einem benachbarten Modul kaputt machen, wenn sich die API oder das Verhalten von Methoden ändert.
Syntaxfehler hingegen werden schnell erkannt — der Compiler gibt die genaue Zeile und den Fehlertyp an. Deshalb gelten statisch typisierte Sprachen in Bezug auf die Build-Stabilität als zuverlässiger als dynamisch typisierte.
Ein kaputter Build wirkt sich direkt auf die Produktivität des Teams aus. Wenn der Build fehlschlägt, können Entwickler die aktuelle Version des Projekts nicht aus dem Repository beziehen, und die CI-Pipeline wird für alle nachfolgenden Änderungen blockiert.
Eine Atlassian-Studie aus dem Jahr 2023 zeigte, dass Projekte, bei denen der Build länger als vier Stunden kaputt bleibt, durchschnittlich 25% der produktiven Zeit des Teams verlieren. Entwickler sind gezwungen, ihre Aufmerksamkeit auf die Diagnose des Problems zu richten, anstatt ihre Aufgaben zu erfüllen.
Neben der Produktivität leidet auch die Moral im Team. Der Entwickler, der den Build kaputt gemacht hat, steht unter Druck von Kollegen. In gesunden Teams gilt die Regel: Nicht für einen kaputten Build bestrafen, aber eine sofortige Behebung verlangen. Die Blameless Culture ist ein Ansatz, bei dem der Vorfall als systemisches Problem analysiert wird, nicht als Fehler einer Person.
In verteilten Teams kann ein kaputter Build die Arbeit von Kollegen in einer anderen Zeitzone blockieren. Wenn ein Entwickler aus Europa den Build vor Feierabend kaputt macht, kann das Team in Asien einen ganzen Arbeitstag verlieren, während es auf die Behebung wartet.
Die Prävention eines kaputten Builds beginnt mit lokalen Überprüfungen vor dem Commit. Jeder Entwickler sollte vor dem Pushen von Änderungen Tests und den Build ausführen. Die wichtigsten Präventionsmethoden sind in mehrere Ebenen unterteilt.
Die zweite Ebene ist die Konfiguration der CI/CD-Pipeline. Jeder Pull-Request muss vor dem Merge automatischen Build und Tests durchlaufen. Wenn der Build fehlschlägt, wird der PR blockiert, bis er behoben ist. Dieser Ansatz wird als Gated Commit bezeichnet und in den meisten modernen Projekten verwendet.
Die dritte Ebene ist Monitoring und Statistik. Teams verfolgen die MTTR-Kennzahl (Mean Time To Repair). Je niedriger dieser Indikator, desto schneller reagiert das Team auf einen kaputten Build. Der Zielwert liegt bei maximal 30 Minuten.
Wenn der Build kaputt ist, besteht der erste Schritt darin, zu identifizieren, welcher Entwickler die letzten Änderungen vorgenommen hat. Git bietet das Tool git bisect, mit dem Sie den Commit finden können, der den Build durch binäre Suche kaputt gemacht hat.
# Bisect mit bekannten guten und schlechten Commits starten
git bisect start
git bisect bad HEAD
git bisect good abc1234
# Git checkt einen Commit in der Mitte aus
# Build und testen, dann markieren:
git bisect good # if build passes
git bisect bad # if build fails
# Nach ~log2(n) Schritten zeigt git den Übeltäter
git bisect reset
Nach dem Auffinden des problematischen Commits gibt es zwei mögliche Vorgehensweisen. Die erste ist das Zurücksetzen der Änderungen mit git revert, wenn die Behebung Zeit erfordert. Dies ist der sicherste Ansatz, insbesondere wenn der Build das gesamte Team blockiert.
Die zweite Option ist eine sofortige Korrektur mit einem neuen Commit. Dieser Ansatz ist vorzuziehen, wenn das Problem lokal und klar ist. Nach der Korrektur pushen Sie die Änderungen und bestätigen, dass der Build erfolgreich ist. In jedem Fall sollte die Wiederherstellungszeit des Builds eine Stunde nicht überschreiten.
Häufig gestellte Fragen
Den Build kaputt zu machen ist eine Situation, in der der Code nach Änderungen nicht mehr kompiliert oder gebaut wird. Das Projekt bleibt solange in einem nicht funktionsfähigen Zustand, bis der Fehler behoben ist. Dies hängt normalerweise mit Syntaxfehlern, falschen Importen oder Abhängigkeitsproblemen zusammen.
Die häufigste Ursache sind Syntaxfehler: fehlende Klammern, falsche Datentypen oder falsche Importe. An zweiter Stelle stehen Kompatibilitätsprobleme von Bibliotheksversionen und eine falsche Build-Konfiguration. Seltener wird der Build durch Merge-Konflikte kaputt gemacht.
Die Verantwortung liegt bei dem Entwickler, der die Änderungen vorgenommen hat, die den Build kaputt gemacht haben. In gesunden Teams wird jedoch ein Blameless Culture-Ansatz verfolgt — der Fokus liegt auf der Behebung und Prävention, nicht auf der Suche nach Schuldigen. Prozesse und Tools sollten das Risiko von Fehlern minimieren.
Die optimale Wiederherstellungszeit beträgt maximal 30 Minuten. Wenn das Problem komplex ist, machen Sie einen Revert über git revert, um das Team zu entblocken. Verwenden Sie git bisect, um den problematischen Commit zu finden. Führen Sie nach der Korrektur den Build erneut aus.
Ein kaputter Build blockiert die Arbeit aller Entwickler, die vom gemeinsamen Zweig abhängen. Die Produktivität des Teams sinkt und Termine werden verpasst. Eine längere Build-Ausfallzeit kann zu einer Anhäufung von Änderungen und komplexen Konflikten bei deren späterer Zusammenführung führen.
Zusammenfassung
Wir entwickeln eine mobile Applikation schlüsselfertig
IT Sectr entwickelt seit 2017 iOS- und Android-Apps für Startups und Unternehmen. Wir beraten Sie und schlagen die beste Lösung vor.
Lesen Sie auch