Wie können Sie freigegebene Binärdateien unter Versionskontrolle halten? Auf diese Weise können Sie nachverfolgen, welche Inhalte zwischen den einzelnen Releases geändert werden. Ich meine, die freigegebenen Binärdateien vom Quell-Repository zu trennen. Die freigegebenen Binärdateien werden entweder aus der Continuous Integration-Software erstellt oder manuell kompiliert.
version-control
release-management
linquize
quelle
quelle
Antworten:
Zwei Optionen:
a) Tu es nicht. Stellen Sie einfach sicher, dass Sie reproduzierbare deterministische Builds haben, dh, dass das Erstellen derselben Versionsverwaltungsversion mit derselben Konfiguration immer genau dieselbe Binärdatei erzeugt.
b) Legen Sie irgendwo ein Verzeichnis als maßgebliche Quelle für veröffentlichte Builds fest. Stellen Sie sicher, dass das Hochladen der Binärdateien Teil des Bereitstellungs- / Versandverfahrens ist und dass das Verzeichnis für veröffentlichte Builds in Ihrem Sicherungsplan enthalten ist. Sie benötigen hier keine Versionskontrolle. Builds sind einmal schreibbar. Wenn Sie etwas ändern müssen, erstellen Sie einen neuen Build.
In beiden Fällen gehören Binärdateien und andere Build-Ausgaben aus zahlreichen Gründen nicht zur Quellcodeverwaltung.
quelle
Verwenden Sie ein Artefakt-Repository für Binärdateien, kein Versionskontrollsystem. Eine bestimmte Version einer freigegebenen Binärdatei sollte sich im Laufe der Zeit nicht ändern. Daher ist eine Versionskontrolle nicht sinnvoll, da sich die Datei (en) nicht ändern würden.
Siehe beispielsweise Maven-Repositorys als Repository zum Archivieren / Veröffentlichen / Anbieten von Releases und anderen Binärdateien (z. B. Dokumentation).
quelle
Geben Sie sie einfach ein. Das ist kein Problem, es sei denn, Sie verwenden git (das die Binärdateien nicht gut zusammenführt, sodass Sie sie selbst verwalten müssen) oder Sie schreiben sie zu oft fest (schreiben Sie nur, wenn es ist) versandbereit, nicht jedes Mal, wenn Sie es bauen).
Die meisten Delta-Binärdateien von SCMs waren recht gut. Wir haben eine 2-MB-Ressourcen-DLL in unseren SVN eingefügt, die jedes Mal ein Delta von einigen KB aufweist.
Ich höre viele Argumente, dass SCMs als Quelle und nicht als Binärdateien dienen, aber dies ist eindeutig falsch, wenn man bedenkt, dass die meiste Software aus Bildern besteht, auch wenn es sich nur um Symboldateien handelt. Sie sind Binärdateien, aber sie sind Teil der Quelle. Setzen Sie sie ein und seien Sie nicht so dogmatisch. Ich habe auch gehört, dass Sie die Binärdatei bei Bedarf einfach neu erstellen können. Dies ist häufig der Fall, kann jedoch für ältere Systeme, die nicht mehr aktiv unterstützt werden, eine enorme Zeitverschwendung darstellen. Wenn Sie ein System mit nur älteren Service Packs oder Patches neu erstellen müssen, um dem System zu entsprechen, das vor 3 Jahren zum Erstellen einer Binärdatei verwendet wurde, sind Sie froh, dass Sie die Binärdatei damals zu Ihrem SCM hinzugefügt haben.
Sie müssen sich nur darum kümmern, Ihrem SCM Builds hinzuzufügen, wenn Sie dies automatisch als Teil des Build-Server-Prozesses tun. Tun Sie dies nicht. Sie füllen Ihr SCM mit Builds, die für Sie keinen Nutzen haben. Fügen Sie sie stattdessen erst hinzu, wenn Sie freigegeben werden. Auf diese Weise wissen Sie genau, was Ihr Kunde hat, und Sie können alle von Kunden gemeldeten Probleme mit den von ihm verwendeten Binärdateien und nicht mit den von Ihnen neu erstellten Binärdateien (z. B. mit den neuesten Updates für den Compiler oder das Betriebssystem) reproduzieren.
quelle
Ich behalte Release-Binärdateien nicht unter Versionskontrolle. Stattdessen veröffentliche ich sie an einem genau definierten Ort, damit andere Tools sie inspizieren und verwenden können. Ich arbeite viel in Java, was bedeutet, dass ich Jars in lokalen Maven-Repositories veröffentliche. Ich verwende diese Tools jedoch nicht, um zu verfolgen, was sich pro Release geändert hat. Immerhin handelt es sich um Binärdateien, und es gibt außer der Anzahl der Dateien nicht wirklich viel zu verfolgen.
Um Änderungen zwischen Releases nachzuverfolgen, habe ich Releases in meinem Versionskontrollsystem mit der Versionsnummer des Releases gekennzeichnet. Aber das ist wirklich nur, um die Quelldateien zu verfolgen, nicht die Binärdateien. Die Binärdateien sind Artefakte des Builds und müssen nicht der Versionskontrolle unterliegen.
quelle
Die beste Lösung besteht darin, Ihr CI-System ausschließlich für alle organisatorisch wichtigen Builds (Releases, Release-Kandidaten usw.) zu verwenden.
Dadurch werden die freigegebenen Binärdateien systematisch an den Repository-Inhalt gebunden, ohne dass die Binärdateien tatsächlich im Repository gespeichert werden müssen.
Wenn Sie beispielsweise SVN verwenden, verwenden Sie das Zweigstellenschema. Führen Sie die gesamte tägliche Entwicklung in / trunk durch und erstellen Sie ein / -Tag für jedes Release, sobald es fertig ist.
Konfigurieren Sie Ihr CI-System so, dass es sowohl aus Tags als auch aus Trunk erstellt und die Ausgabe in ein Netzwerkverzeichnis schreibt, dessen Struktur die Struktur der obersten Ebene des Repositorys widerspiegelt:
Das Build-System muss das behandeln Verzeichnis / builds / trunk / wie einen Ringpuffer behandeln und die letzten n Builds speichern. Alte Builds müssen dabei gelöscht werden.
Das Verzeichnis / builds / tags / ist dagegen ein permanenter Speicher. Die Build-Artefakte selbst werden in Verzeichnissen gespeichert, deren Namen nach folgendem Schema generiert werden:
Dabei ist [rev] die SVN-Revisions-ID, [date] das Datum im Format JJJJMMTT und [build_id] ein dreistelliger eindeutiger Zähler, der vom ersten Build an inkrementiert wird und jedes Build-Verzeichnis eindeutig macht.
Der oben beschriebene Prozess bietet Ihnen die folgenden Vorteile:
Build-Artefakte sind systematisch an die Quelle gebunden, von der sie generiert wurden, sodass Sie die Quelle für ein bestimmtes Build-Artefakt sehr einfach finden können (und umgekehrt).
Dies ist die Basis für die weitere Release-Automatisierung. Zum Beispiel automatische Generierung von Freigabedokumenten etc ...
quelle