La mejor solución es hacer un uso exclusivo de su sistema CI para todas las compilaciones organizativamente significativas (lanzamientos, lanzamientos de candidatos, etc.).
Esto vincula sistemáticamente los binarios liberados al contenido del repositorio sin tener que almacenar realmente los binarios en el repositorio.
Por ejemplo, si está utilizando SVN, use el esquema organizativo de rama principal; realice todo el desarrollo diario en / trunk y cree una etiqueta / para cada versión una vez que esté lista.
Configure su sistema CI para construir desde etiquetas y desde troncal, y haga que escriba la salida en un directorio de red cuya estructura refleje la estructura de nivel superior del repositorio:
- / builds / trunk / [rev] [fecha] [build_id] /
- / builds / tags / release_0_1_3beta4 / [rev] [fecha] [build_id] /
El sistema de compilación deberá tratar el directorio / builds / trunk / como un búfer circular, almacenando las últimas n compilaciones, eliminando las compilaciones antiguas a medida que avanza.
El directorio / builds / tags / , por otro lado, es una tienda permanente. Los artefactos de compilación se almacenan en directorios con nombres generados de acuerdo con el siguiente esquema:
donde [rev] es el ID de revisión SVN, [fecha] es la fecha en formato AAAAMMDD y [build_id] es un contador único de 3 dígitos, que se incrementa desde la primera compilación en adelante, haciendo que cada directorio de compilación sea único.
El proceso detallado anteriormente le brinda los siguientes beneficios:
Los artefactos de construcción están vinculados sistemáticamente a la fuente que los generó, por lo que puede encontrar la fuente de un artefacto de construcción particular muy fácilmente (y viceversa).
Esto forma la base para una mayor automatización de versiones. Por ejemplo, generación automática de documentos de liberación, etc.