Comment gardez-vous les binaires publiés sous contrôle de version? Cela permet de suivre les éléments modifiés entre chaque version. Je veux séparer les binaires publiés du référentiel source. Les binaires publiés sont soit construits à partir du logiciel d'intégration continue, soit compilés manuellement.
version-control
release-management
linquize
la source
la source
Réponses:
Deux options:
a) Non. Assurez-vous simplement que vous disposez de versions déterministes reproductibles, c'est-à-dire que la génération de la même révision de contrôle de source avec la même configuration produit toujours exactement le même binaire.
b) Désignez un répertoire quelque part comme source faisant autorité pour les versions publiées. Intégrez le téléchargement des fichiers binaires à la procédure de déploiement / expédition et assurez-vous que le répertoire de publication publiée est couvert par votre plan de sauvegarde. Vous n'avez pas besoin de contrôle de version ici; les builds sont à écriture unique, si vous avez besoin de changer quoi que ce soit, vous faites une nouvelle build.
Quoi qu'il en soit, les binaires et autres sorties de génération n'appartiennent pas au contrôle de source, pour de nombreuses raisons.
la source
Utilisez un référentiel d'artefacts pour les binaires, pas un système de contrôle de version. Une version spécifique d'un binaire publié n'est pas censée changer au fil du temps, donc le contrôle de version n'a pas de sens puisque le ou les fichiers ne changeraient pas.
Voir par exemple les référentiels Maven comme référentiel pour archiver / publier / proposer des versions et autres binaires (par exemple, comme la documentation)
la source
Il suffit de les mettre dedans. Il n'y a pas de problème avec ça, à moins que vous n'utilisiez git (qui ne fusionne pas bien les binaires, donc vous devrez les gérer vous-même) ou que vous les commettez trop de fois (ne validez que quand c'est prêt à expédier, pas à chaque fois que vous le construisez).
La plupart des binaires delta SCMs fonctionnent assez bien, nous avions l'habitude de mettre une DLL de ressource de 2Mb dans notre SVN et elle serait delta à quelques ko à chaque fois.
J'entends beaucoup d'arguments selon lesquels les SCM sont pour la source, pas pour les binaires, mais c'est clairement faux si l'on considère que la plupart des logiciels sont constitués d'images, même si ce ne sont que des fichiers d'icônes. Ce sont des binaires, mais ils font partie de la source, alors mettez-les et ne soyez pas si dogmatiques à ce sujet. J'entends également que vous pouvez simplement reconstruire le binaire en cas de besoin, souvent c'est le cas, mais cela peut être un énorme effort de perte de temps pour les systèmes plus anciens qui ne sont plus activement pris en charge. Si vous devez recréer un système avec uniquement des Service Packs ou des correctifs plus anciens pour correspondre au système qui a été utilisé pour créer un binaire il y a 3 ans, vous serez heureux d'avoir ajouté le bac à votre SCM à l'époque.
La seule fois où vous devez vous soucier de l'ajout de builds à votre SCM est si vous le faites automatiquement dans le cadre du processus de serveur de build - ne faites pas cela. Vous remplirez votre SCM de builds qui ne vous apporteront aucun avantage. Au lieu de cela, ajoutez-les uniquement lorsqu'ils sont publiés. De cette façon, vous savez exactement ce que possède votre client et vous pouvez reproduire tous les problèmes signalés par le client avec les fichiers binaires qu'ils utilisent, et non ceux que vous avez reconstruits (en utilisant, disons, les dernières mises à jour du compilateur ou du système d'exploitation).
la source
Je ne garde pas les binaires des versions sous contrôle de version. Au lieu de cela, je les publie à un endroit bien défini afin que d'autres outils et les inspectent et les utilisent. Je fais beaucoup de travail en Java, ce qui signifie que je publie des fichiers JAR dans les référentiels Maven locaux. Cependant, je n'utilise pas ces outils pour suivre ce qui a changé par version. Après tout, ce sont des binaires et il n'y a pas vraiment grand-chose à suivre à part le nombre de fichiers.
Afin de suivre les changements entre les versions, je voudrais étiqueter ou étiqueter les versions dans mon système de contrôle de version avec le numéro de version de la version. Mais ce n'est vraiment que pour suivre les fichiers source, pas les binaires. Les binaires sont des artefacts de la génération et n'ont pas besoin d'être sous contrôle de version.
la source
La meilleure solution consiste à utiliser exclusivement votre système CI pour toutes les versions significatives sur le plan organisationnel (versions, versions candidates, etc.).
Cela lie systématiquement les fichiers binaires publiés au contenu du référentiel sans avoir à stocker réellement les fichiers binaires dans le référentiel.
Par exemple, si vous utilisez SVN, utilisez le schéma d'organisation de branche principale; effectuez tous les développements quotidiens dans / trunk et créez une balise / pour chaque version une fois qu'elle est prête.
Configurez votre système CI pour construire à partir de balises ainsi que de tronc, et faites-le écrire la sortie dans un répertoire réseau dont la structure reflète la structure de niveau supérieur du référentiel:
Le système de build devra traiter le répertoire / builds / trunk / comme un tampon circulaire, stocker les n dernières builds, supprimer les anciennes builds au fur et à mesure.
Le répertoire / builds / tags / , d'autre part, est un magasin permanent. Les artefacts de construction eux-mêmes sont stockés dans des répertoires dont les noms sont générés selon le schéma suivant:
où [rev] est l'ID de révision SVN, [date] est la date au format YYYYMMDD et [build_id] est un compteur unique à 3 chiffres, incrémentant à partir de la première génération, rendant chaque répertoire de construction unique.
Le processus détaillé ci-dessus vous offre les avantages suivants:
Les artefacts de build sont liés systématiquement à la source qui les a générés, vous pouvez donc trouver très facilement la source d'un artefact de build particulier (et vice versa).
Cela constitue la base d'une automatisation supplémentaire des versions. Par exemple, génération automatique de documents de sortie etc ...
la source