TSSW2024 / sprint-2

Sprint-2 del desarrollo de Utem-Trading.
MIT License
0 stars 1 forks source link

(Spike - Devops) Investigacion de workflow #14

Closed zkodah closed 5 months ago

zkodah commented 5 months ago

Descripción

Se desea tener la documentación extensiva sobre que es un Workflow

Tareas

Fecha de Vencimiento

Se ha definido la fecha de entrega para el día 27-04-2024

optic4l commented 5 months ago

Que es un Workflow?

Un workflow es un conjunto de procesos, herramientas y prácticas que se utilizan para gestionar el ciclo de vida de desarrollo, pruebas, implementación y operaciones de software en un proyecto. Este flujo de trabajo tiene como objetivo principal mejorar la colaboración entre equipos, acelerar la entrega de software y garantizar su calidad y fiabilidad.

Un workflow puede abarcar varias areas, siendo típicamente las siguientes:

Herramientas

Existen diversas herramientas para facilitar el trabajo que se pueden implementar en los flujos de trabajo dependiendo de la etapa del ciclo de vida del software en la que nos encontremos. Por ejemplo para la etapa de planificación tenemos herramientas como Trello, Teams, Lucidchart, entre otras, que facilitan la colaboración en esta etapa tan importante como lo es la planificación de un proyecto.

En esta ocasión se van a destacar diversas herramientas que nos permitan optimizar nuestro flujo de trabajo enfocándonos en las etapas de desarrollo y de CI/CD, teniendo en cuenta el stack tecnológico en el cual se esta desarrollando el proyecto.

CodeMagic

Codemagic es un producto de integración continua y Entrega continua (CI/CD) basado en la nube diseñado específicamente para desarrolladores móviles que construyen aplicaciones con Flutter, React Native, iOS nativo, Android nativo, Unity, Kotlin Multiplatform Mobile y Ionic.

Codemagic automatiza el proceso de construcción, pruebas e implementación de aplicaciones en tiendas como Apple App Store, Google Play, Microsoft Store y Huawei App Gallery. Las nuevas builds se pueden activar cuando el código se pushea al repositorio, se añaden etiquetas o cuando las pull request se fusionan. Se pueden configurar múltiples flujos de trabajo para que la aplicación esté disponible para el equipo de desarrollo, distribuir la última compilación al equipo de pruebas o publicar la aplicación a producción.

Tiene un free tier la cual permite 500 minutos de build gratis por mes, luego comienza a regir el pricing pay as you go, con costos de:

GitHub actions permite crear un flujo de trabajo para cada evento de GitHub como los push, la creación de issues, o una nueva release de la aplicación.

Puede correr contenedores para diferentes sistemas operativos (Linux, macOS, Windows, ARM. Es compatible con cualquier lenguaje de programación, se pueden crear matrices de flujos de trabajo que prueben simultáneamente a trabes de multiples sistemas operativos y versiones en tiempo de ejecución.

Ademas, cuenta con multiples workflows que son impulsados por la comunidad,

Fastlane

Fastlane es una herramienta de código abierto utilizada principalmente para automatizar y agilizar el proceso de desarrollo y distribución de aplicaciones móviles para iOS y Android. Es una herramienta popular en el ecosistema de desarrollo de aplicaciones móviles, especialmente para proyectos que utilizan tecnologías como Flutter, React Native, Xamarin, y más.

Algunas de las características y funcionalidades principales de Fastlane incluyen:

  1. Automatización de tareas repetitivas: Fastlane automatiza tareas repetitivas y tediosas en el proceso de desarrollo de aplicaciones móviles, como la compilación de código, la ejecución de pruebas, la generación de archivos de aplicación, la firma de aplicaciones y el despliegue en tiendas de
  2. Gestión de certificados y perfiles de aprovisionamiento: Fastlane simplifica la gestión de certificados de firma y perfiles de aprovisionamiento requeridos para el desarrollo y distribución de aplicaciones iOS. Puede generar automáticamente certificados de firma y perfiles de aprovisionamiento necesarios para firmar y distribuir aplicaciones
  3. Despliegue continuo (CD): Fastlane facilita el proceso de implementación continua de aplicaciones móviles mediante la automatización del proceso de compilación, prueba y distribución de aplicaciones en tiendas de aplicaciones como la App Store de Apple y Google Play
  4. Flujos de trabajo personalizables: Fastlane ofrece una amplia gama de herramientas y acciones que puedes combinar y personalizar para crear flujos de trabajo de desarrollo y distribución de aplicaciones móviles personalizados según tus necesidades
  5. Integración con herramientas de terceros: Fastlane se integra con una variedad de herramientas y servicios populares utilizados en el desarrollo de aplicaciones móviles, como GitHub, Bitbucket, Firebase, TestFlight, entre otros.

Fastlane es la opción que nos proporciona la propia documentación de Flutter para realizar el despliegue continuo (CD). Si bien esta no es una plataforma de CI, se puede integrar fácilmente con otras herramientas populares para la implementación continua, como la que nos proporciona el mismo GitHub

optic4l commented 5 months ago

Evaluación de alternativas

Codemagic:

GitHub Actions:

Fastlane:

Si bien, Codemagic es la herramienta mas completa enfocada al uso y desarrollo con flutter que es nuestro stack tecnológico, esta no es una herramienta open source, por lo que dependiendo de nuestro consumo podría incurrir en un gasto innecesario.

Así que para este caso, lo mas optimo seria utilizar las funcionalidades que nos ofrece GitHub, al ser de propósito general se puede aplicar a un mayor casos de usos aportando mas valor a nuestro perfil como profesionales no tan solo enfocado en Flutter, ademas, como ya se tiene el proyecto estructurado en GitHub, es mas provecho darle utilidad a la integración que GitHub actions tiene con los repositorios y el proyecto en su totalidad trabajado en GitHub.

También, hay que tener en cuenta la posibilidad de tener que incluir Fastlane para realizar una correcta gestión de los certificados de firma y perfiles de aprovisionamiento necesario para la distribución de la aplicación.