A estas alturas, estamos de acuerdo en que deberíamos versionar todo, ¿no es así? Para software que despleguemos en producción, es la forma más fácil de asegurar que siempre podremos determinar sin lugar a dudas el código fuente que fue usado para construir cualquiera de los binarios que se están ejecutando. Las correcciones sobre los binarios de producción deberían aplicarse sobre el código que se utilizó para generarlos; de otro modo, podríamos estar distribuyendo no sólo la corrección, sino otras características a medio hacer, nuevos bugs aun no descubiertos y todo tipo de elementos no finalizados.
La planitlla de build por defecto en TFS 2013 tiene una nueva característica muy interesante que nos permite ejecutar scripts (PowerShell o batch files) antes o después de que la operación de build se lleve a cabo. Esto puede ser útil en muchos escenarios, y uno de ellos es versionar los ensamblados que se generan, preparando un script que incruste el número de versión adecuado en los ficheros AssemblyInfo.* antes de que sean construidos.
Afortunadamente, los amigos que mantienen las Community TFS Build Extensions ya han preparado un script así para nosotros. Este script no sólo modifica los ficheros AssemblyInfo.*, sino que además obtiene del build number el número de versión a aplicar. Esto es muy conveniente porque, por defecto, cada build lanzada en TFS etiqueta el código fuente con el build number. Y esto quiere decir que seremos capaces de coger cualquier ensamblado y trazarlo hasta el código fuente que lo generó, mediante esa etiqueta.
Por lo tanto, el trabajo de hacer que una definición de build actualice el número de versión automáticamente para los ensamblados generados y que ponga la etiqueta correspondiente en el control de versiones, ahora lleva menos tiempo del que vas a emplear en leer este post:
- Descarga las Community TFS Build Extensions, las cuales incluyen el script ApplyVersionToAssemblies.ps1 (al descomprimir el paquete, búscalo en la carpeta Scripts). Sube y protege (check-in) el script en alguna ruta de tu control de versiones.
- Edita o crea una definición de build de TFS basada en la versión 2013 de la plantilla por defecto. En la sección Build – Advanced de los parámetros del proceso de build, verás que puedes especificar scripts que serán ejecutados antes o después de la operación de build propiamente dicha. Para el parámetro Pre-build script path, especifica la ruta en el control de versiones donde subiste el script ApplyVersionToAssemblies.ps1.
- Cambia el parámetro Build number format de modo que contenga una subcadena que pueda ser parseada a un número de versión de la forma Major.Minor.Build.Revision (la expresión regular que se usa para el parseo es d+.d+.d+.d+) Puede ser cualquier cosa que cuadre con tu esquema de versionado; en el ejemplo de abajo simplemente estoy forzando todo menos el número de revisión, que será incrementado automáticamente cada vez que se lance una build con esta definición. Pero puedes usar cualquier otro esquema (por ejemplo algo acorde con semantic versioning), y aprovechar las macros disponibles.
- ¡Eso es todo! La próxima vez que ejecutes una build, los binarios generados deberían llevar incrustado el correspondiente número de versión.
¡Ya no hay excusas! Ve y configura el versionado para tus builds antes de que sea demasiado tarde.