Trunk-basierte Entwicklung
Inhalt
Was ist trunk-basierte Entwicklung?
Trunk-basierte Entwicklung (TBD) ist eine Softwareentwicklungsstrategie, bei der Ingenieure kleinere Änderungen häufiger in die Hauptcodebasis einfließen lassen und mit der Stammkopie arbeiten, anstatt an langlebigen Feature Branches zu arbeiten. Dieses Entwicklungsmodell wird häufig als Teil eines Entwicklungsworkflows mit kontinuierlicher Integration eingesetzt.
Warum trunk-basierte Entwicklung
Wenn viele Ingenieure an der gleichen Codebasis arbeiten, ist es wichtig, eine Strategie für die Quellcodekontrolle und die Zusammenarbeit der einzelnen Mitarbeiter zu haben. Um zu vermeiden, dass die Änderungen der anderen Entwickler überschrieben werden, erstellen sie ihre eigenen Kopien der Codebasis, die so genannten Zweige. In Anlehnung an einen Baum wird die Masterkopie manchmal auch als Mainline oder Stamm bezeichnet. Der Prozess, bei dem die Änderungen der einzelnen Kopien in den Hauptstamm integriert werden, wird als Merging bezeichnet.
Um die trunk-basierte Entwicklung zu verstehen, ist es sinnvoll, zunächst einen Blick auf die alternative Strategie, die Feature Branch-Entwicklung, zu werfen.
Bei der Feature Branch-Entwicklung führen einzelne Softwareentwickler oder Teams von Ingenieuren ihren neuen Zweig erst dann zusammen, wenn ein Feature fertiggestellt ist, und arbeiten manchmal wochen- oder monatelang an einer separaten Kopie.
Diese lange Zeitspanne kann den Prozess der Zusammenführung erschweren, da sich der Stamm- oder Masterzweig wahrscheinlich geändert hat, weil andere Ingenieure ihre Codeänderungen zusammengeführt haben und die Versionskontrolle schwierig wird. Dieses Feature Branching kann zu einem langwierigen Code-Review-Prozess führen, wenn Sie einen Release-Branch für die Bereitstellung erstellen möchten. Dies führt oft dazu, dass viele verschiedene Pull Requests analysiert werden müssen, um Merge-Konflikte zu lösen.
Vorteile der trunk-basierten Entwicklung
Die trunk-basierte Entwicklung verfolgt einen Continuous Delivery-Ansatz für die Softwareentwicklung. Die Zweige sind kurzlebig und werden so häufig wie möglich zusammengeführt. Die Zweige sind kleiner, da sie oft nur einen Teil eines Features enthalten. Diese kurzlebigen Entwicklungszweige erleichtern den Prozess der Zusammenführung, da weniger Zeit für Abweichungen zwischen dem Hauptstamm und den Zweigkopien bleibt.
Die trunk-basierte Entwicklung ist also eine Methode, um neue Funktionen und kleine Änderungen schnell zu veröffentlichen und gleichzeitig langwierige Fehlerbehebungen und die "Merge-Hölle" zu vermeiden. Sie ist eine immer beliebtere Devops-Praxis bei agilen Entwicklungsteams und wird oft mit Feature Flags oder Feature Toggles kombiniert, um sicherzustellen, dass neue Funktionen schnell und einfach zurückgenommen werden können, wenn Fehler entdeckt werden.
Trunk-basierte Entwicklung und Feature Flags
Die Praxis des Feature Flagging (Pionierarbeit von Martin Fowler), d.h. die Einbettung neuer Funktionen in Code, der aus der Ferne ein- und ausgeschaltet werden kann, ist ein gängiger Entwicklungsprozess, den Software-Ingenieure einsetzen, um eine trunk-basierte Entwicklung zu implementieren und gleichzeitig das Risiko der Einführung von Fehlern in den Code zu verringern.
Da bei der trunk-basierten Entwicklung in der Produktionsumgebung in einem einzigen Branch gearbeitet wird, bieten Feature Flags eine Möglichkeit, neue Features und Änderungen kontrolliert in den Code einzubringen und sie schnell wieder zu deaktivieren, wenn Fehler entdeckt werden.
Feature Flags können auch dazu verwendet werden, Funktionen langsam für einen kleinen Teil der Benutzer eines Projekts einzuführen , anstatt sie auf einen Schlag einzuführen, was dazu beiträgt, den Radius eines potenziell fehlerhaften Quellcodes zu begrenzen.
Trunk-basierte Entwicklung und Optimizely Feature Experimentation
Optimizely Feature Experimentation bietet eine ganze Reihe von Entwicklertools wie Feature Flags, Feature-Rollouts, Feature-Variablen und A/B-Tests, die eine trunk-basierte Entwicklung und die schnelle Einführung neuen Codes ermöglichen und gleichzeitig das Risiko minimieren.
Und für Entwickler, die nur mit Feature Flags beginnen möchten, bietet Optimizely Rollouts unbegrenzte Funktionen für Feature Flags in einem Dutzend der beliebtesten Sprachen und Bibliotheken, die es gibt.