VSTS: Desplegar una app ASP.NET core en Azure

Disponer de un sistema de integración y despliega automatizado es uno de los puntos que considero básico en todo desarrollo de software, el cuál entre otras cosas permite mejorar la calidad de los desarrollos que realizamos y ver el progreso real del mismo.

Durante este post veremos cómo montar una build de integración continua sencilla con ASP.NET core y hacer que ésta se despliegue de manera automatiza a Azure. En este caso únicamente haremos uso del sistema de build de VSTS, aunque en futuros post podremos ver el sistema de Release y ver cuándo aplica cada uno de ellos. Así mismo en algunos puntos simplificaremos un poquito para intentar no complicar en exceso el post.

 

En este post usaré una aplicación de ejemplo, Health Clinic , la cuál está disponible en GitHub . Dentro de las diferentes soluciones y proyectos que tiene existe una aplicación ASP.NET core (solución 01_Demos_ASPNET5.sln).

image1

Por supuesto, si no disponéis de una cuenta de VSTS, la podéis crear de forma totalmente gratuita desde aquí.

En este post partiremos de la suposición de que ya tenemos nuestra cuenta, con un proyecto creado con Git, en el cuál disponemos de una rama master con el mismo contenido que hay en GitHub. Por supuesto, VSTS permite conectarse también a GitHub y hacer que las builds se descarguen el código directamente desde GitHub, pero para simplificar el escenario y centrarnos en la builds el código está subido directamente al Git del proyecto de VSTS.

image17

Una vez tenemos el código fuente iremos a la sección de Build y creamos nuestra primera definición de build para compilar de forma automática la aplicación ASP.NET core.

Desde la sección de build seleccionaremos la opción de crear una nueva build. De momento no existe una plantilla que incluya las tareas que se necesitan para trabajar con ASP.NET core, por lo cuál seleccionaremos la plantilla vacía y seremos nosotros los que incluyamos todas las tareas que se necesitan.

image2

En el siguiente paso indicaremos que queremos que sea una build de integración continua, es decir, que cada vez que haya un commit se lance de forma automática la definición de build.

image3

Así mismo, en este paso seleccionaremos la cola que tiene que gestionar la petición…que en esencia es dónde se va a lanzar esto, en qué máquina. VSTS nos ofrece la posibilidad de usar el Hosted pool, que básicamente lo que nos permite crear nuestras definiciones de build sin preocuparnos por nada más (pago por minuto con una serie de minutos gratuitos), únicamente de definir nuestro proceso. El Hosted pool únicamente está disponible si nuestra aplicación compila en entornos Windows.

Por supuesto, podemos crearnos nuestra propia máquina y usarla, VSTS permite trabajar tanto con sistemas operativos Windows, Linux o MAC.

Una vez que hemos creado la definición de build podremos seleccionar la opción “Add Steps” para incluir los pasos que queremos que realice nuestra definición.

image6

En nuestro caso, es una aplicación ASP.NET core que en front hace uso de node, bower y gulp. Además de las acciones propias de core necesita un “npm install” para instalar las dependencias y que se lance la tarea “gulp default” para realizar ciertas tareas de front.

Desde la ventana modal de añadir pasos seleccionaremos.

  • Tarea de command line para restaurar las dependencias de core.
  • Tarea de npm install.
  • Tarea de gulp.
  • Tarea de Visual Studio Build.
  • Tarea de command line para publicar la aplicación.
  • Tarea Archive files para compilar el directorio publicado anterior.
  • Tarea Azure Web App Deployment para desplegar el zip a un Web App de Azure.

image9

Una vez tenemos las tareas, tenemos que ir una a una estableciendo la configuración adecuada. Seleccionaremos la tarea y en la parte derecha establecemos los parámetros.

    • Tarea de command line para restaurar las dependencias de core.
      • Tool: dotnet
      • Arguments: restore

image10[3]

 

  • Tarea de npm install.
    • Commands: install
    • Advanced>Working directory: $(WebDir)
  • Tarea de gulp.
    • Gulp file path: $(WebDir)/gulpfile.js
    • Advanced>Working directory: $(WebDir)
  • Tarea de Visual Studio Build.
    • Solution: 01_Demos_ASPNET5.sln.
    • Platform: $(BuildPlatform)
    • Configuration: $(BuildConfiguration)
  • Tarea de command line para publicar la aplicación.
    • Tool: dotnet
    • Arguments: publish -c $(BuildConfiguration) $(WebDir)/project.json
  • Tarea Archive files para compilar el directorio publicado anterior.
    • Root folder: $(Build.SourcesDirectory)\$(WebDir)\bin\$(BuildConfiguration)\netcoreapp1.0\publish
    • Prefix root folder name to archive paths: Uncheck this option.
    • Archive File to create: $(Build.SourcesDirectory)\$(WebDir)\bin\webapp.zip
  • Tarea Azure Web App Deployment para desplegar el zip a un Web App de Azure.
    • Azure Subscription (Classic): elige tu subscripción.
    • Web App Location: ubicación del Web App dónde vayas a desplegar, por ejemplo, North Europe.
    • Web App Name:  Nombre Web App dónde quieras desplegar.
    • Web Deploy Package: $(Build.SourcesDirectory)\$(WebDir)\bin\webapp.zip

La tarea de despliegue a Azure necesita que previamente tu proyecto de VSTS esté conectado a una subscripción de Azure. Desde el área de administráción tendremos que ir a la pestaña de Services y añadir el endpoint. Puedes encontrar información detallada sobre el proceso aquí.

image

Por simplificar, en este caso antes de lanzar la build, es necesario que crees un servicio de WebApp + SQL en tu subscripción de Azure (la aplicación asp.net core hace uso de una base de datos). El nombre que des a este servicio es el que tienes que indicar en la tarea de la definición de build. Es un escenario más real te recomendaría usar plantillas ARM para crear los entornos, mucho más fino, pero eso lo veremos en otro momento.

image

Como has visto al definir las propiedes de las tareas, estamos haciendo uso de variables, por ejemplo $(WebDir). Estas variables hay que definirlas en la pestaña de variables.

  • BuildConfiguration: debug/release
  • BuildPlatform: any cpu
  • WebDir. src/MyHealth.Web

image37

Una vez realizados estos pasos, sólo tenemos que darle a guardar y lanzar una nueva build (Queue build…) para comprobar que todo va bien.

 

image52

y esperar a que termine para ver que la aplicación compila y se despliega de forma automática a Azure!

image16

Ibon Landa

bon Landa lleva más de 15 años dedicado al desarrollo de software. Durante este tiempo ha trabajado en diferentes empresas en las cuáles ha podido trabajar en diferentes entornos y tecnologías. Actualmente está focalizado principalmente en tareas de desarrollo, arquitectura, en las herramientas del ciclo de vida y en todo lo relacionado con la plataforma de Cloud Computing Microsoft Azure, área en el que ha sido reconocido como MVP. Participa de forma activa en la comunidad, escribiendo su blog, manteniendo un portal sobre Microsoft Azure y colaborando con Microsoft y grupos de usuarios en eventos de formación, talleres y giras de producto.

2 comentarios en “VSTS: Desplegar una app ASP.NET core en Azure”

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *