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.