Ciclo de Desarrollo en la Plataforma (CI/CD)

Se plantea un ciclo de vida ágil de desarrollo basado en un modelo DevOps con flujo de entrega temprana, continua, iterativa e incremental de valor (foco en entrega de Valor a Cliente), con inspección y adaptación para la consecución de mejora continua y calidad en el proceso, ampliando con algunos ámbitos y bloques transversales identificados de interés para el desarrollo de soluciones.

DevOps supera y trasciende a Agile al ser mucho más completo e integrador, al estar orientado a servicio de extremo a extremo y a promover el flujo continuo como gestión conjunta de proyectos y servicios.

Bloques y Fases

Se propone una Consola Global como punto de acceso unificado, para todos los roles y como nexo para todo el marco de trabajo durante todo el ciclo de vida de una solución.

Se plantean 3 bloques transversales a todo el ciclo de vida DevOps por su importancia y uso común en el resto:

  • Collaborate: Conjunto de herramientas colaborativas que faciliten la comunicación ágil y la transparencia en todo el ciclo de vida del desarrollo de soluciones, así como facilitador de un punto de documentación de todos los ámbitos del marco de trabajo.

  • Security: Conjunto de actividades, herramientas, frameworks, prácticas y todo aquello que se defina como necesario e imprescindible para asegurar la seguridad en todo el marco de trabajo y ciclo de vida de una solución. Convierte el ciclo de vida DevOps en DevSecOps.

  • Governance: Censo o catálogo completo de todas las piezas que forman parte de una solución (Productos/Proyectos, Clientes, Usuarios, Procesos, Funcionalidades, Datos, Componentes visuales, Servicios, Algoritmos, Infraestructura y Sistemas, Herramientas, Frameworks, Módulos y Dependencias, etc.).

Herramientas

Traducido en herramientas tendríamos:

  • Global Console: Control Panel de la Plataforma desde el que se puede realizar el desarrollo, monitorización, seguimiento,...

  • Collaborate: Jenkins (documentación), Slack (comunicación).

  • Governance: Control Panel, JIRA.

  • Code: Eclipse (Java), Visual Studio Code (HTML, JS), Control Panel Plataforma (Reglas, Flows, APIS,...).

  • Build: Maven (Java), SonarQube, Jenkins, Docker, npm.

  • Test: JUnit (Java), Katalon (automatización test Capa Web), JMeter (Test Stress y Performance).

  • Release: Jenkins, Nexus, Docker Registry.

  • Monitor: Caas Platform (Rancher y OpenShift), Prometheus, Spring Boot Admin, Controla Panel Plataforma.

  • Operate: Caas Platform (Rancher y OpenShift).

  • Deploy: Ansible, Docker, Kubernetes.

Proceso CI/CD

Las herramientas descritas se unen en un flujo que compone el proceso CI/CD (Integración continua y despliegue continuo) de la plataforma.

El flujo conceptual se resume en:

  • El código de la plataforma se encuentra en Gitlab: Git es un sistema de control de versiones distribuido, fue diseñado para el desarrollo de grandes proyectos con una gran cantidad de código y gestionado por mucha gente. Gran cantidad de proyectos Open Source están migrando o han migrado a Git ya que la creación de ramas e integración de las mismas es más eficiente y sencilla que en los sistemas centralizados. 

    • Cada desarrollador trabaja sobre su propio Branch (rama). Al finalizar el desarrollo y testearlo solicita un Merge Request a la rama de Desarrollo (Develop) o de resolución de bugs de la versión que corresponda.

  • Todas las noches (y también bajo petición) se lanza un Pipeline Jenkins que:

    • Descarga los fuentes de la rama concreta de Gitlab,

    • Compila los fuentes y pasa los test unitarios con Maven,

    • Pasa los tests de calidad con Sonar,

    • Sube los artefactos generados en un Nexus y

    • Genera las imágenes Docker y las almacena en el Docker Registry.

  • Tras acabar este pipeline se lanza otro pipeline que ejecuta la plataforma y lanza los tests de integración.

  • Para realizar el despliegue se accede a la consola del CaaS correspondiente (Rancher u OpenShift) y se actualiza la versión de la plataforma.