[Xamarin.Android] De VSTS a HockeyApp, despliegue continuo

Upload - 02Introducción

La calidad en el software es algo innegociable. Un buen proceso en el desarrollo y gestión del proceso es fundamental para conseguir ese objetivo. Debemos entregar Apps móviles perfectamente adaptadas a cada plataforma, ofreciendo la mejor experiencia de usuario posible pero sobretodo, funcional. Una App funcional debe cubrir y cumplir unos mínimos exigentes de calidad.

Como desarrolladores, somo humanos y el código no estara libre de errores. Sin embargo, el proceso que apliquemos para la detección y corrección a los mismos, es vital.

Realizar un proceso automático en cada nuevo checkin o de manera programada donde:

  • Compilar proyectos.
  • Pasar pruebas unitarias.
  • Pasar pruebas de interfaz de usuario.
  • Incluso publicar automáticamente paquetes y resultados.

Nos permitirá detectar problemas en el código de la forma más prematura posible, pudiendo ofrecer mayor calidad. En este artículos vamos a repasar todo lo necesario para realizar tanto integración continua como entrega continua utilizando VSTS y HockeyApp.

HockeyApp
HockeyApp

Integración Continua

La integración continua consiste en hacer integraciones automáticas de un Proyecto lo más a menudo possible para así detector fallos cuantos antes.

Entendemos por integración la compilación y ejecución de pruebas.

WorkFlow
WorkFlow

El flujo del proceso sería:

  1. El desarrollador trabaja en su equipo de desarrollo subiendo cambios al repositorio de código donde estaría el código además de las pruebas unitarias.
  2. De una forma automática, el repositorio de código envia el mismo al servidor de BUILD.
  3. El servidor de BUILD realizará la compilación de la solución o proyectos, ejecutará pruebas y recopilará la información de los resultados.
  4. Los resultados los obtiene el desarrollador para poder analizarlos y actuar en consecuencia.

“La integración continua no evitará que se produzcan bugs, pero si nos permite encontrarlos y solucionarlos de una forma dramáticamente más fácil”

Martin Flowler

Los beneficios de utilizar integración continua son:

  • Detectar errores con mayor rapidez y antelación. Esto provocará que sea más sencillo de corregir y por lo tanto más barato.
  • Consistencia. O lo que es lo mismo, tener Builds reproducibles. La App funcionará en cualquier entorno con las mismas condiciones. Evitamos la “contaminación de la Build” o lo que es lo mismo, tener la Build con parámetros “a fuego” y condiciones específicas de la máquina de Build.
  • Poder automatizar también la entrega consiguiendo una entrega continua.

La configuración en VSTS

Ahora, utilizando Visual Studio Team Services en combinación con HockeyApp, podemos conseguir tener no solo interación continua, también entrega continua de forma bastante sencilla.

En este artículo nos centraremos en el despliegue de aplicaciones Android realizadas con Xamarin. La configuración en iOS es realmente similar salvando las distancias de la necesidad de utilizar OSX para la compilación. En cuanto a aplicaciones UWP, tenemos ligeros cambios relacionados con el empaquetado de la aplicación.

Veremos otros tipos de aplicaciones en próximos artículos.

Los pasos necesarios

Comenzamos dirigiéndonos a la pestaña Build de VSTS y pulsamos sobre el botón para crear una nueva Build.

Crear nueva Build
Crear nueva Build

Tras pulsar el botón podremos elegir plantilla. VSTS cuenta con plantillas destinadas a diferentes tipos de proyectos con los pasos básicos necesarios en cada caso. En nuestro ejemplo, elegimos la plantilla Xamarin.Android.

Elegimos plantilla
Elegimos plantilla

A continuación, vamos a elegir las opciones básicas de configuración como el repositorio donde se accederá al código, la rama y la máquina a utilizar.

Configuración básica
Configuración básica

Tras añadir la plantilla, varios pasos se crearán por defecto.

Pasos por defecto
Pasos por defecto

El primer paso restaurará los paquetes NuGet utilizados en el proyecto. El siguiente paso lógico sería la compilación del proyecto. Sin embargo, para poder realizar la compilación necesitamos previamente validar la cuenta Xamarin. Tendremos pasos para activar y desactivar la misma.

NOTA: El campo donde añadir la contraseña es un texto plano. Si la configuración es compartida o se desea enseñar, se vería la clave. Para solucionar el problema podemos añadir una variable llamada por ejemplo “XamarinPassword” y utilizarla posteriormente accediendo a ella $(XamarinPassword).

Salvo que tengamos proyecto de pruebas de UI, borraremos el paso de compilación del proyecto de test junto al paso de pasar las pruebas en Xamarin Test Cloud.

Tenemos todo lo necesario para compilar el proyecto Android, pero nos falta lo necesario para compilar la librería portable donde tenemos todo el código común compartido. Para ello vamos a añadir más pasos.

Añadimos un primer paso para restaurar paquetes NuGet.

Restaurar paquetes NuGet
Restaurar paquetes NuGet

A continuación, añadimos un paso encargado de compilar la librería portable.

Compilar la librería portable
Compilar la librería portable

El orden de cada paso debe ser algo similar a la siguiente captura.

Orden de los pasos de la Build
Orden de los pasos de la Build

Cada paso en detalle

Comenzamos restaurando los paquetes NuGet. La única configuración necesaria en este paso será realizar la selección de la solución.

Restaurar paquetes
Restaurar paquetes

NOTA: Este primer paso podría ser innecesario si no usas paquetes NuGet.

En la compilación de la librería portable (PCL) debemos establecer la configuración de compilación $(BuildConfiguration) además de seleccionar el .csproj de la PCL.

Compilar PCL
Compilar PCL

Llegamos al paso de mayor importancia, la compilación del proyecto Android. Debemos asegurarnos de tener establecida la configuración de compilación $(BuildConfiguration) junto al directorio de salida $(build.binariesdirectory)\$(BuildConfiguration).

Compilación Android
Compilación Android

Todo listo. Podemos enviar una Build a cola y obtendremos la compilación del proyecto, la creación del APK y su firma. El siguiente paso sería la subida y distribución utilizando HockeyApp.

La configuración de los triggers

En la pestaña de Triggers podemos configurar cuándo se lanza la Build. Tenemos la opción de establecer una opción de modo de integración continua, cada vez que se añadan cambios a la rama utilizada se lanzaría la Build o bien programar una Build a una fecha y/o hora específica.

Configuración de Triggers
Configuración de Triggers

HockeyApp

Llegamos al segundo paso de peso, la distribución continua con HockeyApp.

HockeyApp es una herramienta que facilita la gestión y distribución de aplicaciones móviles para iOS, Android y Windows. Ofrece además la gestión de analíticas, errores y feedback de parte de los usuarios. Comprada por Microsoft, es la opción idóneo tanto para la gestión de analíticas como para la distribución de betas a clientes.

La configuración en HockeyApp

Tras crear una cuenta si no tenías una ya disponible (es un proceso rápido y gratuito hasta dos aplicaciones) procedemos a crear una nueva aplicación.

Nueva App en HockeyApp
Nueva App en HockeyApp

En ese momento nos pedirá paquete. Sin embargo, subiremos el paquete automáticamente desde VSTS, por lo tanto, elegimos la opción de subida manual. A continuación, establecemos el nombre de la aplicación, la plataforma Android en este caso y el canal de distribución, normalmente beta aunque podría ser otra opcion.

Tras crear la aplicación, tendremos acceso a la información que necesitamos para subir el paquete, su identificador.

Identificador App
Identificador App

Para poder subir automáticamente el paquete de la aplicación a la aplicación creada en HockeyApp, necesitamos de alguna forma enlazar una herramienta con otra. Es un proceso sencillo.

API token
API token

Usaremos ese Token desde VSTS. Primero vamos a instalar la extensión de HockeyApp disponible en el marketplace en VSTS.

Extensión VSTS HockeyApp
Extensión VSTS HockeyApp

Tras instalar la extensión nos dirigimos a la configuración de nuestro VSTS. Concretamente a la pestaña de servicios para añadir un nuevo endpoint.

Endpoint HockeyApp
Endpoint HockeyApp

Añadimos un nombre descriptivo junto al API Token que generamos en HockeyApp y todo listo.

Despliegue continuo

Regresamos a VSTS para configurar el despliegue continuo. Nos dirigimos a la pestaña Release. Creamos una nueva definición de Release.

Nueva Release
Nueva Release

En la pestaña de artefactos hacemos la vinculación con nuestra Build.

Artifacts
Artifacts

Por último, añadimos una tarea del tipo HockeyApp.

HockeyApp
HockeyApp

Configuramos la tarea, seleccionamos la conexión que creamos previamente en la configuración de VSTS, añadimos el identificador de la aplicación creada en HockeyApp y la ruta al binario.

Configuración de la tarea
Configuración de la tarea

Casi lo tenemos todo preparado. Bastará con dirigirnos a la pestaña de Triggers para seleccionar la opción Continuous Deployment. Cada vez que se compile y genere un paquete, subir a HockeyApp (es totalmente personalizable, se puede programar una fecha y hora, lanzar de forma manual, etc.).

Más información