Introducción
En el desarrollo tradicional de software, el proceso de integración suele tener lugar al final del proyecto, una vez que cada persona ha terminado su trabajo. La integración suele llevar días o semanas y puede ser dolorosa. Los conflictos surgen porque dos desarrolladores modifican el mismo fragmento de código. El código ya no se compila. Cosas que funcionaban antes y que ya no funcionan. Código que no funciona en el entorno de producción.
No tiene por qué ser así. En esta entrada del blog, quiero presentarte la integración continua y la entrega continua (CI/CD).
Este post se basa en una presentación que hice en Acumatica Summit 2022. La grabación completa se puede encontrar aquí: https://www.youtube.com/watch?v=o_Ma4_C2b2w
¿Qué es CI/CD?
CI/CD es una práctica de desarrollo de software que pretende automatizar y agilizar el proceso de creación, prueba y despliegue de aplicaciones de software. Consiste en crear un canal que automáticamente compila, prueba y despliega los cambios de código a medida que se realizan, lo que permite una rápida iteración y despliegue de nuevas características y funcionalidades.
Fuente: La guía de los gestores de productos para la entrega continua y DevOps
https://www.mindtheproduct.com/
¿Por qué utilizar CI/CD?
El uso de CI/CD para los desarrolladores que crean soluciones de Acumatica tiene varias ventajas:
- Mayor eficiencia y productividad: CI/CD puede ayudar a reducir el tiempo y el esfuerzo necesarios para construir, probar y desplegar personalizaciones mediante la automatización de muchos de los pasos manuales que intervienen en el proceso. Esto significa que su equipo puede centrarse en tareas más importantes, en lugar de dedicar tiempo a tediosos procesos manuales.
- Mayor calidad y fiabilidad: Al automatizar las pruebas y el despliegue, CI/CD puede ayudar a identificar y solucionar problemas en una fase más temprana del proceso de desarrollo, lo que reduce el riesgo de que se introduzcan problemas en los entornos de producción. Esto puede ayudar a garantizar que las personalizaciones y modificaciones de su instancia de Acumatica sean de la máxima calidad y fiabilidad.
- Mayor velocidad y agilidad: CI/CD permite a los desarrolladores iterar rápidamente sobre su código y ponerlo en producción más rápido, lo que les permite responder más rápidamente a las necesidades empresariales y a los cambios del mercado. Esto puede ayudar a su pequeña empresa a seguir siendo competitiva en un mercado en constante cambio.
¿Cómo configurar una canalización CI/CD para proyectos de desarrollo de Acumatica?
Configurar una canalización CI/CD para sus proyectos de desarrollo de Acumatica puede parecer intimidante al principio, pero es un proceso bastante sencillo. Estos son los pasos que deberá seguir:
- Elige un sistema de control de código fuente: Tendrás que utilizar un sistema de control de código fuente para gestionar y realizar un seguimiento de los cambios en tu código base. Hay varias opciones disponibles, como Git, Mercurial y Subversion. Elige el que mejor se adapte a tus necesidades y resulte más familiar a tu equipo.
- Configurar un servidor de compilación: Necesitarás un servidor de compilación para automatizar el proceso de creación, prueba y despliegue del código. Puede ser una máquina física o una máquina virtual alojada en la nube.
- Configura tu servidor de compilación: Una vez que haya configurado un servidor de compilación, tendrá que configurarlo para que ejecute las herramientas y los procesos necesarios para compilar, probar y desplegar el código. Esto suele implicar la instalación y configuración de una herramienta de automatización de la compilación como Azure DevOps.
- Configure un entorno de pruebas: Necesitarás un entorno independiente para ejecutar pruebas automatizadas en tu código. Puede ser una máquina física o virtual, y puede estar alojada en las instalaciones o en la nube.
- Configure su entorno de pruebas: Deberá instalar y configurar las herramientas y dependencias necesarias en su entorno de pruebas para ejecutar pruebas automatizadas. Por lo general, esto implicará instalar el marco de pruebas de Acumatica y cualquier otra herramienta necesaria para sus necesidades de pruebas específicas.
- Configure un entorno de despliegue: Necesitarás un entorno independiente para desplegar tu código en producción. Puede ser una máquina física o virtual.
Para implementar CI/CD para proyectos de desarrollo de Acumatica, es importante evaluar el estado actual de las prácticas y herramientas de desarrollo. Esto incluye comprender el uso del control de código fuente para proyectos de personalización, el uso del SDK de prueba de Acumatica para pruebas automatizadas y el uso de herramientas de CI/CD para la implementación. El SDK de pruebas de Acumatica es un conjunto de herramientas proporcionadas por Acumatica para crear pruebas automatizadas para la interfaz de usuario de las aplicaciones de Acumatica. Estas pruebas pueden simular las interacciones del usuario con la interfaz de usuario y validar el comportamiento y la funcionalidad de la aplicación.
Estructura del repositorio GitHub
GitHub es un sistema de control de versiones que permite a los desarrolladores realizar un seguimiento de los cambios en su código a lo largo del tiempo y colaborar con otros desarrolladores en proyectos. En el contexto de un proyecto de desarrollo de Acumatica, un repositorio de GitHub podría incluir una biblioteca de extensiones de Acumatica, artefactos del proyecto de personalización, proyectos de pruebas unitarias, un archivo YAML de Azure Pipelines, un archivo de configuración de NuGet y secuencias de comandos y herramientas de línea de comandos adicionales para publicar el paquete de personalización:
Este repositorio de muestras se encuentra en https://github.com/VelixoSolutions/AcumaticaCIDemo
Integración de Acumatica Source Control
La integración de control de código fuente de Acumatica proporciona integración con una serie de herramientas de control de código fuente. Funciona de forma diferente a Visual Studio y no es un enlace directo a ninguna herramienta específica de control de código fuente. En su lugar, facilita la lectura y escritura en una carpeta local, que está vinculada/suscrita a un sistema de control de código fuente como Git.
Para obtener más información, consulte "Código fuente y automatización para desarrolladores de Acumatica" de la Conferencia virtual de desarrolladores de Acumatica de 2019
Enlace: /media/2019/07/2019-Acumatica-DevCon-Source-Control-Automation.pdf
Creación del paquete de personalización
La creación del paquete de personalización es el proceso de creación de un paquete de código y recursos que se puede implementar en una instancia de Acumatica para añadir personalizaciones o extensiones a la aplicación.
¿Qué incluye un paquete de personalización?
Dado que nuestro objetivo es automatizar este proceso, tenemos que confiar en una herramienta de línea de comandos para construir esto para nosotros. PX.CommandLine.exe es una herramienta que se incluye con Acumatica y que se utiliza habitualmente para crear paquetes de personalización para Acumatica, pero tiene limitaciones que dificultan su uso en el contexto de un canal de CI/CD:
- Requiere la instalación de una instancia completa de Acumatica
- Es lento: la instancia de Acumatica debe iniciarse antes de que pueda crearse el paquete.
- No funciona cuando se ejecuta en el contexto de un agente de compilación.
Como alternativa, he creado una sencilla aplicación de línea de comandos que hace esto por ti, sin ningún problema añadido. Proporciona opciones para especificar la ruta de personalización, el nombre de archivo del paquete y una descripción del proyecto de personalización. Para crear un paquete de personalización utilizando CustomizationPackageTools.exe, los desarrolladores pueden utilizar un comando como este:
Puede encontrar el código fuente de esta herramienta aquí: https://github.com/VelixoSolutions/AcumaticaCIDemo/tree/main/CustomizationPackageTools
El código tiene licencia MIT - por favor, ¡haz un fork y mejóralo!
Publicación del paquete de personalización
Publicar el paquete de personalización es el proceso de implementar el paquete en una instancia de Acumatica y poner a disposición de los usuarios las personalizaciones o extensiones contenidas en el paquete. La API de Acumatica Service Gate es una API de servicio web ubicada en /api/ServiceGate.asmx y basada en SOAP que se puede usar para publicar paquetes de personalización en una instancia de Acumatica, pero puede ser difícil de usar con una plataforma de CI/CD como Azure Pipelines. Azure Pipelines no puede llamar a una API de servicio web, pero puede ejecutar cualquier aplicación de línea de comandos o script de PowerShell. He extendido la misma aplicación de línea de comandos que presenté anteriormente, para permitirle publicar proyectos también.
Para publicar un paquete de personalización mediante CustomizationPackageTools.exe, los desarrolladores pueden utilizar un comando como el siguiente:
Pruebas: Aprovechamiento de las herramientas y marcos de prueba de Acumatica
Acumatica proporciona un conjunto de herramientas y marcos de pruebas para verificar la funcionalidad y el rendimiento de las personalizaciones y extensiones de la aplicación Acumatica. El SDK de pruebas de Acumatica es un conjunto de bibliotecas basadas en el marco Selenium WebDriver que permite a los desarrolladores escribir pruebas automatizadas para la interfaz de usuario de la aplicación. El marco de pruebas unitarias de Acumatica es un conjunto de bibliotecas y herramientas diseñadas específicamente para probar la lógica empresarial y otros componentes de la aplicación. Mediante el uso de estas herramientas y marcos de pruebas, los desarrolladores pueden crear pruebas automatizadas que ayudan a garantizar la calidad y fiabilidad de su código.
El SDK de pruebas de Acumatica es un conjunto de herramientas y bibliotecas que permiten a los desarrolladores crear pruebas automatizadas para la interfaz de usuario (UI) del software Acumatica. Estas pruebas verifican la funcionalidad de los elementos de interfaz de usuario personalizados y se pueden ejecutar en diferentes versiones del software Acumatica para garantizar la compatibilidad. El SDK de prueba se basa en el marco Selenium WebDriver y proporciona herramientas para interactuar con la interfaz de usuario de Acumatica, definir y agrupar casos de prueba y configurar y eliminar datos de prueba. Para crear una prueba de interfaz de usuario, los desarrolladores suelen instalar las bibliotecas del SDK de prueba, crear un nuevo proyecto de prueba utilizando una plantilla proporcionada, escribir código de prueba utilizando las herramientas proporcionadas y ejecutar las pruebas para verificar la funcionalidad de los elementos de interfaz de usuario personalizados. El uso del SDK de pruebas ayuda a garantizar la calidad y fiabilidad del código personalizado.
Un ejemplo de prueba de interfaz de usuario
El marco de pruebas unitarias de Acumatica es un conjunto de herramientas y bibliotecas que permiten a los desarrolladores crear pruebas unitarias automatizadas para el software de Acumatica. Estas pruebas verifican la funcionalidad de unidades de código pequeñas y aisladas, como la lógica empresarial personalizada y otros componentes de la aplicación. El marco de pruebas unitarias se basa en el marco .NET e incluye una biblioteca denominada PX.Tests.Unit.dll, así como herramientas para crear y ejecutar pruebas unitarias. Para crear una prueba unitaria, los desarrolladores suelen instalar las bibliotecas del marco, crear un nuevo proyecto de prueba utilizando una plantilla proporcionada, escribir código de prueba utilizando las herramientas proporcionadas y ejecutar las pruebas para verificar la funcionalidad del código personalizado. Puede obtener más información sobre el marco de pruebas unitarias de Acumatica revisando el curso T280 - Testing Business Logic with the Acumatica Unit Test Framework (Pruebas de lógica empresarial con el marco de pruebas unitarias de Acumatica ) en la Acumatica Open University.
Un ejemplo de prueba unitaria
Puesta en común: el archivo YAML de Azure Pipeline
En Azure DevOps, la canalización CI/CD se define mediante un archivo de configuración YAML, que especifica los pasos del proceso, como la compilación del código, la ejecución de pruebas y el despliegue en distintos entornos. Los artefactos de compilación son los resultados del proceso de compilación, que se almacenan en una ubicación central y pueden utilizarse en etapas posteriores del proceso. El despliegue continuo es una variación de la entrega continua que despliega automáticamente cada cambio de código en producción, eliminando la necesidad de intervención manual.
Puede ver un archivo YAML de muestra para un proyecto CI/CD de Acumatica de muestra aquí:
https://github.com/VelixoSolutions/AcumaticaCIDemo/blob/main/azure-pipelines.yml
Canalizaciones de publicación de Azure
Azure Release Pipelines es una herramienta de Azure DevOps que te permite automatizar el proceso de despliegue de tus aplicaciones.
Un proceso de publicación define los pasos necesarios para publicar una aplicación, incluido el despliegue de código en varios entornos. Las canalizaciones de publicación pueden tener varias etapas y puertas, lo que permite crear un proceso de despliegue en varios entornos y controlar el flujo de cambios de código en función de condiciones como el tiempo o la aprobación manual.
Por ejemplo, podría esperar 3 días después del despliegue en su entorno de ensayo y, si no se han creado nuevos elementos de trabajo, realizar automáticamente el despliegue en producción.
Conclusión
En conclusión, la implementación de un proceso de integración continua y entrega continua (CI/CD) puede mejorar en gran medida la velocidad y la fiabilidad de la personalización de Acumatica, un sistema de planificación de recursos empresariales (ERP) basado en la nube. Una parte clave de este proceso es utilizar un sistema de control de código fuente para gestionar su base de código, así como el marco de pruebas de Acumatica y las pruebas unitarias para automatizar las pruebas de sus personalizaciones. Mediante el uso de una herramienta CI/CD, puede automatizar el proceso de creación, prueba e implementación, lo que le permite entregar actualizaciones a su instancia de Acumatica de forma rápida y coherente. Tenga en cuenta que los pasos específicos y las herramientas que utilice para su proceso de CI/CD dependerán de sus requisitos específicos y pueden requerir cierta experimentación para encontrar la mejor opción para su equipo. En general, la implementación de CI/CD para la personalización de Acumatica puede aportar numerosas ventajas y merece la pena que cualquier equipo de desarrollo lo tenga en cuenta.
¡Feliz aprendizaje!
Referencias y enlaces adicionales
- Implemente sus personalizaciones y aplicaciones de Acumatica con confianza - CI/CD con Acumatica - grabación de vídeo de Acumatica Summit 2022: https://www.youtube.com/watch?v=o_Ma4_C2b2w
- Repositorio de GitHub utilizado en esta sesión: https://github.com/VelixoSolutions/AcumaticaCIDemo/
- Guía del gestor de productos para la entrega continua y DevOps:
https://www.mindtheproduct.com/ - Despliegue de un agente de Azure Pipelines en Windows: https://docs.microsoft.com/en-us/azure/devops/pipelines/agents/v2-windows?view=azure-devops
- Primeros pasos con Acumatica Test SDK (VLOG de Robert Waite, MVP de Acumatica): https://www.youtube.com/watch?v=LiqTwe_Zhgk
- T280 DESARROLLO: TESTING BUSINESS LOGIC WITH THE ACUMATICA UNIT TEST FRAMEWORK 2021 R2: https://openuni.acumatica.com/courses/development/t280-development-testing-business-logic/