¿Cómo mantiene los binarios liberados bajo el control de versiones?

12

¿Cómo se mantienen los archivos binarios liberados bajo el control de versiones? Esto permite rastrear qué cosas se cambian entre cada versión. Quiero separar los archivos binarios liberados del repositorio de origen. Los binarios publicados se crean a partir del software de integración continua o se compilan manualmente.

    
pregunta linquize 07.06.2012 - 06:57

5 respuestas

18

Dos opciones:

a) No lo hagas. Solo asegúrese de tener compilaciones deterministas reproducibles, es decir, la construcción de la misma revisión de control de origen con la misma configuración produce exactamente el mismo binario.

b) Designe un directorio en algún lugar como la fuente autorizada para las compilaciones publicadas. Haga que la carga de los binarios sea parte del procedimiento de despliegue / envío, y asegúrese de que el directorio de creación publicado esté cubierto por su plan de copia de seguridad. No necesitas ningún control de versión aquí; Las compilaciones se escriben una vez, si necesita cambiar algo, cree una nueva compilación.

De cualquier manera, los binarios y otros resultados de compilación no pertenecen al control de código fuente, por varias razones.

    
respondido por el tdammers 07.06.2012 - 07:45
9

Use un repositorio de artefactos para binarios, no un sistema de control de versiones. Una versión específica de un binario publicado no se supone que cambie con el tiempo, por lo tanto, el control de la versión no tiene sentido ya que los archivos no cambiarían.

Ver, por ejemplo, los repositorios Maven como un repositorio para archivar / publicar / ofrecer versiones y otros binarios (por ejemplo, como documentación)

    
respondido por el mhaller 07.06.2012 - 07:15
6

Solo póntelos. No hay problema con eso, a menos que estés usando git (que no combina bien los binarios, así que tendrás que gestionarlos tú mismo) o los estás cometiendo demasiadas veces (solo cometer cuando esté listo para el envío, no cada vez que lo construyas).

La mayoría de los binarios delta de SCMs bastante bien, solíamos poner un dll de recursos de 2Mb en nuestro SVN y se delta a unos pocos kb cada vez.

Escucho muchos argumentos de que los SCM son de origen, no binarios, pero esto es claramente falso cuando se considera que la mayoría del software consiste en imágenes, incluso si solo son archivos de iconos. Son binarios, pero son parte de la fuente, así que póngalos y no sean tan dogmáticos al respecto. También escucho que simplemente puede reconstruir el binario cuando sea necesario, a menudo este es el caso, pero puede ser un gran esfuerzo de pérdida de tiempo para los sistemas más antiguos que ya no son compatibles de forma activa. Si tiene que volver a crear un sistema con solo paquetes de servicio o parches más antiguos para que se correspondan con el sistema que se utilizó para crear un binario hace 3 años, se alegrará de haber agregado la bandeja a su SCM en ese entonces.

La única vez que deba preocuparse por agregar compilaciones a su SCM es si lo está haciendo automáticamente como parte del proceso del servidor de compilación. No haga esto. Usted llenará su SCM con compilaciones que no tienen ningún beneficio para usted. En vez de eso, solo agrégalos cuando sean liberados De esta manera, sabrá exactamente lo que tiene su cliente y podrá reproducir cualquier problema reportado por el cliente con los archivos binarios que está usando, y no los que ha reconstruido (usando, digamos, las últimas actualizaciones del compilador o el sistema operativo).

    
respondido por el gbjbaanb 11.06.2012 - 15:22
4

No mantengo los binarios de lanzamiento bajo el control de versiones. En su lugar, las publico en una ubicación bien definida para que otras herramientas las inspeccionen y utilicen. Trabajo mucho en Java, lo que significa que publico Jars en los repositorios locales de Maven. Sin embargo, no utilizo estas herramientas para rastrear lo que ha cambiado por lanzamiento. Después de todo, son binarios y no hay mucho más para rastrear que no sea el número de archivos.

Para hacer un seguimiento de los cambios entre versiones, etiquetaría o etiquetaría las publicaciones en mi sistema de control de versiones con el número de versión de la publicación. Pero esto es solo para rastrear los archivos de origen, no los binarios. Los binarios son artefactos de la compilación y no necesitan estar bajo el control de versiones.

    
respondido por el Jeremy Heiler 07.06.2012 - 07:46
0

La mejor solución es hacer uso exclusivo de su sistema de CI para todas las compilaciones significativas (lanzamientos, lanzamientos de candidatos, etc.).

Esto vincula sistemáticamente los archivos binarios liberados al contenido del repositorio sin tener que almacenar realmente los archivos binarios en el repositorio.

Por ejemplo, si está usando SVN, use el esquema organizativo de la rama principal; haga todo el desarrollo del día a día en / trunk y cree una etiqueta / para cada versión una vez que esté lista.

Configure su sistema de CI para compilar a partir de etiquetas y también de troncales, y haga que escriba la salida en un directorio de red cuya estructura refleja la estructura de nivel superior del repositorio:

  • /builds/trunk/[rev◆◆date [...] […]
  • /builds/tags/release_0_1_3beta4/ tejer el texto por el tiempo.

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 avanzan.

El directorio / builds / tags / , por otro lado, es un almacén permanente. Los propios 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 de SVN, [fecha] es la fecha en formato AAAAMMDD, y [build_id] es una Contador único de 3 dígitos, que se incrementa desde la primera compilación en adelante, lo que hace que cada directorio de compilación sea único.

El proceso detallado anteriormente le brinda los siguientes beneficios:

  1. 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 en particular muy fácilmente (y viceversa).

  2. Esto forma la base para una mayor automatización de la versión. Por ejemplo, la generación automática de documentos de liberación, etc ...

respondido por el William Payne 10.06.2012 - 21:27

Lea otras preguntas en las etiquetas