Neue Versionen für Serveranwendung

  • Themenstarter Themenstarter Gelöschtes Mitglied 68249
  • Beginndatum Beginndatum
G

Gelöschtes Mitglied 68249

Gast
Hi,

ich habe mal ein paar grundsätzlich Fragen zur Versionierung, und wie ihr das macht, bzw. machen würdet.

Ich arbeite seit fünf Jahren an einer Serveranwendung mit Web-Frontend und in der Zeit haben wir einige Versionen veröffentlicht. Aber so ein paar Sachen denke ich mir immer könnten besser laufen. Mittlerweile habe ich wenigstens die Versionsnummer dreistellig, also die erste Zahl für große technische Veränderungen, die zweite für kleine und de dritte für fixes. Hier schon die erste Frage, macht eine vierte Zahl für das Build Sinn? Und wie zählt man das?

Kleines Vorwort zur Umgebung. In der Firma gibt es nativ viele Schichten, in dem Projekt gibt es emotional 5 Schichten, Anwendungsserver ist immer ein WLP:
Entwicklung -> lokaler Build, der die Datenbank der Test mit verwendet. Kann komplett frei gewartet und konfiguriert werden. Von hier hat man Zugriff auf sowohl produktive, als auch Test-Fremdsysteme.
Test -> liegt auf einem AIX Server, Files aus dem Build werden in einem Serververzeichnis abgelegt und der Applikationsserver wird mit einer Datei zur Installation der neuen Sourcen animiert. Ab hier ist keine eigene Konfiguration des WLP mehr möglich. Zugriff nur auf Entwicklungsumgebungen der Fremdsysteme.
Abnahme -> AIX-Server, eigene Datenbank. Transport der Sourcen nur mit einem Paket, Installation muss formlos beantragt werden, Zugriff nur auf Pre-Prod-Systeme der Fremdsysteme.
Pilot -> Eigene Datenbanken, alles, wie davor, nur liegt der AIX in der Produktivumgebung und kann somit auch auf die Prodsysteme der Fremdsysteme zugreifen. Hier sieht man, ob die Firewallfreigaben passen.
Produktion -> Wie Pilot, mit eigener Datenbank, aber hier sind dann auch mehr User auf dem System.

Datenbank ist im Hintergrund immer eine Oracle. Und die Datenbank bereitet mir seit Jahren am meisten Kopfzerbrechen. Jeder kennt es, dass in einer neuen Version evtl. Tabellen dazu kommen, oder bestehende Tabellen verändert werden müssen. Am Anfang hat das für mich bedeutet, dass ich die Veränderungsstatements selbst ausgeführt habe. Also entweder die Nacht vor dem Update, oder nach dem Update, was dann meistens in einem Neustart des Servers ausgeartet ist.

Mittlerweile habe ich eine Klasse im Build, die beim Serverstart direkt geladen wird und die Anpassungen machen soll. Hier gibt es aber das Problem, dass alles in jedem Stage funktioniert, NUR Create-Statements werden aus unbekannten Gründen nicht im Prod ausgeführt. Pilot ja, Prod nein. ch verwende dann denselben User, wie auch der WLP um die Creates manuell ab zu setzen. Diese kann ich theoretisch im Prod auch schon während der Abnahme ausführen, weil neue Tabellen tun dem Code ja nicht weh, aber ich verstehe es nicht.

Aber dazu meine Frage, wie könnte man die Datenbankveränderungen denn sonst noch anstoßen, bzw. wie würdet ihr das machen?

Des weiteren noch eine kleine Frage, wo sollte ich die Versionsnummer meiner Anwendung Pflegen, bzw. gibt es vielleicht eine sinnvolle Möglichkeit, dass die Anwendung diese selbst pflegt?
 
Hi,

für Datenbankmigration verwende ich immer


oder Flyway.

Liquibase finde ich persönlich deutlich besser.

Du sagst nicht, welches Framework verwendet wird. Aus Erfahrung kann ich sagen, dass es gut funktioniert die DB Änderungen beim Start der Anwendung durchzuführen. Um hier keine Unfälle zu produzieren würde ich die Datenmigration aber seperat durchführen.

Bei solchen Sachen, wie Blue/Green Deployment ist es empfehlenswer die neue Version und die alteversion in der Software zu unterstützen. ggf. durch sinnvolle Adaptoren.

Für die Versionspfle möchte ich am Besten die Informationen aus GIT nutzen. Wir verwenden für die Entwicklung gitflow, somit hat man den Versionsstring explizit in dem Branchnamen und die Buildnummer anhand des Commit Hashes.

Die Buildwerkzeuge (grade, maven etc.) können diese Daten lesen und der Anwendung bereitstellen. Die Anwendung kann diese Daten lesen und darstellen.
 
Liquibase würde ich auch empfehlen.

Für die Nummerierung der Versionen sollte man sich für ein Schema entscheiden, ein bekanntes ist https://semver.org/

Bzgl. der Pflege der Versionen. GIT + Maven/Gradle. Bei uns ist es so, es gibt einen Main Branch der die Entwicklung für die nächste Version enthält und dann z.B. die Version 3.1.0-SNAPSHOT hat. Wenn die Version released wird, dann wird ein Branch hotfix-3.1 angelegt, wo bei Bedarf dann 3.1.1, 3.1.2 usw. gebaut werden. Der Main bekommt dann - je nach dem was die nächste Version ist - 3.2.0-SNAPSHOT oder 4.0.0-SNAPSHOT.

Mittels der Build-Tools (Maven/Gradle) kann man z.B. die Version auch in eine MANIFEST-Datei schreiben und aus der Anwendung drauf zugreifen.
 

Zurück
Oben