Was sind die Gründe, warum Bitbucket-Server nicht zum Speichern von Artefakten verwendet wird?

10

Ich arbeite mit einem Unternehmen zusammen, das ein brandneues Projekt aufbaut, und wir sprechen darüber, welche Tools für was verwendet werden sollen. Ich habe über Artifactory oder Nexus zum Speichern von gebauten Artefakten (in diesem Fall APKs) gesprochen und sie haben gefragt, warum sie Bitbucket nicht einfach so verwenden können, wie sie es für die Software verwenden, um die Anzahl der Tools zu reduzieren, die sie installieren und warten müssen.

Meine erste Antwort war "Quelle geht in Quell-Repo und Artefakte gehen in Artefakt-Repo", aber das ist eigentlich keine Antwort, warum oder warum nicht. Tatsächlich bot das Herum googeln auch keine Begründung.

HINZUFÜGEN: Dieses Produkt ist für eine regulierte Industrie bestimmt. Das heißt, wir benötigen eine vollständige versionierte, überprüfbare Aufzeichnung der erstellten Artefakte. Dies ist einer der Gründe, warum wir uns damit befassen. Wie ich bereits in einigen Kommentaren erwähnt habe, aber hier hinzufügen werde, werden wir Bitbucket in einem privaten GCP installieren, auf das die Öffentlichkeit nicht zugreifen kann, sodass keine Bedenken bestehen, dass andere darauf zugreifen.

Irgendwelche Eingaben dazu? Was würde uns später beißen, wenn wir sie in Bitbucket aufbewahren?

dj_segfault
quelle

Antworten:

11

Gründe, große Binärdateien nicht in einem gitRepository zu speichern :

  • Jeder, der Ihr Repository klont, lädt standardmäßig alle diese Binärdateien herunter. Binaries, wenn regelmäßig gebaut, neigt zu konsumieren massive Mengen an Speichern, im Vergleich zu Quellcode - gitsie nicht komprimieren kann, oder berechnen Deltas, ihre Größe zu reduzieren.
  • gitunternimmt große Anstrengungen, um sicherzustellen, dass der Verlauf nicht verloren geht. Es wird niemals etwas gelöscht, das Teil des Verlaufs von ref(Zweigen oder Tags) ist. Das bedeutet auch, dass Sie, wenn Sie sich später dazu entschließen, alte, lange nutzlose Binärdateien zu löschen, weil Ihnen der Speicherplatz ausgeht, feststellen werden, dass dies zwar nicht unmöglich, aber in der Tat sehr schwierig ist.
  • Ein Punkt bei geeigneten Artefaktspeichern ist, dass sie dazu beitragen, veraltete oder kompromittierte Teile aus dem Verkehr zu ziehen. gitIch kann das nicht wirklich für Sie tun - dafür müssten Sie Ihr eigenes Werkzeug schreiben - und Sie werden die alten Versionen in der Geschichte nie los.
  • Das Konzept eines "Commits" gilt nicht wirklich für Binärdateien. Sie benötigen Vorgänge wie "Upload" und "Download", da diese regelmäßig an den Erstellungsprozessen Ihrer Software beteiligt sind (dh bundlerin der Ruby-Welt oder mavenin Java). Diese Builder wissen, wie sie ihre Bibliotheken von Drittanbietern einfach aus Artefakt-Repositorys abrufen und neue Versionen hochladen können. Sie sind möglicherweise davon überzeugt, mit einem gitRepository für Downloads zu arbeiten. Da gitjedoch keine Versionsinformationen vorhanden sind, müssen Sie erneut über ein eigenes Tool verfügen, das Commit angeben, in dem diese Binärdatei manuell gefunden werden soll, oder alle jemals verwendeten Binärdateien lokal auschecken lassen. Und das Hochladen in ein gitRepository würde wiederum Ihr eigenes Tool verwenden (wodurch auch falsche Commits erstellt werden).

Insgesamt ist die Verwendung gitdafür nur das falsche Werkzeug. Wenn Ihre Kollegen Angst haben, ein weiteres komplexes Tool wie Nexus hinzuzufügen, überzeugen Sie sie zumindest, ein einfaches Tool anstelle eines gitbeliebigen Tools (s)ftp/ scpRepositorys in einer VM zu verwenden, httpsauf das über einen einfachen Webserver zugegriffen werden kann.

Wenn Sie müssen verwenden git, dann zumindest sicherstellen , dass die Build - Binärdateien sind nicht mit dem Quellcode begangen zusammen, aber in ihrem eigenen Teil der Geschichte. In dieser älteren Antwort erfahren Sie, wie Sie einen verwaisten Zweig erstellen . Diese können zumindest später gelöscht und die Binärdateien selbst durch Speicherbereinigung entfernt werden. und nicht jeder Client ist gezwungen, ständig alles herunterzuladen.

AnoE
quelle
Bitte lesen Sie, was ich der ursprünglichen Frage hinzugefügt habe, nachdem Sie Ihre Frage gelesen haben. Wir benötigen eine vollständige Aufzeichnung aller gebauten Artefakte. Ich bin gespannt auf Ihre Aussage "Git hat keine Versionsinformationen". Genau das macht git und die Versionierung der erstellten Artefakte ist genau das, was wir brauchen. Wir erstellen auch APKs, keine Bibliotheken, die in anderen Builds enthalten sein sollen. WRT prüft Quelle und Binärdateien zusammen, ja, ich würde erwarten, ein anderes Repo für Binärdateien zu verwenden. Vielen Dank.
dj_segfault
2
Ich meinte "Versionsinformationen" im Sinne der Semantik - die Artefakt-Repositorys wissen, dass ein einzelnes Artefakt (Name) mehrere Versionen haben kann; gib dir das "neueste" und so weiter. Aus Ihrem Kommentar geht hervor, dass Sie unterschiedliche Repositorys verwenden und auch in die Frage eingehen sollten. das würde den ganzen Standpunkt verändern. Meine Antwort war die Annahme, dass Ihre Kollegen die Build-Binärdateien zusammen mit dem Quellcode festschreiben möchten .
AnoE
5

Sie können ein Git-Repository (unabhängig davon, ob es auf Bitbucket gehostet wird oder nicht) als Artefakt-Repository verwenden. Beachten Sie jedoch Folgendes:

  • Git wurde ursprünglich als Versionskontrollsystem für Quellcode entwickelt , nicht für (große) Binärdaten, und dies ist immer noch das Hauptanliegen. Es gibt Erweiterungen, mit denen Sie effizient mit großen Dateien in Git arbeiten können, z. B. Git LFS , aber dennoch: Es ist nicht in den Kern von Git integriert.
  • Ein geeignetes Artefakt-Repository verfügt über Funktionen, die ein Git-basierter Dienst nicht einfach bereitstellen kann. Zum Beispiel möchten Sie wahrscheinlich ältere Snapshot-Artefakte löschen. Eine Operation, für die Git nicht entwickelt wurde, ist jedoch eine Kernfunktion von Artefakt-Repositorys. Weitere solche Funktionen finden Sie in den Antworten auf die Frage Was ist ein Artefakt-Repository? .

So , während Sie können Git / Bitbucket als Artefakt - Repository verwenden, ist es ein bisschen wie eine Schraube mit einem Hammer anstelle eines Schraubendrehers fahren.

siegi
quelle
0

Wenn Sie apk-Dateien in Bitbuckets Repo speichern möchten, müssen Sie git verwenden oder es zum Klonen locken. Und wenn Repo privat ist, müssen Sie Zugriff darauf haben, Größenbeschränkung usw.

Das Software-Repository ist komfortabler zum Speichern von Binärdateien. Sie können Ihren eigenen Spiegel von Maven, Google Repos erstellen.

Meiram Chuzhenbayev
quelle
Interessanter Winkel. Zufällig ist diese Anwendung eine Android-App, die immer seitlich geladen wird und nicht aus dem App Store. Das private Repo ist ein Plus für uns. Ich bin damit einverstanden, dass all dies eher ein Problem wäre, wenn wir über Bibliotheken sprechen würden, die in anderen Builds enthalten sein sollen. Danke für deinen Beitrag.
dj_segfault
0

Sie können Bitbucket-Pipelines verwenden, um sie im Download-Bereich bereitzustellen und Ihre Artefakte dort zu behalten. Hier ist ein Beispiel aus ihrer Dokumentation

Manasouza
quelle
Ich fand , dass und dachte , dass eine gute Idee war, aber ich THINK (habe festgestellt , nicht die Dokumentation , die definitiv sagen) Downloads nur für ihre Cloud - Version ist. Wir installieren Bitbucket in unserer Umgebung. Wird das noch funktionieren?
dj_segfault
@dj_segfault, Bitbucket Pipelines (und damit wahrscheinlich auch der Download-Bereich) sind (derzeit?) "nur Cloud", siehe diese Frage im Atlassians Support Forum und BSERV-9245 in ihrem Bug Tracker .
Siegi
0

Wie andere gesagt haben, würden Sie die Binärdateien nicht in Git einchecken. Bitbucket bietet jedoch einen separaten Bereich "Downloads" pro Repo. Dies ist ein separater Bereich, der nicht Teil des Git Repo ist. Wenn Sie Bitbucket Pipelines verwenden, können Sie die Bereitstellung im Downloadbereich sogar automatisieren , wenn dies für den Workflow geeignet ist.

Crazyscot
quelle