Team City – Invalid drive specification error

El otro día en el trabajo, tuve que configurar Team City, para que haga un deployment automático de una aplicación, cada vez que alguien del equipo subiera código nuevo al repositorio.

Lo que primeramente hice fue, compartir la carpeta de la maquina donde quería hacer el deployment (en mi caso un servidor de integración). Cuando la compartí, no le puse usuario ni password, para que sea más sencillo.

Después configure una nueva tarea debajo de las de build, para que copie los bits recién compilados a la carpeta en este servidor.

La tarea tenia simplemente el comando

xcopy C:\Temp\App\ \\ServerDeIntegracion\App\ /S /Y

Cuando se ejecutaba esta tarea me daba un error:

Invalid drive specification

Haciendo otras pruebas usando robocopy en lugar de xcopy tuve un error de Access Denied:

errorRobocoy

La solución que encontré fue crear un archivo bat con los siguiente comandos:

net use t: \\ServerDeIntegracion\App\ [Password] /user:dominio\usuario
xcopy C:\Temp\App\ \\ServerDeIntegracion\App\ /S /Y

Lo que hace el primero es hacer disponible el recurso de la red en la sesión de Team City y luego de tenerlo disponible ejecuta la copia de archivos.

Este archivo bat lo llamo desde una tarea de tipo Command Line en Team City.

TareaTeamCity

 

Espero les sirva!

Nos leemos

Integración Continua – Team City + GIT + MVC4

Dentro de los desarrollos de aplicaciones, utilizando metodologías agiles existen muchisimas buenas practicas, que nos ayudan a llegar a una mejor calidad del producto que estemos desarrollando. Una de estas es implementar un servidor de intregración continua.

En este post vamos a explicar, cómo instalar y configurar un build server, utilizando Team City en un Windows 7. Este build server va hacer build de nuestra aplicacion MVC 4 y genere un paquete de instalación.

Para los que no saben que es la integración continua o continuous integration es:

Un modelo informatico propuesto inicialmente por Martin Fowler que consiste en hacer integraciones automáticas de un proyecto lo más a menudo posible para así poder detectar fallos cuanto antes.

Manos a la obra

Pre-requisitios

Una maquina con Windows 7, Visual Studio 2010 y MVC 4.

El instalador de Team City 7.1

Ahora si, con todo esto, manos a la obra.

Instalación de Team City

En nuestra instalacion de Windows 7, ejecutamos el instalador.

Click Next

Team City 1

 

Click I Agree

Team City 2

 

Seleccione la carpeta donde quiere instalar Team City y click Next

Team City 3

 

Seleccione toda las opciones. Click Next
Team City 4

 

Seleccione el puerto donde va a atender la web de Team City. Click Next.

Team City 6

Seleccione directorio donde Team City va a guardar las configuraciones. Click Next.

Team City 5Configure el agente que va a hacer el build (configuracion por defecto). Click Save

Team City 7

Seleccione los usuarios para ejecutar el agente de build, (en ambos casos configuracion por defecto). Click Next

Team City 9

Seleccionar ambos. Click Next

Team City 10

En este punto Team City ya está instalado en nuestra maquina,

Configuración de Team City

Luego de aceptar la licencia, seleccionando accept license agreement un haciendo click en Continue.

Team City 13Completamos el nombre de usuario y contraseña del usuario que va a ser nuestro administrador. Click  Create Account.

Team City 15En este momento podes hacerte un marcador en tu navegador de la URL de Team City, para tenerlo bien a mano.

En la página principal de Team City hacemos click en Create a Project.

Team City 16

Lo primero que hacemos es ponerle un nombre al proyecto. Click Create.

Team City 17

Click Create Build Configuration.

Complete el nombre con el que se va a identificar el build. Por ejemplo si en su poryecto se van a compilar mas de una solución, un buen nombre sería el nombre de cada solución,

Click VCS Settings

Team City 19

Click Create and Attach a new VCS Root.

Team City 20

Seleccione Type VCS -> Git.

  • VCS Root Name: Dirección del repositorio GIT( accesso ssh) + #master
  • Fetch URL: Dirección del repositorio GIT.
  • Default Branch: master

En la sección Autentication Settings

  • Authentication Method: Private Key
  • Private Key Path: Dirección de la key ssh privada que tiene permiso de accesso al repositorio en GitHub.

Click Test Connection.

Team City 22

Si la conexión se pudo establecer, vamos a obtener un cartel como el siguiente

Team City 23Click Save.

Dejar todas las configuraciones por defecto. Click Add Build Step.

Team City 24

  • Runner Type: MSBuild
  • Step Name: Un nombre que identifique el paso de build.
  • Build Path File: Dirección dentro del repositorio al proyecto que vamos a compilar.
  • MSBuild Version: Framework 4.0
  • MSBuild Tool Version: 4.0
  • Run Platform: x64
  • Targets: PublishtoFileSystem (esto lo vamos a configurar más adelante en el archivo del proyecto)

Click Save

Team City 25

Click Build Parameters

Team City 26

Click Add New Parameters, agregar uno con las siguientes características:

  • Name: PublishDestination
  • Type: System
  • Value: Lugar en el disco donde queremos que se genere el paquete de instalación.

Click Save

Team City 28Ahora en General Settings agregar a la sección Artifacts Path la dirección donde se va a generar el paquete. Click Save

Team City 29

Configurando un trigger

Si queremos que al momento de que cualquier miembro del equipo suba código al repositorio, el build server compile nuestra solución y genere un paquete instalable, tenemos que configurar un trigger en Team City, para esto vamos a la sección 5 de las configuraciones del proyecto Build Trigger. Hacer click en Add new trigger.

Team City 32

Seleccionar VCS Trigger, y chequear Trigger a build on each check-in. Click Save.

Team City 33

Ahora cada vez que alguien suba algún cambio al repositorio, el agente de Team CIty va a ejecutar la compilación de nuestra solución.

Nuestra solución MVC 4

Para este ejemplo, hice una aplicación “Hello World” en MVC4, para poder compilar la solución utilizando un repositorio público de GitHub. El que quiera usarlo, solo tiene que bajarlo.

Dentro del proyecto de la solución, tenemos que agregar un nuevo Target. Esto nos va a servir para indicarle a MSBuild como generar y donde dejar el paquete instalable.

Para hacer esto tenemos que, hacer unload del proyecto. Para eso hacemos click con el botón derecho en el proyecto y seleccionamos Unload Project.

Visual Studio 1

Botón derecho sobre el proyecto y click Edit…

Visual Studio 3Buscar la sección Target y debajo de la existente crear una nueva con el siguiente contenido:

<Target Name="PublishToFileSystem" DependsOnTargets="PipelinePreDeployCopyAllFilesToOneFolder">
<Error Condition="'$(PublishDestination)'==''" Text="The PublishDestination property must be set to the intended publishing destination." />
<MakeDir Condition="!Exists($(PublishDestination))" Directories="$(PublishDestination)" />
<ItemGroup>
<PublishFiles Include="$(_PackageTempDir)\**\*.*" />
</ItemGroup>
<Copy SourceFiles="@(PublishFiles)" DestinationFiles="@(PublishFiles->'$(PublishDestination)\%(RecursiveDir)%(Filename)%(Extension)')" SkipUnchangedFiles="True" />
</Target>

view raw
gistfile1.xml
hosted with ❤ by GitHub

 

Visual Studio 4

Guardar el proyecto y subir los cambios a GIT.

Una vez subido los cambios a GIT, el build server ejecutará automáticamente el build de la aplicación. Si vamos a la página principal de Team City veremos que el build esta corriendo.

Cuando éste termina, en la sección Artifacts vamos a encontrar todo lo que se generó en el paquete de salida.

Team City 30

Si hacemos click en Artifacts vamos a ir a una sección donde podemos bajar el archivo .zip con el paquete de instalación.

Team City 31

Ahora ya pueden decir que número de build de su aplicación están instalando en un servidor, llevar tracking de las features que se van agregando y en que build están presentes, integrar toda la aplicación en cada commit y demás.

Espero que les sirva este post y puedan implementar un build server en todos sus proyectos.

Nos leemos!