Introducción a la integración continua con Xamarin

La integración continua es una práctica de ingeniería de software en la que una compilación automatizada compila y, opcionalmente, prueba una aplicación cuando los desarrolladores agregan o cambian el código en el repositorio de control de versiones del proyecto. En este artículo se describen los conceptos generales de la integración continua y algunas de las opciones disponibles para la integración continua con proyectos de Xamarin.

Es habitual que los desarrolladores trabajen en paralelo en proyectos de software. En algún momento, es necesario integrar todas estas secuencias paralelas de trabajo en un código base que constituye el producto final. En los primeros días del desarrollo de software, esta integración se realizó al final de un proyecto, que era un proceso difícil y arriesgado.

La integración continua (CI) evita estas complejidades mediante la combinación de los cambios de cada desarrollador en la base de código común de forma continua, normalmente siempre que los desarrolladores comprueben cambios en el repositorio de código compartido del proyecto. Cada protección desencadena una compilación automatizada y ejecuta pruebas automatizadas para comprobar que el código recién introducido no interrumpa ningún código existente. De esta manera, ci muestra errores y problemas inmediatamente y garantiza que todos los miembros del equipo permanezcan actualizados con el trabajo del otro. Esto da como resultado un código base coherente y estable.

Los sistemas de integración continua tienen dos partes principales:

  • Control de versiones: control de versiones (VC), también denominado control de código fuente o administración de código fuente, consolida todo el código de un proyecto en un único repositorio compartido y mantiene un historial completo de todos los cambios en cada archivo. Este repositorio, a menudo denominado rama mainline , contiene el código fuente que, en última instancia, se usará para compilar la versión de producción o lanzamiento de la aplicación. Hay muchos productos código abierto y comerciales para esta tarea, que normalmente permiten a los equipos o individuos bifurcar una copia del código en ramas secundarias donde pueden realizar cambios extensos o realizar experimentos sin riesgo para la rama principal. Una vez que se validan los cambios en una rama secundaria, se pueden combinar de nuevo en la rama principal.
  • Servidor de integración continua : El servidor de integración continua es responsable de recopilar todos los artefactos de un proyecto (código fuente, imágenes, vídeos, bases de datos, pruebas automatizadas, etc.), compilar la aplicación y ejecutar las pruebas automatizadas. De nuevo, hay muchas herramientas de servidor de CI comercial y código abierto.

Normalmente, los desarrolladores tienen una copia en funcionamiento de una o varias ramas en sus estaciones de trabajo, donde se realiza inicialmente el trabajo. Una vez completado un conjunto de trabajo adecuado, los cambios se "comprueban" o "se confirman" en la rama adecuada, que los propaga a las copias de trabajo de otros desarrolladores. Así es como un equipo garantiza que todos trabajan en el mismo código.

De nuevo, con la integración continua, el acto de confirmar cambios hace que el servidor de CI compile el proyecto y ejecute pruebas automatizadas para comprobar la exactitud del código fuente. Si hay errores de compilación o errores de prueba, un servidor de CI notifica al desarrollador responsable (por correo electrónico, MI, Twitter, Growl, etc.) para que pueda corregir el problema. (Los servidores de CI incluso pueden rechazar la confirmación si hay errores, lo que se denomina "comprobación controlada").

En el diagrama siguiente se muestra este proceso:

En este diagrama se muestra este proceso.

Las aplicaciones móviles presentan desafíos únicos para la integración continua. Las aplicaciones pueden requerir sensores como el GPS o la cámara que solo están disponibles en dispositivos físicos. Además, los simuladores o emuladores son solo una aproximación del hardware y pueden ocultar u ocultar problemas. Al final, es necesario probar una aplicación móvil en hardware real para estar seguro de que está realmente listo para el cliente.

La prueba de App Center soluciona este problema concreto mediante la prueba de aplicaciones directamente en cientos de dispositivos físicos. Los desarrolladores escriben pruebas de aceptación automatizadas, lo que permite realizar pruebas de IU eficaces. Una vez que estas pruebas se cargan en App Center, el servidor de CI puede ejecutarlas automáticamente como parte de un proceso de CI, como se muestra en el diagrama siguiente:

Una vez que estas pruebas se cargan en App Center, el servidor de CI puede ejecutarlas automáticamente como parte de un proceso de CI, como se muestra en este diagrama.

Componentes de la integración continua

Hay un amplio ecosistema de herramientas comerciales y de código abierto diseñadas para admitir ci. En esta sección se explican algunos de los más comunes.

Control de versiones

Azure DevOps y Team Foundation Server

Azure DevOps y Team Foundation Server (TFS) son herramientas de colaboración de Microsoft para servicios de compilación de integración continua, seguimiento de tareas, herramientas ágiles de planeamiento e informes y control de versiones. Con el control de versiones, Azure DevOps y TFS pueden funcionar con su propio sistema (Control de versiones de Team Foundation o TFVC) o con proyectos hospedados en GitHub.

  • Azure DevOps proporciona servicios a través de la nube. Su principal ventaja es que no requiere hardware o infraestructura dedicado y se puede acceder desde cualquier lugar a través de exploradores web y a través de herramientas de desarrollo populares como Visual Studio, lo que hace que sea atractivo para los equipos que se distribuyen geográficamente. Es gratis para los equipos de cinco desarrolladores o menos, después de lo cual se pueden comprar licencias adicionales para dar cabida a un equipo creciente.
  • TFS está diseñado para servidores Windows locales y se accede a través de una red local o una conexión VPN a esa red. Su principal ventaja es que controla completamente la configuración de los servidores de compilación y puede instalar cualquier software o servicios adicionales necesarios. TFS tiene una edición Express gratuita de nivel de entrada para equipos pequeños.

Tanto TFS como Azure DevOps están estrechamente integrados con Visual Studio y permiten a los desarrolladores realizar muchas tareas de control de versiones y ci desde la comodidad de un único IDE. El complemento Team Explorer Everywhere para Eclipse (consulte a continuación) también está disponible. Visual Studio para Mac tiene disponible una versión preliminar de TFVC.

Azure DevOps Pipelines tiene compatibilidad directa con proyectos de Xamarin, en los que se crea una definición de compilación para cada plataforma de destino (Android, iOS y Windows). Se necesita la licencia de Xamarin adecuada para cada definición de compilación. También es posible conectar un servidor de compilación de TFS local compatible con Xamarin a Azure DevOps para este fin. Con esta configuración, las compilaciones que se ponen en cola en Azure DevOps se delegarán en el servidor local. Para más información, consulte Agentes de compilación y versión. Como alternativa, puede usar otra herramienta de compilación, como Jenkins o Team City.

Un resumen completo de todas las características de Administración del ciclo de vida de las aplicaciones (ALM) de Visual Studio, Azure DevOps y Team Foundation Server, consulte DevOps con aplicaciones de Xamarin.

Team Explorer Everywhere

Team Explorer Everywhere aporta la eficacia de Team Foundation Server y Azure DevOps a los equipos que desarrollan fuera de Visual Studio. Permite a los desarrolladores conectarse a proyectos de equipo locales o en la nube desde Eclipse o el cliente de línea de comandos multiplataforma para OS X y Linux. Team Explorer Everywhere proporciona acceso completo al control de versiones (incluido Git), elementos de trabajo y funcionalidades de compilación para plataformas que no son de Windows.

Git

Git es una popular solución de control de versiones código abierto que se desarrolló originalmente para administrar el código fuente del kernel de Linux. Es un sistema muy rápido y flexible que es popular con proyectos de software de todos los tamaños. Se escala fácilmente desde desarrolladores individuales con acceso deficiente a Internet a grandes equipos que abarcan todo el mundo. Git también facilita la bifurcación, lo que a su vez puede fomentar flujos paralelos de desarrollo con un riesgo mínimo.

Git puede funcionar completamente a través de exploradores web o clientes de GUI que se ejecutan en Linux, Mac OSX y Windows. Es gratuito para repositorios públicos; los repositorios privados requieren un plan de pago.

Las versiones actuales de Visual Studio para Windows y Mac proporcionan compatibilidad nativa con Git. Microsoft proporciona una extensión descargable para Git para versiones anteriores de Visual Studio. Como se indicó anteriormente, Azure DevOps y TFS pueden usar Git para el control de versiones en lugar de TFVC.

Subversion

Subversion (SVN) es un sistema popular de control de versiones código abierto que se ha usado desde 2000. SVN se ejecuta en todas las versiones modernas de OS X, Windows, FreeBSD, Linux y Unix. Visual Studio para Mac tiene compatibilidad nativa con SVN. Hay extensiones de terceros que admiten SVN en Visual Studio.

Entornos de integración continua

La configuración de un entorno de integración continua significa combinar un sistema de control de versiones con un servicio de compilación. Para este último, los dos más comunes son:

  • Azure Pipelines es el sistema de compilación de Azure DevOps y TFS. Está estrechamente integrado con Visual Studio, lo que facilita a los desarrolladores desencadenar compilaciones, ejecutar pruebas automáticamente y ver los resultados.
  • Jenkins es un servidor de CI de código abierto con un amplio ecosistema de complementos para admitir todo tipo de desarrollo de software. Se ejecuta en Windows y Mac OS X. Jenkins no está integrado con ningún IDE específico. En su lugar, se configura y administra a través de una interfaz web. Jenkins CI también es fácil de instalar y configurar, lo que hace que sea atractivo para los equipos pequeños.

Puede usar TFS/Azure DevOps por sí mismo, o puede usar Jenkins en combinación con TFS/Azure DevOps o Git, tal como se describe en las secciones siguientes.

Azure DevOps y Team Foundation Server

Como se explicó, Azure DevOps y Team Foundation Server proporcionan servicios de control de versiones y de compilación. Los servicios de compilación siempre requieren una licencia de Xamarin Business o Enterprise para cada plataforma de destino.

Con Azure DevOps, creará una definición de compilación independiente para cada plataforma de destino y escribirá allí la licencia adecuada. Una vez configurado, Azure DevOps ejecutará compilaciones y pruebas en la nube. Consulte Azure Pipelines para más información.

Con Team Foundation Server, puede configurar una máquina de compilación de la siguiente manera para plataformas de destino específicas:

  • Android y Windows: Instale Visual Studio y las herramientas de Xamarin (para Android y Windows) y configúrelas con las licencias de Xamarin. También es necesario mover Android SDK a una ubicación compartida en el servidor donde el agente de compilación de TFS puede encontrarlo. Para obtener más información, consulte Configuración de TFVC.
  • iOS y Xamarin: Instale Visual Studio y las herramientas de Xamarin en windows Server con la licencia adecuada. A continuación, instale Visual Studio para Mac en una máquina Mac OS X accesible para la red, que servirá como host de compilación y creará el paquete de aplicación final (IPA para iOS, APP para OS X).

En el diagrama siguiente se muestra esta topografía:

En este diagrama se muestra esta topografía

También es posible vincular un servidor TFS local a un proyecto de Azure DevOps para que las compilaciones de Azure DevOps se deleguen en el servidor local. Para obtener más información, consulte Agentes de compilación y versión.

Azure DevOps y Jenkins

Si usa Jenkins para compilar las aplicaciones, puede almacenar el código en Azure DevOps o Team Foundation Server y seguir usando Jenkins para las compilaciones de CI. Puede desencadenar una compilación de Jenkins al insertar código en el repositorio de Git del proyecto de equipo o al proteger el código en TFVC. Para más información, consulte Jenkins con Azure DevOps.

Si usa Jenkins para compilar las aplicaciones, puede almacenar el código en Azure DevOps o Team Foundation Server y seguir usando Jenkins para las compilaciones de CI.

Git y Jenkins

Otro entorno de CI común puede basarse completamente en OS X. Este escenario implica el uso de Git para el control de código fuente y Jenkins para el servidor de compilación. Ambos se ejecutan en un solo equipo Mac OS X con Visual Studio para Mac instalado. Esto es muy similar al entorno de Azure DevOps + Jenkins descrito en la sección anterior:

Esto es muy similar al entorno de Azure DevOps + Jenkins descrito en la sección anterior.

Importante

Microsoft no admite Jenkins.