Meeting Architektur, Build- und Deployment
Moin, Zuerst vielen Dank für die konstruktive Runde zur Entwicklung der Architektur, des Build- und Deployment-Prozesses von xRes. Anbei sende ich Euch das Tafelbild und die wesentlichen Punkte der Besprechung. Grundlage des Gespräches waren * die Konzeption von VBE zur Modularisierung von xRes in "packages" (letztes Entwickler-Meeting) und * OHO zur Integration des Composers in den Build-Prozess (siehe PullRequest in dieser Woche). Anforderungen einen xRes-Build-und-Deployment-Prozess: * Wir möchten weiterhin eine Trennung zwischen Build- und Deployment aufrecht erhalten. Die Speicherung von "Artefakten" nach einem Build-Prozess einschließlich Qualitätsprüfung (z.B. UnitTests) wird als Vorteil gesehen. * Wir möchten xRes in Zukunft nicht mehr kundenspezifisch bauen, sondern EINE gemeinsame xRes-Version bauen und ausrollen. Alle kundenspezifischen Daten (aktuell: PDF-Dateien, favicons, htaccess-Files) sollen in Zukunft über das Config-Deployment (wie auch Cron-Jobs) ausgerollt und vom xRes aus /var/xres/... geladen werden. Der Build-Prozess wird damit circa um Faktor 6-8 schneller werden (der Durchlauf der UnitTests wird nicht analog beschleunigt). * Wie möchten weiterhin alle externen Abhängigkeiten in unseren git-Repositories spiegeln und damit die Kontrolle über Versionen, Erreichbarkeit usw. behalten. Probleme: * Die bereits diskutierte Idee der Modularisierung von xRes in "packages" beinhaltet, viele Code-Bestandteile in jeweils eigene git-Repositories auszulagern. Das Durchspielen des Workflows zeigte uns jedoch, dass wir dann für EINE Software-Änderung (im Sinne eines JIRA-Tickets) evtl. viele PullRequests abzugeben hätten, die NUR ZUSAMMEN in ein Release gemerged werden dürften. Dies erscheint aktuell eine deutliche Verkomplizierung unserer Arbeit mit PullRequests zu sein. Auch Ansätze über git-Tags und Versionierung aus Branch-Namen heraus haben uns bisher nicht zum Ziel führen können. * Eine weitere Komplexität, die aus oben genannter Aufspaltung zu folgen scheint, betrifft das System der Abhängigkeiten: Die Zuordnung der Abhängigkeit einer Applikation / eines Paketes von einem anderen Paket soll einerseits von uns Entwicklern aktiv und gezielt gesteuert werden können => muss aber auf der anderen Seite mit der Übernahme einer Änderung in eine Release-Version automatisch oder manuell aktualisiert werden. Wir haben darauf hingewiesen, dass Builds von testing-Branches oder Verschachtelung von Sub-Abhängigkeiten diese Steuerung sehr komplex werden lassen. * Eine Auslagerung von Softwarebestandteilen in viele kleine git-Repositories erschwert die Aufgabe, einem Build-System einen Trigger für das Anstoßen eines Build-Prozesses zu geben. Es kann dazu kommen, dass ein BugFix nur in einem "package" erfolgt und damit evtl. der Trigger für den Build-Prozess nicht greift. Die Idee, einen Build durch die Aktualisierung einer zentralen composer.json zu erzwingen, stellt uns vor Versionsnummern-Konflikte (wie aktuell bei DB-Migrations). * Die Modularisierung von xRes in "packages" kann verstanden werden sowohl als "Kapselung in wiederverwendbares Bibliotheken", als auch als vollständige Auspaltung in "bundles". Eine Entscheidung darüber haben wir nicht getroffen, diese "Strategie" sollte aber vor einem evtl. Umbau einheitlich verstanden sein. Ideen: * Das Qualitätsmanagement könnte in Zukunft über einen zentralen CI-Server erfolgen. Dieser merkt alle Änderungen in git-Remote-Branches und führt darauf automatisch ein Qualitätsmanagement aus. Weiteres Vorgehen: * Für kommenden Freitag lade ich erneut zu einem Meeting ein, in welchem wir die Besprechung fortsetzen werden. * Bis zu diesem Meeting sind alle Entwickler aufgefordert, Ideen für/gegen oben stehende Probleme zu sammeln. Im Meeting wurde bereits vorgeschlagen, o zusätzliche Werkzeuge einzusetzen oder o die Idee zur Modularisierung von xRes mit Packages anzupassen oder o unsere aktuellen xRes-Workflows anzupassen oder o die Modularisierung / Strukturierung von xRes evtl. oder zusätzlich per Namespaces vorzunehmen. * Im xRes-Code liegen zum Teil kundenspezifische Daten. Diese sollten bitte in das build_customer_config überführt werden, damit sie in Kürze über das "xres-config" Deployment nach /var/xres/ mirgiert und ausgerollt werden können. VG SRK -- Mit freundlichen Grüßen Stefan Rank-Kunitz - Lead Developer - ________________________________________________________ TraSo GmbH Georg-Schumann-Str. 294 D-04159 Leipzig Tel.: +49 341 355 740 - 43 E-Mail: s.rank-kunitz@traso.de ________________________________________________________ Handelsregister: Amtsgericht Leipzig, HRB 21850
Moin, Wie besprochen treffen wir uns heute nach dem Standup wieder zur Diskussion über die Architektur von xRes. VG SRK Am 27. Mai 2016 16:59:28 MESZ, schrieb Stefan Rank-Kunitz <s.rank-kunitz@traso.de>:
Moin,
Zuerst vielen Dank für die konstruktive Runde zur Entwicklung der Architektur, des Build- und Deployment-Prozesses von xRes.
Anbei sende ich Euch das Tafelbild und die wesentlichen Punkte der Besprechung.
Grundlage des Gespräches waren
* die Konzeption von VBE zur Modularisierung von xRes in "packages" (letztes Entwickler-Meeting) und * OHO zur Integration des Composers in den Build-Prozess (siehe PullRequest in dieser Woche).
Anforderungen einen xRes-Build-und-Deployment-Prozess:
* Wir möchten weiterhin eine Trennung zwischen Build- und Deployment aufrecht erhalten. Die Speicherung von "Artefakten" nach einem Build-Prozess einschließlich Qualitätsprüfung (z.B. UnitTests) wird als Vorteil gesehen. * Wir möchten xRes in Zukunft nicht mehr kundenspezifisch bauen, sondern EINE gemeinsame xRes-Version bauen und ausrollen. Alle kundenspezifischen Daten (aktuell: PDF-Dateien, favicons, htaccess-Files) sollen in Zukunft über das Config-Deployment (wie auch Cron-Jobs) ausgerollt und vom xRes aus /var/xres/... geladen werden. Der Build-Prozess wird damit circa um Faktor 6-8 schneller werden (der Durchlauf der UnitTests wird nicht analog beschleunigt). * Wie möchten weiterhin alle externen Abhängigkeiten in unseren git-Repositories spiegeln und damit die Kontrolle über Versionen, Erreichbarkeit usw. behalten.
Probleme:
* Die bereits diskutierte Idee der Modularisierung von xRes in "packages" beinhaltet, viele Code-Bestandteile in jeweils eigene git-Repositories auszulagern. Das Durchspielen des Workflows zeigte uns jedoch, dass wir dann für EINE Software-Änderung (im Sinne eines JIRA-Tickets) evtl. viele PullRequests abzugeben hätten, die NUR ZUSAMMEN in ein Release gemerged werden dürften. Dies erscheint aktuell eine deutliche Verkomplizierung unserer Arbeit mit PullRequests zu sein. Auch Ansätze über git-Tags und Versionierung aus Branch-Namen heraus haben uns bisher nicht zum Ziel führen können. * Eine weitere Komplexität, die aus oben genannter Aufspaltung zu folgen scheint, betrifft das System der Abhängigkeiten: Die Zuordnung der Abhängigkeit einer Applikation / eines Paketes von einem anderen Paket soll einerseits von uns Entwicklern aktiv und gezielt gesteuert werden können => muss aber auf der anderen Seite mit der Übernahme einer Änderung in eine Release-Version automatisch oder manuell aktualisiert werden. Wir haben darauf hingewiesen, dass Builds von testing-Branches oder Verschachtelung von Sub-Abhängigkeiten diese Steuerung sehr komplex werden lassen. * Eine Auslagerung von Softwarebestandteilen in viele kleine git-Repositories erschwert die Aufgabe, einem Build-System einen Trigger für das Anstoßen eines Build-Prozesses zu geben. Es kann dazu kommen, dass ein BugFix nur in einem "package" erfolgt und damit evtl. der Trigger für den Build-Prozess nicht greift. Die Idee, einen Build durch die Aktualisierung einer zentralen composer.json zu erzwingen, stellt uns vor Versionsnummern-Konflikte (wie aktuell bei DB-Migrations). * Die Modularisierung von xRes in "packages" kann verstanden werden sowohl als "Kapselung in wiederverwendbares Bibliotheken", als auch als vollständige Auspaltung in "bundles". Eine Entscheidung darüber haben wir nicht getroffen, diese "Strategie" sollte aber vor einem evtl. Umbau einheitlich verstanden sein.
Ideen:
* Das Qualitätsmanagement könnte in Zukunft über einen zentralen CI-Server erfolgen. Dieser merkt alle Änderungen in git-Remote-Branches und führt darauf automatisch ein Qualitätsmanagement aus.
Weiteres Vorgehen:
* Für kommenden Freitag lade ich erneut zu einem Meeting ein, in welchem wir die Besprechung fortsetzen werden. * Bis zu diesem Meeting sind alle Entwickler aufgefordert, Ideen für/gegen oben stehende Probleme zu sammeln. Im Meeting wurde bereits vorgeschlagen, o zusätzliche Werkzeuge einzusetzen oder o die Idee zur Modularisierung von xRes mit Packages anzupassen oder o unsere aktuellen xRes-Workflows anzupassen oder o die Modularisierung / Strukturierung von xRes evtl. oder zusätzlich per Namespaces vorzunehmen. * Im xRes-Code liegen zum Teil kundenspezifische Daten. Diese sollten bitte in das build_customer_config überführt werden, damit sie in Kürze über das "xres-config" Deployment nach /var/xres/ mirgiert und ausgerollt werden können.
VG SRK
-- Mit freundlichen Grüßen
Stefan Rank-Kunitz - Lead Developer - ________________________________________________________ TraSo GmbH
Georg-Schumann-Str. 294 D-04159 Leipzig Tel.: +49 341 355 740 - 43
E-Mail: s.rank-kunitz@traso.de ________________________________________________________ Handelsregister: Amtsgericht Leipzig, HRB 21850
-- Mit freundlichen Grüßen Stefan Rank-Kunitz - Lead Developer - ________________________________________________________ TraSo GmbH Georg-Schumann-Str. 294 D-04159 Leipzig Tel.: +49 341 355 740 - 43 E-Mail: s.rank-kunitz@traso.de ________________________________________________________ Handelsregister: Amtsgericht Leipzig, HRB 21850
participants (1)
-
Stefan Rank-Kunitz