He estado trabajando en el siguiente paso de mi proyecto de integración continua, que es conseguir TeamCity para construir mi aplicación, automáticamente cambiar el número de versión de todos los conjuntos, y luego crear un instalador .TeamCity + + WiX MSBuild sugerencias de flujo de trabajo necesarios
Un poco de historia primero:
He estado corriendo TeamCity con éxito durante los últimos meses, y se basa mis configuraciones y corre mi NUnit y NCover hace exámenes muy bien.
Me tomé un poco de tiempo investigando instaladores: siempre he odiado InstallShield y nunca lo he considerado para mi aplicación actual. Me gusta NSIS, pero luego me encontré con WiX. No tengo ningún conocimiento íntimo de la arquitectura de MS Installer, que entiendo es peligroso para proyectos complicados, por lo que en algún momento tendré que aprender más al respecto. Sin embargo, después de unos días de preguntas sobre SO, búsqueda de Google y lectura de blogs, tengo un proyecto de WiX que construye, instala, ejecuta la aplicación y desinstala todo limpiamente. ¡Estupendo!
También quería que la configuración de compilación de TeamCity actualizara automáticamente el número de versión de todos mis ensamblajes. Pude simular esta funcionalidad instalando el MSBuild Community Tasks en mi máquina de desarrollo y creando una configuración de Implementación que usa un objetivo BeforeBuild y la tarea FileUpdate para cambiar el número de versión. Eso funciona correctamente, excepto que en mi máquina de desarrollo, no tengo una variable de entorno build_vcs_number_1 para sustituir.
Así que ahí es donde estoy ahora - Necesito que TeamCity haga la actualización, y si bien tiene la variable de entorno build_vcs_number_1, no puedo encontrar la manera de acceder a las tareas de comunidad de WiX MSBuild.
Una publicación que leí recomienda comprobar los destinos de MSBuild en una carpeta SVN. Tengo una carpeta/extlib para este tipo de cosas, así que mis reglas de comprobación TeamCity VCS tienen el siguiente aspecto:
+:tags/2010-10-15=>src
+:extlib=>extlib
¿Cómo llego a extlib de una variable de entorno? Cuando ejecuto la construcción, TeamCity se queja (y correctamente) de que no puede encontrar c:\wix30\MSBuildCommunityTasks
. La carpeta real es C:\TeamCity\buildAgent\work\3e073d2b74226378\extlib\wix30\MSBuildCommunityTasks
. La carpeta se genera automáticamente porque estoy haciendo un checkout en el servidor, por lo que debe haber alguna variable de entorno que establezca TeamCity que pueda usar para obtener la ruta correcta.
Una cosa que debería destacar es que me he vuelto a la configuración de generación -> Propiedades y variables de entorno y encontré la lista desplegable poco intuitivo con todas las variables existentes, y no vi nada de lo que sonaba como una variable que apunta a la camino de trabajo
Una solución posible que puedo pensar es simplemente instalar MSBuild Community Tasks en el servidor de compilación, y luego puedo crear una variable de entorno del sistema a la que se puede acceder por <WixToolPath>
.
¿Alguien tiene otras sugerencias?
Me pregunto si aún funciona de esta manera. Solía hacer algo similar casi al mismo tiempo que se creó esta pregunta, pero luego vinieron Git y NuGet, y poco a poco migré para usar NuGet como mi forma principal de administrar dependencias. TeamCity, por supuesto, ahora tiene un parche AssemblyInfo y en la próxima versión lo están haciendo hacer todo lo que las Tareas Comunitarias de MSBuild pueden hacer. –
Todavía estoy trabajando de esta manera y actualmente sigue siendo una solución lo suficientemente buena para mí, pero a medida que obtenga más ancho de banda, definitivamente voy a mirar los cambios. He querido alejarme de las tareas de la comunidad de MSBuild porque tengo que modificar cada ensamblaje nuevo y es inconveniente. – Dave