Integración continua de aplicaciones Xamarin con Bitrise

XamarinIntroducció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. Hablamos de procesos de integración continua y de entrega continua.

Integracion continua
Integracion continua

En artículos anteriores ya vimos como utilizar Team City o Visual Studio Team Services para realizar integración continua. En esta ocasión vamos a centrarnos en el uso de Bitrise.

Bitrise

Desde sus inicios (centrados en iOS), Bitrise se ha enfocado como una herramienta destinada a realizar integración y entrega continua de aplicaciones móviles teniendo en cuenta una enorme cantidad de integraciones con otras herramientas y servicios de terceros. Todo ello, con la sencillez y simpleza en mente.

Bitrise y aplicaciones Xamarin
Bitrise y aplicaciones Xamarin

Tras añadir soporte a aplicaciones Xamarin, se puede realizar la compilación, testing y distribución de aplicaciones Xamarin.iOS y Xamarin.Android con Bitrise.

NOTA: Como muchos otros servicios, Bitrise se basa en un modelo de suscripción mensual o anual con diferentes opciones y precios. Cuenta con una opción gratuita. La versión gratuita permite hasta 200 builds mensuales con soporte a Xamarin y más de 100 integraciones con servicios de terceros. La mayor limitación es que sólo permite la compilación de una única aplicación (concurrencia) de manera simultánea.

Integración Continua

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

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

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.

Comenzamos añadiendo una nueva aplicación

Tras realizar el registro de forma gratuita y hacer Login:

Login
Login

Accedemos al Dashboard principal. Desde este apartado tendremos un vistazo rápido a todas las aplicaciones creadas y su estado, últimas noticias o acceder a la configuración.

Para añadir una nueva aplicación bastará con pulsar el botón Add:

Nueva aplicación
Nueva aplicación

Comenzamos con el proceso de creación de la aplicación. El primer paso consiste en indicar la dónde se encuentra el código fuente, es decir, el repositorio de la aplicación. Es posible configurar:

  • GitHub
  • Bitbucket
  • Gitlab
  • Cualquier otra opción con configuración manual estableciendo la URL de acceso y credenciales.

NOTA: Si la autenticación se realiza utilizando un proveedor de identificación de terceros como por ejemplo GitHub, el repositorio aparecerá configurado y listo para utilizar.

Repositorio
Repositorio

Para este artículo vamos a utilizar un repositorio correspondiente a una aplicación Xamarin.Forms meteorológica clonada de un repositorio original de James Montemagno.

Tras seleccionar el proyecto a utilizar se pide como paso el añadir una clave SSH al repositorio para facilitar la validación y acceso con los privileegios necesarios para completar todo el proceso de compilación.

Clave SSH
Clave SSH

Tras añadir la clave y completar el proceso de validación, podemos elegir la rama a utilizar la realizar la compilación.

Elegir rama
Elegir rama

Tras un pequeño proceso de validación (acceso al repo, clonado, elección de tipo de proyecto, etc.):

Proceso de validación
Proceso de validación

Automáticamente se detecta el tipo de proyecto aplicando la configuración idónea en cada caso, la elección de herramientas, tipo de compilación y plataforma:

Configuración del proyecto
Configuración del proyecto

NOTA: Es posible realizar una configuración detallada a mano de cada uno de los parámetros necesarios.

El siguiente paso que requiere configuración consiste en la creación de un webhook. El concepto es sencillo, se configuran una serie de triggers (disparadores) que desencaden una acción, generalmente compilar en base a unas condiciones. Las condiciones establecidas suelen ser:

  • Una fecha y hora establecida (Build programada).
  • Un commit.
  • Una Pull Request.
  • Etc.
Crear Webhook
Crear Webhook

Tras crear un Webhook (por defecto creado para lanzar la Build cada vez que se crea un nuevo commit a la rama), podemos lanzar nuestra primera Build. Bastará con pulsar el botón:

Build
Build

Comienza el proceso de integración continua configurado. En todo momento accedemos a feedback inmediato de cada acción realizada, logs, estados e incluso ver el flujo de acciones a ejecutar.

Compilando!
Compilando!

Al completar el proceso, por defecto, seremos notificados del resultado y la información relacionada con los paquetes vía correo. Además de poder descargar el paquete generado, podemos distribuirlo de forma sencilla enviando notificaciones a otros miembros pudiendo crear grupos, etc.

Paquete
Paquete

Llegados a este punto podemos comprobar como la sencillez buscada por la herramienta se traduce en conseguir de forma bastante rápida y «a tiro» de pocos clics un proceso de integración continua.

El editor de flujos de trabajos

Workflow
Workflow

El editor del flujo de trabajo (Workflow) permite mediante el uso de casillas, seleccionar diferentes procesos a realizar y ordenarnos secuancialmente en base al orden de ejecución deseado. Con todo el proceso anterior, conseguimos:

  1. Acceder al repositorio
  2. Descargar el código fuente
  3. Restaurar paquetes NuGets
  4. Compilar
  5. Crear los paquetes
  6. Desplegar los paquetes a Bitrise

Sin embargo, en ocasiones necesitaremos realizar más procesos de validación, testing o despliegue.

Nuevos pasos, integración con servicios

Al añadir un nuevo paso, tendremos acceso al listado de integraciones con herramientas y servicios de terceros disponibles.

Nuevo paso
Nuevo paso

De esta forma podemos añadir nuevos pasos, subir el paquete a HockeyApp y publicar un mensaje en Slack al terminar. Se puede ver un listado de todas las integraciones disponibles en este enlace.

Hasta aquí esta pequeña introducción a Bitrise. Suficiente para conocer sus posibilidades aunque nos faltan por ver la posibilidad de lanzar pruebas unitarias o Xamarin.UITest además de las opciones de distribución o publicación. Algo que veremos en próximos artículos. La herramienta se muestra como una opción sólida, integrada con las necesidades de Xamarin así como los servicios y herramientass habitualmente necesarios. Sin duda, me ha gustado bastante todo lo que he probado. Y a ti, ¿qué te parece?.

Más información

Deja un comentario

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