Unser Build/Deploy-Prozess ist sehr mühsam, ausreichend manuell und fehleranfällig. Können Sie Verbesserungsvorschläge machen?Wie können wir unseren Build- und Bereitstellungsprozess verbessern?
Lassen Sie mich unsere Bereitstellungsstrategie und den Buildprozess beschreiben. Wir entwickeln ein System namens Application Server (kurz AS). Es handelt sich im Wesentlichen um eine servletbasierte Webanwendung, die auf dem JBoss-Webserver gehostet wird. AS kann in zwei "Umgebungen" installiert werden. Jede Umgebung ist ein Verzeichnis mit dem Webapp-Code. Dieses Verzeichnis befindet sich im Netzwerkspeicher. Der Speicher ist auf mehreren Produktionsservern installiert, auf denen JBoss-Instanzen installiert sind. Das Verzeichnis ist mit dem Verzeichnis webapps
von JBoss verknüpft. Daher verwenden alle JBoss-Instanzen denselben Code für die Umgebung. Die Konfiguration von JBoss ist unabhängig von der Umgebung und wird pro Instanz aktualisiert.
So haben wir zwei Arten von Patches: Webapp Patches (für unterschiedliche Umgebungen) und Konfigurations Patches (für pro Instanz-Konfiguration)
Patch ist eine ausführbare Datei. Tatsächlich ist es ein Bash-Skript mit einem eingebetteten binären RPM-Paket. Die Installation ist ziemlich einfach: Sie führen nur die Datei aus und beantworten optional einige Fragen. Wichtig ist, dass es sich bei dem Patch nicht um ein Gesamtsystem handelt - es enthält nur einige Klassen mit Fixes und/oder Skripten, die Konfigurationsdateien modifizieren. Klassen werden in WEB-INF/-Klassen kopiert (AS wird als Explosionsverzeichnis bereitgestellt).
Die Art, wie wir diese pathes bauen ist:
- Wir nehmen einige frühere Patch-Dateien und kopieren Sie sie.
- Wir ändern den Inhalt des Patches. Der wichtigste Teil davon ist RPM-Spezifikation. Dort ändern wir den Namen des Patches, ändern seine vorausgesetzten RPM-Pakete und schreiben die eigentlichen Bash-Befehle zum Sichern, Kopieren und Ändern von Dateien auf. Dies ist einer der ärgerlichsten Teile, weil wir nicht immer die tatsächliche Änderung erhalten können. Dies gilt insbesondere für neue komplexe Funktionen, die sich auf mehrere Änderungsanforderungen und -befehle erstrecken. Außerdem ist das Schreiben dieser Befehle für den Änderungssatz mühsam und fehleranfällig.
- Für Webapp-Patches ändern wir auch Spezifikationen für andere Umgebungen. Normalerweise sind sie identisch mit Ausnahme des RPM-Paketnamens.
- Wir setzen alle rpm bezogenen Dateien auf VCS
- Wir ändern build.xml, indem Sie ein paar Ziele für die Erstellung neuer Patches hinzufügen. Die Änderung erfolgt durch Kopieren und Bearbeiten.
- Wir ändern CruiseControl- config von Projekt copypasting und wechselnden ant Ziele darin
- Endlich bauen wir ein System
Auch ich habe Interesse an irgendwelchen Referenzen auf Patch-Vorbereitung und Bereitstellung Praktiken, vorzugsweise für Java-Anwendungen. Ich habe es nicht geschafft, das zu googeln.
Jede Definition von Verschwendung, die CPU-Sekunden zählt aber nicht Mitarbeiter-Tage braucht ein bisschen ein Umdenken. – soru
Vielen Dank für die Antwort. Leider haben wir vorläufig an Patches gebunden. Patches sind in der Regel Funktionen, von denen einige kundenspezifisch sind, einige sind unabhängig von anderen etc. Das Projekt ist Möchtegern-Produktlinie. Mittlerweile haben wir dafür weder Architektur- noch SCM-Unterstützung. Um ehrlich zu sein, ich weiß nicht, auf welcher Seite ich diesen Elefanten beißen sollte. – Rorick
Früher gab es ein Produkt für Windows-Software auf dem Markt namens RTPatch. Dieses Produkt vergleicht zwei Builds, nennt sie v2.3 und v2.4 und generiert ein Windows-Programm mit Daten, die v2.3, wie es auf einem Benutzercomputer installiert ist, in v2.4 ändern kann. Vielleicht so etwas. Aber ernsthaft - es gibt keinen besseren Zeitpunkt, um SCM-Probleme zu lösen als jetzt, besonders wenn Sie hoffen, Ihre Software in eine Cash-Cow zu verwandeln. –