Heute möchten wir euch ein paar Einblicke in die JoomISP Entwicklung geben.
Dieser Beitrag behandelt die Tools des Entwicklungsprozesses wie Projektverwaltung, Versionierung, Entwicklungsumgebung, Continuous Integration & Deployment.
Im zugehörigen Medialekt Blog gehen wir auf die Basis ein, die lokalen Joomla! Entwicklungsinstallationen & Servertechnik mit Docker Container.
Seit Beginn der JoomISP Entwicklungen in 2016 hatten und haben wir diverse Tools im Einsatz, um den Entwicklungsprozess für euch zeitgemäß, schnellstmöglich und in höchstmöglicher Qualität durchzuführen.
Unsere letzten Updates zeigen auch dass wir eine sehr gute Richtung eingeschlagen haben.
Versionierung mit Subversion & Gitlab
Da wir von unserem Hauptprojekt JooWI Online bereits eine Versionierung mit Subversion gewohnt waren, war dies auch das Tool der Wahl als wir Anfang 2016 die Entwicklung von JoomISP fortführten.
Dabei nutzten wir Subversion eher "spartanisch", hauptsächlich im Trunk. Es stellt für alle Entwickler lediglich eine gemeinsame Datenzentrale dar. Bei größeren Releases wurde zwar ein Tag angelegt, welcher aber anderweitig nicht mehr genutzt wurde.
In den vergangenen Wochen beschäftigten wir uns intensiv mit Docker Container und Gitlab als eventuell neue Versionierung. Inzwischen ist es fester Bestandteil und jedes einzelne Plugin, jedes Modul und jede Sprache ist als eigenständiges Projekt angelegt.
Geplant ist dass wir den Feature-Branch Workflow nutzen. Das heißt, jedes einzelne Ticket, egal ob Bug oder Feature Request bekommt einen eigenen Branch und wird dort zuende entwickelt. Kommt parallel ein anderes, vielleicht eiligeres Ticket rein, wird dafür ausgehend vom Master erneut ein eigener Branch dafür angelegt und unabhäng des vorherigen Branches entwickelt. Branches die fertig und vom Entwickler als funktionierend eingestuft werden, werden ins zentrale Git Repository gepusht, wo dann anschließend ein Merge Request zum Master Branch stattfindet.
Dieser Merge Request wird nach einem Code-Review freigegeben, erst dann findet die Änderung seinen Weg in den Master und zu den finalen Releases.
Von diesem wird dann eine neue Version generiert.
Projekt- & Bugtracking mit Mantis bzw. Redmine
In den ersten Wochen der Arbeit an JoomISP hatten wir Mantis als Bugtracker. Grundsätzlich hat alles funktioniert, so recht happy waren wir aber nicht wirklich. Von unserem damaligen Kollegen Matthias bekamen wir den Tipp mit Redmine, welches wir alle sehr schnell ins Herz schlossen. Seither ist Redmine unsere Projektzentrale mit allen Feature-, Bug-Tickets, Aufgaben bis hin zu einem internen Wiki.
Über ein Helpdesk Plugin lesen wir automatisiert via IMAP einen Posteingang ab und bekommen dadurch Tickets ins System, wo sie von einem Entwickler aufgenommen und bearbeitet werden.
IDE & Entwicklungsumgebung
Als IDE dient ebenfalls schon seit langem Netbeans, heute in Version 10. Es ist dabei direkt mit den Git Repositories sowie den Redemine Projekten verbunden. Jedes einzelne Ticket kann jederzeit über die Revision und Zuweisung erneut geladen werden um eventuell übersehene Fehler zu recherchieren.
Die Netbeans Projekte sind jeweils mit FTP bzw. SSH-Keys hinterlegt, jede Änderung oder ein Branchwechsel führt zur umgehenden Synchronisation der Daten auf dem Entwicklungsserver.
Der Entwicklungsserver stellt derzeit bei jedem Entwickler noch eine virtuelle Maschine dar, in welcher auch schnell die PHP-Version gewechselt werden kann. Dies wird aber schon bald ebenfalls gegen Docker Container ausgetauscht.
Continuous Integration & Deployment
Der letzte Feinschliff zur agilen Entwicklung stellt das automatisierte Testen und Veröffentlichen dar. Beim Commit bzw. Merge in den Master werden eine Reihe an Skripten angestoßen, welche alle ein passed liefern müssen, bevor aus den Daten automatisch ein ZIP File generiert wird und auf den Webseiten-Server gelange, wo sie dann von euch heruntergeladen bzw. von euren Joomla Installationen als neue verfügbare Version angezeigt werden.
- Phase 1 - Überprüfung der Code Änderung
- Prüfung der Codequalität mit dem CodeSniffer
- Prüfung der allgemeinen Datei- & Ordnerstruktur
- Unit Tests einzelner Funktionen
- Phase 2 - Überprüfung der Gesamtfunktionalität mit den Änderungen
- Integration Test welcher das Update einspielt
- Integration Test welcher das Admin Panel aufruft
- Integration Test welcher eine Frontend Bestellung auslöst
- Integration Test welcher überprüft ob die Bestellung korrekt im Backend liegt
- und noch eine ganze Menge mehr Tests ...
- Phase 3 - Veröffentlichung der Änderungen
- Erstellung der ZIP Datei
- Hochladen und Bereitstellen auf dem Webseitenserver
Im Hintergrund bzw. allen voran geschehen natürlich deutlich mehr Prozesse, so werden als erstes einige Docker Images für die unterschiedlichen PHP Versionen ab 5.6, eine MySQL Datenbankt sowie die aktuelle Joomla Installation durchgeführt. Erst dann kann die Datei eingespielt werden, auf Funktion und Qualität geprüft werden.
Joomla 3.9.2 Sicherheitsupdate
Vor wenigen Tagen erschien außerdem eine neue Joomla! Version 3.9.2 welche bereits seit einiger Zeit inkl. PHP 7.3 auf der Demo-JoomISP Seite läuft.
Es wurde einige XSS Fixes mit niedriger Priorität sowie ein paar Bugs behoben.
Lest alle Infos auf joomla.org!