Quelles sont les raisons de ne pas utiliser Bitbucket-server pour stocker des artefacts?

10

Je travaille avec une entreprise qui met en place un tout nouveau projet, et nous parlons des outils à utiliser pour quoi. Je parlais d'Artifactory ou Nexus pour le stockage des artefacts construits (APK dans ce cas), et ils ont demandé pourquoi ils ne pouvaient pas simplement utiliser Bitbucket comme ils utiliseront pour le logiciel, afin de réduire le nombre d'outils dont ils ont besoin pour installer et entretenir.

Ma réponse initiale était "La source va dans le dépôt source et les artefacts vont dans le dépôt d'artefact", mais ce n'est pas vraiment une réponse pourquoi ou pourquoi pas. En fait, googler ne proposait aucun raisonnement non plus.

AJOUTER À CELA: Ce produit est destiné à une industrie réglementée. Cela signifie que nous avons besoin d'un enregistrement complet et vérifiable des artefacts construits. C'est l'une des raisons pour lesquelles nous examinons cela. De plus, comme je l'ai dit dans certains commentaires, mais que j'ajouterai ici, nous installerons Bitbucket dans un GCP privé non accessible au public, il n'y a donc aucune inquiétude quant à l'accès des autres.

Avez-vous quelque chose à dire à ce sujet? Quelque chose qui nous mordrait plus tard si nous les stockions dans Bitbucket?

dj_segfault
la source

Réponses:

11

Raisons de ne pas stocker de gros fichiers binaires dans un gitréférentiel:

  • Tout le monde clonant votre référentiel téléchargera tous ces fichiers binaires, par défaut. Les binaires, s'ils sont construits régulièrement, ont tendance à consommer d' énormes quantités de stockage, par rapport au code source - gitne peuvent pas les compresser ou calculer des deltas pour réduire leur taille.
  • gitfait de grands efforts pour s'assurer que l'historique n'est pas perdu, il ne supprimera jamais rien qui fait partie de l'historique ref(branches ou balises). Cela signifie également que si vous décidez plus tard de supprimer d'anciens fichiers binaires inutiles depuis longtemps en raison d'un manque d'espace, vous constaterez que, bien que cela ne soit pas impossible, très difficile en effet.
  • Un point des magasins d'artefacts appropriés est qu'ils aident à éliminer progressivement les pièces obsolètes ou compromises. gitne peut pas vraiment faire cela pour vous - vous devez écrire votre propre outillage pour cela - et vous ne vous débarrasserez jamais des anciennes versions de l'histoire.
  • Le concept de "commit" ne s'applique pas vraiment aux binaires. Vous avez besoin d'opérations comme "upload" et "download", car elles sont régulièrement impliquées dans les processus de construction de votre logiciel (ie, bundlerdans le monde rubis, ou mavenen Java). Ces constructeurs savent comment récupérer facilement leurs bibliothèques tierces à partir de référentiels d'artefacts et comment télécharger de nouvelles versions. Ils peuvent être convaincus de travailler avec un gitréférentiel pour les téléchargements, mais comme gitil n'y a pas d'informations de version, vous devez à nouveau disposer de votre propre outil, spécifier le commit dans lequel rechercher ce binaire manuellement ou faire vérifier localement tous les binaires jamais utilisés. Et le téléchargement vers un gitréférentiel, encore une fois, utiliserait votre propre outil (créant également des commits parasites).

Au total, utiliser gitpour cela n'est pas le bon outil. Si vos collègues ont peur d'ajouter un autre outil complexe comme Nexus, convainquez-les au moins d'utiliser un outil simple au lieu de git- comme un arbitraire (s)ftp/ scpréférentiel dans une machine virtuelle quelque part, avec httpsaccès via un simple serveur Web.

Si vous devez utiliser git, assurez-vous au moins que les binaires de génération ne sont pas validés avec le code source, mais dans leur propre partie de l'historique. Consultez cette ancienne réponse pour voir comment créer une branche orpheline . Ceux-ci peuvent au moins être supprimés plus tard, et les fichiers binaires eux-mêmes supprimés par la récupération de place; et tous les clients ne sont pas obligés de tout télécharger tout le temps.

AnoE
la source
Veuillez voir ce que j'ai ajouté à la question d'origine après avoir lu votre question. Nous avons besoin d'un enregistrement complet de tous les artefacts construits. Je suis curieux de savoir votre déclaration "Git n'a aucune information de version". C'est ce que fait git, et la version des artefacts construits est exactement ce dont nous avons besoin. Nous créons également des fichiers APK et non des bibliothèques à inclure dans d'autres versions. WRT vérifiant la source et les binaires ensemble, oui je m'attendrais à utiliser un dépôt différent pour les binaires. Merci.
dj_segfault
2
Je voulais dire «informations de version» au sens de la sémantique - les référentiels d'artefacts savent qu'un seul artefact (nom) peut avoir plusieurs versions; vous donner le "plus récent" et ainsi de suite. D'après votre commentaire, le fait que vous utilisez différents référentiels est important et devrait également entrer dans la question; cela changerait tout le point de vue. Ma réponse était de supposer que vos collègues voulaient valider les binaires de construction avec le code source.
AnoE
5

Vous pouvez utiliser un référentiel Git (qu'il soit hébergé sur Bitbucket ou non) comme référentiel d'artefacts, mais vous devez savoir que:

  • Git a été initialement conçu comme un système de contrôle de version pour le code source , pas pour les (grandes) données binaires, et c'est toujours sa principale préoccupation. Il existe des extensions qui permettent de travailler efficacement avec de gros fichiers dans Git, par exemple Git LFS , mais quand même: Il n'est pas intégré au cœur de Git.
  • Un référentiel d'artefacts approprié possède des fonctionnalités qu'un service basé sur Git ne peut pas facilement fournir. Par exemple, vous souhaitez probablement supprimer les anciens artefacts d'instantanés, une opération pour laquelle Git n'est pas conçu, mais ce qui est une fonctionnalité essentielle des référentiels d'artefacts. D'autres fonctionnalités de ce type sont décrites dans les réponses à la question Qu'est-ce qu'un référentiel d'artefacts? .

Ainsi, même si vous pouvez utiliser Git / Bitbucket comme référentiel d'artefacts, c'est un peu comme enfoncer une vis avec un marteau au lieu d'un tournevis.

siegi
la source
0

Si vous stockez des fichiers apk dans le référentiel de Bitbucket, vous devez utiliser git ou le boucler pour cloner. Et si le repo privé vous avez besoin d'y avoir accès, de limiter la taille, etc.

Le référentiel logiciel est plus confortable pour stocker des fichiers binaires. Vous pouvez créer votre propre miroir de maven, google repos.

Meiram Chuzhenbayev
la source
Angle intéressant. En l'occurrence, cette application est une application Android qui sera toujours chargée latéralement, pas depuis l'App Store. Le repo étant privé est un plus pour nous. Je suis d'accord que tout cela serait plus problématique si nous parlions de bibliothèques à inclure dans d'autres versions. Merci pour votre contribution.
dj_segfault
0

Vous pouvez utiliser des pipelines bitbucket pour déployer dans la section de téléchargement et y conserver vos artefacts. Voici un exemple de leur documentation

manasouza
la source
J'ai trouvé cela et j'ai pensé que c'était une excellente idée, mais je PENSE ( je n'ai pas trouvé les documents qui disent définitivement) que les téléchargements sont uniquement pour leur version cloud. Nous installons Bitbucket dans notre environnement. Cela fonctionnera-t-il toujours?
dj_segfault
@dj_segfault, les pipelines Bitbucket (et donc probablement aussi la section de téléchargement) sont (actuellement?) "cloud uniquement", voir cette question sur le forum de support Atlassians et BSERV-9245 dans leur traqueur de bogues .
siegi
0

Comme d'autres l'ont dit, vous ne voudriez pas archiver les binaires dans git. Mais, Bitbucket propose une zone "Téléchargements" séparée par repo. Il s'agit d'une zone distincte, qui ne fait pas partie du dépôt git. Si vous utilisez Bitbucket Pipelines, vous pouvez même automatiser le déploiement dans la zone de téléchargement , si cela convient au flux de travail.

crazyscot
la source