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:
- / builds / trunk / [rev] [date] [build_id] /
- / builds / tags / release_0_1_3beta4 / [rev] [date] [build_id] /
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 ...