Anfang des Jahres war ich eingeladen, auf den Devopsdays Boston einen Vortrag über Deployment als das neue Build: wie Deployments heute durchgeführt werden, wie sie sich in einer stärker virtualisierten On-Demand-Anwendungslandschaft anpassen müssen und welche grundlegenden Verbesserungen notwendig sind, bevor das Deployment zu der unsichtbaren, einfach funktionierenden Erfahrung reift , die Build heute ist. Im letzten Beitrag haben wir das Deployment mit einem anderen Schlüsselprozess im Anwendungslebenszyklus verglichen - dem Build - und gefragt, welche wichtigen Entwicklungen es von einer magischen "Blackbox" zu dem "einfach funktionierenden" Prozess gemacht haben, der es heute ist. Wir haben wiederverwendbare Befehle, Modelle und Konventionen++ als drei wichtige Schritte identifiziert, auf die wir in diesem Beitrag näher eingehen werden. Dann werden wir uns wieder mit der Bereitstellung befassen und fragen, welche Verbesserungen wichtig sind, um hier zu "just works" zu gelangen.
Wiederverwendbare Befehle

Der erste Schritt, der durch Apache Ant verkörpert wurde, war die Erkenntnis, dass die meisten Aufgaben oder Aktionen auf niedriger Ebene unabhängig von der zu erstellenden Anwendung gleich sind, sei es der Aufruf eines Compilers, das Kopieren von Dateien oder das Ersetzen von Platzhaltern. Anstatt dieselben Betriebssystembefehle in jedes neue Build-Skript zu kopieren, kapselten wir diese Befehle als Bibliotheken mit wiederverwendbaren Komponenten, die nur einmal geschrieben werden mussten. Außerdem entdeckten wir, dass bestimmte Muster von Schrittfolgen in vielen verschiedenen Builds auftauchten. Diese "Abschnitte", wie z.B. das Erstellen eines Klassenpfads oder das Kopieren und Verarbeiten statischer Ressourcen, stellten offensichtlich eine übergeordnete Build-Aktivität mit einer bestimmten Funktion dar.
Modelle

Während die Erkenntnis, dass alle Aktionen, die in einem Build ausgeführt werden, im Grunde eine Abfolge gemeinsamer Chunks sind, ein wichtiger Anfang war, wurde der nächste große Fortschritt dadurch erzielt, dass wir erkannten, dass wir nicht nur wiederkehrende Muster von Aktionen sahen, sondern dass auch die Arten von Daten, die diese Aktionen bearbeiteten, gemeinsam waren. Daraus entstand das Konzept eines echten Domänenmodells für Anwendungs-Builds mit Quellensets, Ressourcensets, Modulen, Abhängigkeiten usw., das ursprünglich von Maven eingeführt wurde und seitdem in allen Build-Systemen zu finden ist und wiederverwendet wird. Durch die Kombination der Abfolge gemeinsamer Chunks mit dem neuen Domänenmodell, das die zu verarbeitenden Daten strukturiert, entstand der Begriff der verschiedenen Phasen, in denen Teile des Build-Modells generiert, vorbereitet und für nachfolgende Befehle verfügbar gemacht werden. Darüber hinaus unterstützte Maven auch die Idee, dass das Domänenmodell und damit die Build-Phasen leicht variieren können müssen, um verschiedene Arten von Java-Artefakten, die bereitgestellt werden müssen, wie JARs und EARs, zu berücksichtigen. Dies wurde später weiterentwickelt, um Builds von völlig anderen Technologien wie Adobe Flex-Anwendungen zu unterstützen.
Konventionen++

Ein zusätzlicher Vorteil von Domänenmodellen für Builds war die Möglichkeit, Standardwerte auf strukturierte Weise zu verwenden, z.B. für die Namen der erstellten Artefakte oder den Speicherort von Ressourcendateien.
Die Kehrseite dieser Bequemlichkeit, sicherlich in Kombination mit XML als Deskriptorsprache für Builds, bedeutete jedoch, dass ein Abweichen von diesen Standards eine ziemliche Herausforderung sein konnte. Vor allem dann, wenn das Ziel darin bestand, das Domänenmodell in irgendeiner Weise zu erweitern oder eine Sprache oder Technologie zu unterstützen, deren Build-Flow sich deutlich von dem von Java unterscheidet, wie z.B. die Erstellung von Dokumentationspaketen oder Images virtueller Maschinen.
Wer hätte das gedacht?
Wenn man diese Entwicklung aus heutiger Sicht betrachtet, fallen einige Fakten auf, die im Vergleich zu anderen Entwicklungen in der IT ziemlich überraschend sind.
Erstens: Obwohl es heute schwer vorstellbar ist, eine Abhängigkeit mit etwas anderem als dem Muster groupId:artifactId:version zu spezifizieren, wurde keines der Modelle oder Konventionen, die sich entwickelten, in Industriestandards formalisiert. Stattdessen basierten sie entweder auf der Beobachtung gängiger Muster oder wurden einfach clever oder sogar etwas willkürlich gewählt (
Und der Einsatz?
So viel zum Build-Prozess. Wie sieht es mit der Bereitstellung aus, die heute die entscheidende Hürde für die Automatisierung in der Wertschöpfungskette eines Unternehmens darstellt? Wie bereits erwähnt, liegt der aktuelle Branchendurchschnitt irgendwo zwischen "Blackbox" und "Schrittfolge". In Bezug auf die Beschreibungen der Entwicklung des Build-Prozesses befinden sich die fortschrittlichsten Systeme zur Automatisierung der Bereitstellung irgendwo jenseits von "wiederverwendbaren Befehlen".
- Entwickeln Sie ein gemeinsames Modell
- Vanille (wieder)entdecken
- Unterstützen Sie einen "sauberen Aufbau".
Verfasst von
Andrew Phillips
Contact