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
Click I Agree
Seleccione la carpeta donde quiere instalar Team City y click Next
Seleccione toda las opciones. Click Next
Seleccione el puerto donde va a atender la web de Team City. Click Next.
Seleccione directorio donde Team City va a guardar las configuraciones. Click Next.
Configure el agente que va a hacer el build (configuracion por defecto). Click Save
Seleccione los usuarios para ejecutar el agente de build, (en ambos casos configuracion por defecto). Click Next
Seleccionar ambos. Click Next
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.
Completamos el nombre de usuario y contraseña del usuario que va a ser nuestro administrador. Click Create Account.
En 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.
Lo primero que hacemos es ponerle un nombre al proyecto. Click Create.
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
Click Create and Attach a new VCS Root.
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.
Si la conexión se pudo establecer, vamos a obtener un cartel como el siguiente
Dejar todas las configuraciones por defecto. Click Add Build Step.
- 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
Click Build Parameters
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
Ahora en General Settings agregar a la sección Artifacts Path la dirección donde se va a generar el paquete. Click Save
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.
Seleccionar VCS Trigger, y chequear Trigger a build on each check-in. Click Save.
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.
Botón derecho sobre el proyecto y click Edit…
Buscar la sección Target y debajo de la existente crear una nueva con el siguiente contenido:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<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> |
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.
Si hacemos click en Artifacts vamos a ir a una sección donde podemos bajar el archivo .zip con el paquete de instalación.
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!
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!
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!
Muy buenas,una consulta,esto funciona sin git instalado?o hay alguna manera de hacerlo correr sin git?
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