Utilisation de Subversion comme référentiel d'artefacts par rapport à un outil de gestion d'artefacts spécifique

19

TL; DR: Pourquoi utiliser quelque chose comme Apache Archiva ou Sonatype Nexus comme référentiel d'artefacts au lieu de Subversion?

Le système de build que j'utilise actuellement a beaucoup de blobs binaires (images, fichiers audio, binaires compilés, etc.), à la fois en entrée et en sortie de nos builds. Notre système de gestion est très ponctuel; certains sont archivés dans notre référentiel Subversion à côté de notre code, certains sont stockés ailleurs en dehors de tout contrôle de version formel.

Je cherche à consolider cela, nous avons donc quelque chose de plus cohérent et facile à utiliser, et qui sépare les artefacts binaires du code.

Google me dit qu'il existe une sélection de référentiels d'artefacts disponibles ( Archiva , Nexus , Artifactory ,…), mais à la lecture, je ne vois aucun avantage à les utiliser par-dessus Subversion. Cela prendra soin des binaires pour nous - cela fait déjà cela pour certains de nos binaires, nous voudrions juste réorganiser la disposition du référentiel pour les séparer du code - et a l'avantage notable que nous avons déjà des serveurs et une expertise Subversion.

Donc. Quel est l'avantage d'utiliser un système de gestion d'artefacts dédié par rapport à l'utilisation d'un outil de contrôle de version général comme Subversion?

moi et
la source
De loin, le plus grand avantage d'utiliser un outil dédié est que d'autres outils savent comment les gérer ! Ils peuvent insérer des artefacts dans ces outils et les retirer automatiquement.
Joachim Sauer

Réponses:

13

Réponse courte: en général, vous n'avez pas besoin d'un historique des artefacts binaires et des modifications apportées à ces artefacts, vous avez juste besoin de versions spécifiques.

Réponse plus longue: chaque fois que vous effectuez une petite modification dans un fichier binaire, les systèmes de contrôle de version n'ont aucun moyen de créer un delta - un diff entre les deux fichiers - donc il crée une toute nouvelle copie.

Dans un CVCS, comme SVN, ce n'est pas si difficile, car vous n'avez qu'une seule copie centrale de votre référentiel - votre copie locale n'est qu'une seule version. (Même si, même dans ce cas, votre référentiel peut devenir très volumineux, ce qui ralentit les enregistrements.) Mais que se passe-t-il si vous passez ultérieurement à un DVCS, où chaque copie d'un référentiel a l'historique complet de chaque fichier? L'ampleur des changements y devient très pertinente.

Et que vous apporte-t-il en échange de la douleur? La seule chose qu'il offre est de pouvoir revenir à une version précédente de votre référentiel et de savoir que vous avez les bons fichiers binaires pour cette version.

Mais avez-vous besoin de tout le binaire dans votre référentiel pour le faire? Ou pouvez-vous vous contenter d'avoir simplement un fichier texte, indiquant au processus de construction les versions à extraire d'un autre référentiel ailleurs?

Ce dernier est généralement proposé par les référentiels d'artefacts.

De plus, certains des plus professionnels, tels que Nexus, vous fourniront également des informations sur l'octroi de licences pour des artefacts tiers, afin que vous ne risquiez pas de tomber sous le coup d'une clause subtile dans ce que vous pensez être une bibliothèque FOSS.

pdr
la source
Ok, je devrais éviter d'utiliser mon référentiel Subversion actuel comme référentiel d'artefacts, mais pourquoi ne pas configurer un nouveau référentiel Subversion? Cela semble avoir tous les mêmes avantages et inconvénients; un référentiel d'artefacts aurait probablement les mêmes problèmes de stockage de grandes données binaires.
me_and
@me_and: Vous pourriez le faire. Mais ensuite, vous devez gérer quelle révision fournit quelle version de l'artefact. Pourquoi vous donner ce travail supplémentaire lorsqu'un référentiel d'artefacts le fait pour vous? C'est comme dire "Pour que je puisse utiliser le Bloc-notes pour écrire mon code? Pourquoi s'embêter avec Eclipse alors?" De plus, vous ne pourrez jamais vraiment supprimer les anciennes versions pour économiser de l'espace. Vous pouvez avec un référentiel d'artefacts.
pdr
1
Pour souligner et étendre la réponse de @pdr, si vous deviez utiliser svn comme référentiel d'artefacts binaires, vous rencontrerez probablement des problèmes de stockage car svn est conçu pour ne jamais supprimer les données. À un endroit où j'ai travaillé, nous avons utilisé svn pour le stockage des artefacts, et nous avons régulièrement dépassé les limites de stockage car il était difficile (pas impossible, mais délicat) de supprimer les anciens artefacts inutilisés du magasin. Les outils natifs de référentiel binaire comme Artifactory et Nexus permettent de supprimer les artefacts inutiles.
Matthew Skelton
3
Correction: Subversion utilise des deltas binaires en interne (et AFAIK uniquement ceux-ci). J'ai fait des expériences il y a de nombreuses années avec le stockage de fichiers MS Office et c'était extrêmement efficace. La taille du référentiel a augmenté très lentement, même lors du remaniement important de 200 diapositives PowerPoint. Mais l'efficacité de l'algorithme delta binaire variera fortement selon le type de fichier et je pense que le manque de politique de rétention est le vrai problème ici (quelque chose que vous pourriez contourner avec un vidage / chargement filtré, mais ensuite vous commencez à écrire votre propre solution).
Peter Becker
"les systèmes de contrôle de version n'ont aucun moyen de créer un delta" - le problème est qu'ils font exactement cela - depuis 2006 ... subversion.apache.org/docs/release-notes/1.4.html#svndiff1 en.wikipedia. org / wiki / Xdelta
RnR
1

Nous utilisons SVN comme référentiel pour les builds de versions et cela fonctionne très bien. Nous avons dans un référentiel de versions mieux que 30 Go de différentes versions et il fonctionne bien en tirant les versions pour le déploiement.

certains des avantages de le faire sont ..

  • Les fichiers binaires ajoutés à SVN sont compressés de près de 60 à 70% sur un espace d'économie moyen.
  • SVN sert de bibliothèque (artificielle) pour les versions et le référentiel est sauvegardé à des fins de reprise après sinistre.
  • SVN via https permet une livraison sécurisée du code de version dans une DMZ.
Lance Lyons
la source