Integración continua en Android con BuddyBuild

Integración continua en Android con BuddyBuild
Sin comentarios Facebook Twitter Flipboard E-mail

La integración continua es un proceso en el desarrollo de software que consiste en crear versiones automáticas de nuestro producto lo más a menudo posible para asegurar la integridad de nuestro código.

Este proceso funciona además muy bien con sistemas en los que existen tests que validan nuestro código, pues la integración continua comprobará entonces no sólo que se puede construir, sino además que funciona correctamente.

Existen en el mercado varios sistemas de integración continua muy conocidos como pueden ser Travis o Jenkins. Pero hoy es vengo a hablar de BuddyBuild: un sistema enfocado a móviles y extremadamente sencillo de configurar y utilizar.

BuddyBuild es un servicio en la nube de integración continua para aplicaciones móviles. Es un proyecto bastante joven, pero que está creciendo a una velocidad increíble. Actualmente es completamente gratuito, si bien en un futuro cobrarán a las empresas por usarlo.

En este artículo os voy a hablar de cómo se integra BuddyBuild con Android, pero el proceso sería muy similar para una aplicación en iOS.

Creando el proyecto

Para este ejemplo, voy a crear un proyecto muy sencillo, con una rama master y algunas otras ramas para que veamos cada uno de los casos en los que BuddyBuild nos aporta valor.

Puedes acceder al código en nuestro repositorio.

Configurando BuddyBuild

Para acceder a BuddyBuild, sólo necesitas tener una cuenta en Github o Bitbucket. En particular, la cuenta tiene que ser una que tenga acceso al repositorio que quieres integrar. En este ejemplo usaré Github.

Después, elige tu proyecto y haz click sobre Build. BuddyBuild se encargará de todo el proceso de configuración del entorno de construcción:

Configurando Buddybuild

Cuando BuddyBuild termine de configurar el entorno, verás que tienes un listado de ramas disponibles, y que ha construido la rama master automáticamente por nosotros. Ya podrás ver si tu rama compila:

Buddybuild Configurado

A partir de este punto, te voy a enseñar cada una de las funcionalidades que nos aporta BuddyBuild, divididas en cuatro apartados: Build, Deployments, Feedback y Crash Reports.

Build

Es la parte más interesante de BuddyBuild y donde podemos configurar más parámetros. Aquí nos encontraremos con todas las ramas del repositorio, y podremos lanzar manualmente la construcción de cada una de ellas.

Además, la configuración nos permitirá que, cada vez que hagamos un push en una rama, BuddyBuild nos compile automáticamente el código. Esto, como verás después, va a ser muy interesante para trabajar con Pull Requests, pues sabremos de un vistazo si el nuevo código rompe algo.

Entre las opciones a configurar en esta sección, tenemos las siguientes:

  • Notifications: Nos permite configurar a quién notificar, cuándo, cómo y sobre qué ramas. Si usas Slack, también se puede integrar fácilmente con éste.
  • Auto-Build: Aquí indicarás qué ramas quieres que se construyan automáticamente cuando haya un nuevo commit.
  • Application Variants: si usas diferentes variantes de tu aplicación (mediante build types o flavors), aquí puedes elegir cuáles se construirán por defecto, y puedes especificar casos especiales por rama. Podrías por ejemplo configurar que por defecto sólo se compile la versión de release, pero que en master se construyan todas.
  • Environment Variables: Puedes añadir las variables de entorno que necesites para que tu proyecto se construya. Puedes incluir aquí las claves de las APIs en lugar de incluirlas directamente en el código.
  • Unit Tests: En qué ramas quieres que se ejecuten los tests unitarios. Si los tests fallan, la construcción mostrará un error. Es ideal para darse cuenta rápidamente en qué punto hemos roto los tests.
  • UI Tests: Podemos también elegir en qué ramas queremos que se lancen los tests de instrumentación. Es increíble que funcione sin absolutamente nada de configuración, si bien es cierto que tiene ciertas limitaciones. Por defecto no podemos cambiar ni la versión del emulador que se lanza para ejecutarlos, ni tampoco fallará la construcción si fallan estos tests. Se pueden pedir estos cambios por correo para que lo modifiquen ellos.
  • APK Signing Keystores: Aquí podemos añadir las claves de firmado, para que sea capaz de compilar el proyecto en release.
  • Build Status Badges: Puedes añadir un badge al README.md para saber siempre en qué estado está tu rama. En el repositorio de ejemplo puedes verlo.

Ahora voy a crear una rama con un test que no compile, y a hacer un Pull Request. Verás qué es lo que pasa:

Construccion Fallida

Para empezar, en BuddyBuild podemos ver el problema. Pero si creamos un Pull Request, veremos esto en Github:

Pull Request Buddybuild Error

Sin necesidad de probar el código, ya sabemos que algo está fallando, y podemos hacer click en Details para ir al detalle en BuddyBuild. Además, puedes configurar alertas para que te lleguen correos cuando una rama falla.

Como ves, de forma muy sencilla tienes configurado tu proyecto para que se construya automáticamente con cada ejecución, y además integrado con Github para darte información rápida durante la revisión de Pull Requests.

Deployments

Ahora que ya estamos construyendo nuestro proyecto, podemos hacer que se envíe automáticamente a ciertos grupos bajo distintas condiciones. Por ejemplo, podríamos configurar una nightly que se lance automáticamente cada noche con lo último que haya en master, y una beta privada desde una rama beta cada vez que se añada algo nuevo. Tendrás que elegir también la variante que se despliega:

Deployments

Además, en esa misma sección puedes publicar directamente en la Play Store mediante una configuración muy similar. Puedes elegir desde qué ramas y en qué condiciones publicarás en alpha, beta o production.

Feedback

Aquí entramos ya en la parte de gestión de errores y feedback, que será gestionada mediante el SDK de BuddyBuild, el cual se integra automáticamente cuando BuddyBuild compila nuestro código.

Gracias a ello tenemos algunas funcionalidades que de forma automática se agregan a nuestra App, y que podemos elegir si activamos o desactivamos bajo ciertos criterios:

  • Shake for feedback: Agitando el móvil el usuario puede enviar información a BuddyBuild con un pantallazo (lo vemos en un momento).
  • Crash reports: Recibiremos los errores que se produzcan en nuestra aplicación (más en detalle en el siguiente punto).
  • Actualizaciones: Si hay una nueva versión disponible, la App informará al usuario para que permitirle actualizar de forma sencilla.

Sólo tenemos que elegir en qué ramas queremos que se integre el SDK, y BuddyBuild lo hará por nosotros:

Configuracion Sdk

Además, también podemos configurarlo para que nos cree issues en Github automáticamente, con el contenido de esta sección y de la sección de bugs que veremos después. Echa un vistazo al resto de opciones de configuración.

Una vez integrado el SDK e instalada la App, cuando agites el teléfono te aparecerá una ventana e la que puedes seleccionar la sección sobre la que aplica el feedback y un texto. Éste es el resultado de lo que llega a BuddyBuild:

Feedback Buddybuild

¿Qué es lo siguiente que podríamos hacer con esto? Desde el detalle, puedes crear una issue directamente en Github con la imagen y el detalle:

Issue Desde Feedback

Como ves, puedes integrar todo el ciclo de tu aplicación en un único sistema de forma muy sencilla. ¡Y aún nos queda la gestión de errores!

Crash Reports

Los informes de errores son una de las partes donde más foco tienen que poner aún si quieren superar a otras alternativas. Lo que más me gusta es que el propio log del error te indica la línea exacta donde ha ocurrido, y puedes ver parte del código que rodea la línea problemática.

Además, puedes ir saltando por el stacktrace al resto puntos del código, por lo que se hace muy sencillo ver qué está ocurriendo. En este caso simplemente forcé una excepción al hacer clic en un botón:

Crash Reports

Todavía le faltan funciones que considero esenciales, como gráficas sobre los dispositivos en los que se produce el error, versiones de Android, poder adjuntar logs... Por lo que he podido hablar con ellos, están trabajando activamente en mejorar toda esta parte.

Conclusión

Como habrás observado, BuddyBuild destaca por ser una herramienta extremadamente sencilla de configurar, y por dotarnos de unos funcionalidades que cubren una gran mayoría de los casos reales en sistemas de integración para aplicaciones móviles.

Te recomiendo que le eches un vistazo y lo pruebes con un proyecto propio para que puedas comprobarlo por ti mismo. Además, si te interesa el tema puedes seguir leyendo el resto de artículos sobre integración continua.

¿Qué te parece BuddyBuild? ¿Echas en falta algo? ¿Crees que es una opción real para empresas y grandes proyectos? Cuéntanos en los comentarios.

Comentarios cerrados
Inicio