Eine Produktversion wie z. B. v1.0.0.100
stellt nicht nur eine einzigartige Produktionsversion von Software dar, sondern hilft auch bei der Identifizierung von Funktionssätzen und Hotfix-Phasen für dieses Produkt. Im Moment sehe ich zwei Möglichkeiten, die endgültige Paket- / Build- / Binärversion eines Produkts zu pflegen:
Versionskontrolle. Eine Datei speichert irgendwo die Versionsnummer. Der Build-Server für Continuous Integration (CI) verfügt über ein Skript zum Erstellen der Software, das diese eingecheckte Versionsnummer verwendet, um sie auf alle Bereiche der benötigten Software anzuwenden (Binärdateien, Installationspakete, Hilfeseiten, Dokumentation usw.).
Umgebungsparameter und / oder Build-Parameter. Diese werden außerhalb der Versionskontrolle verwaltet (dh sie sind nicht an den Snapshot / Tag / Zweig gebunden). Die Erstellungsskripte verteilen und verwenden die Zahl auf die gleiche Weise, erhalten den Wert jedoch nur unterschiedlich (sie werden dem Erstellungsskript zur Verfügung gestellt, anstatt dem Skript mitzuteilen, wo sie relativ zum Quellbaum abgerufen werden sollen).
Das Problem beim ersten Ansatz besteht darin, dass Zusammenführungen über Hauptleitungszweige hinweg kompliziert werden können. Wenn Sie immer noch zwei parallele Versionen derselben Software verwalten, werden Konflikte beim Zusammenführen der beiden Hauptversionen behoben, wenn sich die Version auf beiden seit der letzten Zusammenführung geändert hat.
Das Problem beim zweiten Ansatz ist die Versöhnung. Wenn Sie vor einem Jahr zu einem Release zurückkehren, verlassen Sie sich ausschließlich auf die Tag-Informationen, um dessen Release-Nummer zu identifizieren.
In beiden Fällen gibt es möglicherweise bestimmte Aspekte der Versionsnummer, die vor der CI-Erstellung nicht bekannt waren. Zum Beispiel kann ein CI-Build programmgesteuert eine vierte Komponente einfügen, bei der es sich tatsächlich um die automatisierte Build-Nummer handelt (z. B. 140. Build für den Zweig). Es kann sich auch um eine Versionsnummer in VCS handeln.
Was ist der beste Weg, um mit der Versionsnummer einer Software Schritt zu halten? Sollen die "bekannten" Teile immer in VCS gepflegt werden? Und wenn ja, sind die Konflikte zwischen den Hauptniederlassungen ein Problem?
Im Moment pflegen wir unsere Versionsnummer über Parameter, die im CI-Build-Plan (Atlassian Bamboo) angegeben und gepflegt sind. Wir müssen vor dem Zusammenführen in unserer master
Filiale darauf achten, dass die Versionsnummern vor dem Start des CI-Builds ordnungsgemäß eingerichtet werden . In Bezug auf den Gitflow-Workflow bin ich der Meinung, dass wir, wenn die Versionsnummer in der Quellcodeverwaltung nachverfolgt würde, garantieren könnten, dass sie ordnungsgemäß eingerichtet ist, wenn wir unseren release
Zweig in Vorbereitung auf die Veröffentlichung erstellen . Die Qualitätssicherung würde einen abschließenden Integrationstest / Rauch- / Regressionstest für diesen Zweig durchführen und nach dem Signoff findet eine Zusammenführung master
statt, die die Verpflichtung zur Freigabe signalisiert.
version.txt
in der eine Version die einzelne Zeile1.0.7
und die andere enthält,1.2.0
wirklich so schwer zu lösen? Wenn dies der einzige Konflikt ist, bei dem zwei Zweige zusammengeführt werden, würde ich mich als sehr glücklich schätzen. Wie oft kommt es vor? Ist es nicht gut, dass Sie gezwungen sind, sich zu überlegen, welche Versionsnummer die zusammengeführte Version haben sollte, wenn dies der Fall ist ? (Entschuldigen Sie die mehrdeutige Verwendung des Wortes "Version".)