Configurar despliegue continuo y Slots en Azure Web Apps

Entre las múltiples prácticas que propone la metodología Agile para mejorar el proceso de desarrollo de software, se encuentra el despliegue continuo.

El despliegue continuo podría decirse que es una extensión de la integración continua, y lo que busca es reducir al máximo el tiempo que transcurre desde que se escribe una nueva línea de código hasta que ésta se encuentra en producción, siendo probada y utilizada por usuarios de la aplicación.

Para conseguir esto se debe contar con una infraestructura que automatice el proceso, y eso es lo que Azure Web Apps permite realizar entre sus múltiples características. Únicamente necesitamos hacer uso de un repositorio de código fuente, conectarlo con Azure, y él sólo se encargará del resto.

Además, junto al despliegue continuo, Web Apps ofrece la capacidad de crear diferentes slots para nuestra aplicación. ¿Qué quiere decir esto?

  • Cada slot es una web app con un hostname diferente.
  • Podemos validar cualquier cambio que realicemos a nuestro código en uno de esos slots antes de pasar a producción.
  • Podemos intercambiar el contenido y la configuración entre slots. Así, si desplegamos nuestra aplicación en un slot y posteriormente queremos pasarlo a producción, simplemente tenemos que intercambiar lo que hay en producción por el slot. Incluso gracias a ello se elimina el tiempo que nuestra web estaría caída mientras desplegamos.
  • Tras el intercambio, el slot tendrá el contenido y configuración que había en producción. Por tanto, si detectamos cualquier error, podemos realizar un nuevo intercambio y volver al instante a una versión anterior.

Creemos que son razones más que suficientes para configurar el despliegue continuo en nuestra Web App y olvidarnos de desplegar manualmente cada vez que realizamos cambios, así que, ¡vamos a ello!

En primer lugar, vamos a crear un slot

Este paso es opcional si tu único propósito es aprender a configurar el despliegue continuo. Nosotros vamos a crear un slot en el que lo configuraremos, para que cualquier cambio en el código se refleje en este slot y no en producción. Pero si lo deseas, puedes hacerlo directamente en producción.

Dentro de las opciones de nuestra Web App, buscamos “Deployment slots”, y, dentro, añadimos uno nuevo.

image

Le daremos el nombre que deseemos, que identifique a ese slot. También tendremos la opción de copiar la configuración y contenido existente en algún otro slot (nos aparecerá solo producción). No estamos interesados, así que, seleccionamos “Don’t clone configuration from an existing slot” .

Tras ello, si clicamos en el slot creado, tendremos una nueva Web App con todas las opciones que tenemos en la Web App de producción, y con una URL diferente.

image

A continuación, configuramos el despliegue continuo con el repositorio que deseemos

A la hora de configurar el despliegue continuo, Azure Web Apps nos dará un listado de los repositorios que soporta hasta el momento y deberemos escoger el que más se adapte a nosotros o más nos guste. A día de hoy, se soportan los siguientes servicios:

  • Visual Studio Online
  • OneDrive *
  • GitHub
  • Bitbucket
  • Dropbox *
  • Repositorio Git local
  • Repositorio externo

* Aunque se permite el despliegue de código desde estos dos servicios, no es nada recomendable utilizarlos para tal fin. Son servicios de almacenamiento de archivos, y su propósito no es utilizarlos para hacer seguimiento de código. Utiliza siempre un repositorio de código.

Para este ejemplo vamos a hacer uso de GitHub, pero el proceso es análogo para el resto de servicios. La idea es que cuando nuestra Web App detecte nuevos cambios (al usar Git, quiere decir que haya un nuevo commit), se proceda a desplegar.

Por tanto, desde las opciones de configuración del slot que hemos creado, vamos a Continuous Deployment y escogemos GitHub como fuente.

image

Posteriormente habrá que autorizar a Azure para que tenga acceso a nuestra cuenta de GitHub y pueda acceder a los repositorios que tengamos en ella. Para ello, le damos a Authorization, y nos aparecerá una ventana en la que introduciremos nuestras credenciales de GitHub y procederemos a autorizar. Si todo va correctamente, aparecerá un mensaje como este:

image

Ahora escogeremos el repositorio donde se encuentra nuestro proyecto.

image

Y, por último, la rama que queremos desplegar (en nuestro caso sólo tenemos la rama master creada).

image

Pulsamos en OK y en unos segundos estará todo listo. Automáticamente se nos abrirá la pestaña de despliegues y podremos ver como se comienza a desplegar el último commit que tengamos hecho a la rama seleccionada.

image

Cuando se despliegue, accedemos a la URL de nuestro slot y veremos nuestra aplicación desplegada.

image

Por último, lo llevamos a producción

Si todo ha ido correctamente y consideramos que nuestra aplicación está lista para pasar a producción, con que intercambiemos el slot de producción con el de desarrollo que hemos creado es suficiente. ¿Cómo hacemos esto? Clicando en el siguiente botón:

image

Y escogemos origen y destino:

image

Hacemos click en OK, esperamos un poco, y nos dirigimos a nuestra web de producción.

image

¡Y eso es todo!

Cada vez que realicemos un commit al repositorio, el slot lanzará un nuevo despliegue automáticamente para incluir los últimos cambios introducidos. Por tanto, a partir de este momento solo tendremos que encargarnos de desarrollar nuestra aplicación, ya que el resto del trabajo lo realizará Azure por nosotros. Cuando tengamos una versión preparada, simplemente hacemos un cambio de slots y listo.

Daniel Escribano García

Technical Evangelist Intern

@daesgar90