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!

 

 

4 thoughts on “Integración Continua – Team City + GIT + MVC4

  1. Que tal Ignacio. Gracias por el post. Lo apliqué al principio y no arrancaba el trigger porque no me tomaba el agente sin razón alguna. Casi que abandono, pero le mandé un reset al team city y funcionó.
    Veo que ya lleva tres años la entrada. Estas aplicando otra estrategia hoy por hoy? Azure?

    Saludos!

  2. Hola Hernan,
    Me alegra que te sirviera! Hace mas o menos 1 año que estoy trabajando con Ruby y Java. Para eso uso Jenkins, Travis CI y estuve haciendo algunas pruebas con Codeship.
    Travis, me parece increible, con muy poca configuracion lo tenes andando. Lo que si es gratuito solo para proyectos Open Source.
    Codeship, esta muy bueno, podes tener hasta 100 builds mensuales en proyectos privados.
    Estas dos opciones corren en conteiners de Docker.
    Jenkins, hice un post de este, pero para PHP.

    Saludos!

  3. Hola Luciano, la verdad que no te sabría decir. Calculo que debe tener alguna forma de configurar que corra los testa desde una carpeta sin sincronizarlo con un repositorio de git. Es un poco viejo el post. Ahora estoy usando o tratando de usar Github Actions, en algun momento voy a ver si hago un post.
    No se bien cuales son los requerimientos que tenes pero le perdi un poco la posta a team city y todo el desarrollo en .net

Leave a Reply

Your email address will not be published. Required fields are marked *