Diseño, compilación y organización con procedimientos modernos

  • Creación de soluciones fantásticas con el excelente marco de trabajo de Microsoft Azure

Diseño, compilación y organización con procedimientos modernos

  • 15 minutos

Los procedimientos operativos y de desarrollo han evolucionado con los años para integrarse y adaptarse sin fisuras. Los procedimientos modernos de hoy día conllevan una serie de cambios organizativos y la adopción de nuevas herramientas para mejorar la agilidad operativa de una organización. En esta unidad, veremos algunos de los conceptos clave para mejorar la capacidad de una organización a la hora de compilar e implementar aplicaciones.

DevOps

DevOps es la unión de personas, procesos y productos para permitir la entrega continua de valor a los usuarios finales. La finalidad de DevOps es reunir las funciones operativas y de desarrollo dentro de una misma perspectiva y acabar con las barreras existentes entre ellas. Al combinarlas, se crean equipos multidisciplinares que trabajan conjuntamente con herramientas y procedimientos compartidos y eficaces. Los procedimientos de DevOps esenciales son una planeación ágil, una integración y entrega continuas y la supervisión de las aplicaciones.

La esencia de DevOps consiste en equipos multidisciplinares de tamaño reducido que trabajan de forma autónoma y que asumen una responsabilidad colectiva en cuanto a la experiencia que los usuarios finales van a tener con el software. Los equipos de DevOps ponen en marcha procedimientos ágiles e incluyen operaciones en las responsabilidades de cada equipo. Los equipos trabajan en lotes pequeños centrados en mejorar el proceso completo de entrega de valor al cliente y, a lo largo de ese proceso, se esfuerzan por eliminar los obstáculos y aspectos prescindibles. No hay individualidades ni reproches, ya que cada equipo es mutuamente responsable.

Hay varios servicios y herramientas disponibles en Microsoft que ayudan a una organización a adoptar y desarrollar procedimientos de DevOps. Azure DevOps es un conjunto de productos y herramientas que pueden usar los equipos que adoptan procedimientos de DevOps para planear, desarrollar, proporcionar y poner en marcha sus soluciones.

Azure Boards es una parte de Azure DevOps de Azure con la que los equipos pueden planear el trabajo y realizar un seguimiento al respecto. Azure Boards cuenta con herramientas ágiles y modernas (como paneles kanban, trabajos pendientes, paneles y paneles de tareas) que permiten al equipo tener una mayor visibilidad del trabajo planeado y de lo que se lleva ya entregado.

Captura de pantalla de un panel kanban en Azure Boards

GitHub es la plataforma más usada para compilar, distribuir y compartir software. En esencia, GitHub es una plataforma de control de versiones gracias a la cual una comunidad mundial de personas y equipos pueden colaborar en proyectos de desarrollo de software, independientemente de si se trata de proyectos privados de sus correspondientes organizaciones o compartidos a través de comunidades públicas de desarrolladores de software diferentes. GitHub incluye también características para compilar y probar implementaciones, llevar un seguimiento de los problemas y crear flujos de trabajo personalizados en los repositorios.

Azure DevOps y GitHub se integran entre sí, y las organizaciones que operan o adoptan un modelo de DevOps suelen usar ambos servicios a la vez.

Integración continua y entrega continua (CI/CD)

La integración continua (CI) es el proceso consistente en compilar y probar el código cada vez que un miembro del equipo confirma los cambios en el control de versiones. La CI estimula a los desarrolladores para que compartan el código y las pruebas unitarias, ya que incorpora sus cambios a un repositorio de control de versiones compartido después de que cada tarea pequeña se complete. La confirmación de código desencadena un sistema de compilación automatizado para obtener el código más reciente del repositorio compartido y que, tras ello, la rama maestra completa se compile, pruebe y valide.

La CI ayuda a los desarrolla👏dores a identificar errores de forma temprana y mejora la calidad del software, ya que el código se inserta, compila y comprueba con más frecuencia. En lugar de trabajar en el código durante un mes y detectar todos los problemas cuando los cambios se inserten al término del proceso, los desarrolladores pueden insertar conjuntos de cambios más pequeños y, así, evitar que el código introduzca infinidad de problemas en la rama principal.

La entrega continua (CD) es el proceso consistente en compilar, probar, configurar e implementar desde un entorno de compilación a uno de producción. Los diversos entornos de prueba o de ensayo crean una canalización de versiones que automatiza la creación de infraestructura y la complementación de una nueva compilación. Los entornos subsiguientes irán teniendo cabida para actividades cada vez más prolongadas de integración, carga y pruebas de aceptación del usuario.

La integración y la entrega continuas se suelen combinar en una sola canalización, conocida como CI/CD. La integración continua inicia el proceso de entrega continua, y las etapas de la canalización de CI/CD cambian de un entorno al siguiente cuando las pruebas definidas en cada fase se vayan completando correctamente. Un desarrollador puede insertar código, validar que supera todas las pruebas y que no hay ningún problema nuevo en la rama maestra y, por último, implementar dicho código en producción con la confianza de que no afectará al funcionamiento del entorno de producción.

Azure Pipelines es un servicio en la nube que se puede usar para compilar y probar automáticamente el proyecto de código y ponerlo disponible para los demás. Funciona prácticamente con cualquier lenguaje o tipo de proyecto, y se integra con GitHub, GitHub Enterprise, Azure Repos y con otros sistemas de control de versiones. Azure Pipelines combina la integración continua (CI) y la entrega continua (CD) para probar y compilar código de forma constante y coherente y enviarlo a cualquier destino.

Visualización de una canalización de CI/CD

También se puede usar Acciones de GitHub para crear capacidades de CI/CD en los repositorios de GitHub. Con Acciones de GitHub, se pueden crear flujos de trabajo que son procesos automatizados personalizados para compilar, probar, empaquetar, publicar e implementar código.

Microservicios

Una arquitectura de microservicios consta de servicios pequeños, independientes y conectados de forma flexible. Cada servicio se puede implementar y escalar de manera independiente. A menudo, recurrimos a las arquitecturas de microservicios para aplicaciones nuevas que adoptan procedimientos de DevOps.

Diagrama lógico de una arquitectura de microservicios

Un microservicio es lo suficientemente pequeño como para que un solo equipo reducido de programadores lo pueda escribir y mantener. Como los servicios se pueden implementar de forma independiente, un equipo puede actualizar un servicio existente sin tener que volver a generar e implementar toda la aplicación.

Cada servicio suele ser responsable de sus propios datos. Su estructura de datos está aislada, de modo que las actualizaciones o los cambios en el esquema no dependen de otros servicios. Normalmente, las solicitudes de datos se controlan a través de API y proporcionan un modelo de acceso coherente y bien definido. Los detalles internos de la implementación se ocultan a los consumidores del servicio.

Como cada servicio es independiente, pueden usar otras pilas de tecnología, marcos y SDK. Es habitual ver que los servicios se basan en llamadas REST para la comunicación entre servicios mediante API bien definidas en lugar de RPC u otros métodos de comunicación personalizados.

Las arquitecturas de microservicios son independientes de la tecnología, pero a menudo verá que se usan contenedores o tecnologías sin servidor para su implementación. La implementación y la integración continuas (CI/CD) se usan con frecuencia para aumentar la velocidad y la calidad de las actividades de desarrollo.

Coherencia del entorno

Para desarrollar e implementar aplicaciones con confianza y seguridad, es fundamental garantizar que los entornos entre el desarrollo, la prueba y la producción son coherentes. A medida que los procesos de CI/CD van pasando el código por los diferentes entornos, cualquier variación entraña el riesgo de introducir áreas en las que las pruebas pueden generar errores o pasar por alto defectos. A través de la automatización, se pueden poner entornos en marcha e ir desechándolos según sea necesario, algo que se puede incluir como parte de los procesos de CI/CD.

Imaginemos un entorno en el que estuviéramos compilando una aplicación .NET Core y donde los entornos de prueba y producción ejecutaran versiones diferentes. Nuestra implementación podría realizarse correctamente en el entorno de prueba, pero causar problemas en el entorno de producción porque ejecuta una versión diferente de la aplicación. Incluir las definiciones de entorno como parte de la implementación nos ayudará a asegurarnos de que el código se compila e implementa en una infraestructura completa y coherente.

Back to top