Materia: Seminario de ingeniería
Trabajo: Ciclo DevOps
Introducción
Actualmente las empresas se encuentran en un entorno en el que la rapidez,
calidad y estabilidad del software o producto que se ofrece son factpres de suma
importancia para lograr el éxito. Es gracias a estas necesidades que se han
creado distintas metodologías de trabajar en el desarrollo de proyectos nuevos. Es
aquí donde presentamos una metodología que unifica los procesos de desarrollo y
de operaciones, hablamos de la metodología DevOps, donde esta metodología se
enfoca en practicas que integran el desarrollo, pruebas, implementación y
operación de un software en un ciclo continuo y automatizado.
A continuación, se explicara cada etapa del ciclo DevOps así como las
herramientas que se ejecutan en cada una con sus características técnicas, casos
de uso y aplicaciones reales en la industria.
1.- Etapa de planeación.
La planificación de un proyecto o producto es la etapa donde se definen los
objetivos del producto, lo requerimientos funcionales y hitos del proyecto. Aquí se
alinean los equipos de negocio, desarrollo y operaciones para establecer una
visión compartida del producto y sus entregables.
En esta etapa del ciclo se puede hacer uso de JIRA (Atlassian), que resulta ser un
plataforma de gestión de proyectos que permite planificar, priorizar y hacer
seguimiento de las tareas de desarrollo de software bajo metodologías agiles
como Scrum o Kanban.
Especificaciones técnicas de JIRA:
-
Integracion natvica con GitHub, Jenkins y Slack.
Permite automatizar flujos de trabajo mediante Jira Automation.
Soporta Roadmaps visuales y métricas agiles.
Casos de uso:
-
Definicion de backlog de producto.
Seguimiento de sprints y tareas de desarrollo.
Aplicaicon en el ciclo DevOps.
Los equipos utilizaran JIRA para documentar historias de usuario, establecer
prioridades y coordinar esfuerzos. Esto creo un base a la cual apegarse para
trabajar en etapas posteriores del proyecto.
2.- Etapa de codificación (Git).
Una vez los requerimientos del proyecto han cido escalrecidos, los desarrolladores
deben comenzar a trabajar en el código funete del producto. Esta etapa requiere
un control de versiones, trabajo simultaneo y coordinado, así como un historial
de cambios en el código para referencias futuras o solución y búsqueda errores.
En esta tapa contamos con la ayuda de Git, que es un sistema de control de
versiones distribuido, este sirve especial mente para mantener un registro de los
cambios en archivos de texto, en este caso en el código funete, manteniendo la
integridad del código y un registro histórico de todas las modificaciones.
Especificaciones técnicas de Git:
-
Fabricante: Linus Torvlads
Es una herramienta Open Source que es mantenido por la comunidad.
Mantiene un historial de modificaciones del código.
Repositorios distribuidos
Branching y Merging eficinetes.
Integracion con GutHub, GitLab y Bitcucket.
Aplicación en el ciclo DevOps
En esta fase Git nos garantiza que cada cambio en el código y documentación sea
rastreable, reversible y auditable. Ademas de facilitar la integración continúa
cunado se combina con Jenkins o GitHub Actions.
3.- Etapa de construcción
En esta etapa se compila el código, se resuelven dependencias y se generan
artefactos ejecutables. El fin de esta etapa es garantizar que cada versión del
código pueda convertirse en un producto funcional reproducible.
Herramientas a utilizar:
-
Maven (Apache Sofware Fonundation)
o Maven es una herramienta de autamatizacion de construcción para
porycetos Java basada en archivos POM (Project Object Model).
o Cuenta con un manejo autmatico de dependencias.
o Generacion de reportes y documentación.
o Integracion con Jenkins y Nexus Repository.
-
Gradle (Gradle Inc.)
o Gradle es una herramienta de construcción flexible que soporta
múltiples lenguajes de programación como Java, C++, Python, etc.
o Lenguajes de configuración Groovy / Kotlin.
o Integracion nativa con Android Studio.
o Se utiliza en compilación de aplicaciones Android y sistemas
multiplataforma.
Aplicaion en el Ciclo DevOps
En esta etapa, Jenkins puede automatizar la ejecución de Maven o Gradle para
compilar el proyecto cada vez que se detecta un nuevo commit, asegurando que el
código se mantenga funcoinal en todo momento.
4.- Etapa de Testeo
Durante esta etapa se llevarán a cabo distintas pruebas que nos grantizen la
calidad del software antes de su despliegue, aquí es donde podemos detectar
errores funcionales o de rendimiento, con la intención de generar docmunetacion
útil para corregir errores.
En este punto del proyecto hacemos uso de Selenium (SE), que es un software
Open Source, SE es un framework de automatización de pruebas para
aplicaciones web.
Especificaciones de Selenium:
-
Soporta múltiples navegadores como Chrome, Firefox, Edge.
Permite scripts en java, Python, C#, Ruby, etc.
Integracion con Jenkins y frameworks de reporte como TestNG o Junit.
Crea pruebas funcionales de interfaces web.
Aplicaciones en el ciclo DevOps
Jenkins ejecuta pruebas automatizadas con Selenium tras cada compilación. Si
las pruebas fallan, el sistema notifica a los desarrolladores, previniendo código con
bugs llegue a producción y despliegue.
5.- Etapa de Despliegue e integración.
En el despliegue automatizados la entrega del software en entornos de prueba o
de producción, entornos controlados en los cuales se pueden presentar
condiciones idóneas para el trabajo o escenarios con distintas características.
Aquí es donde manejamos algo llamado integración Continua y la Entrega
Continua.
En este punto se hará uso de Jenkins el cual es un servidor de automatización e
integración continua (CI/CD).
Ejecuta tareas de compilación, prueba, análisis y despliegue automáticamente
cada vez que se modifica el código fuente.
Características de Jenkins:
-
Original mente fu desarrollado por Kohsuke Kawaguchi
Actualmente es mentenido por la comunidad Jenkins bajo l aLinux
Fundation.
Esta basado en Java, lo que lo hace ejecutable en Windows, Linux y
macOS.
Cuenta con mas de 1800 plugins disponibles (Git, Docker, Kubernetes,
SonarQube).
Integracion con GitHub, GitLab, Bitcucket, AWS, Azure.
Aplicación en el Ciclo DevOps
Con Jenkins con tamos con una integración continua, donde, se compila el código
automáticamente al detectar cambios en Git. Posterior tenemos la Entrega
continua, donde se despliega el software en entornos de prueba o producción.
Tambien se encarga de la coordinación de todo el pipeline complejos (Build –
tests- deploy)
Finalmente, Jenkins es capaz de generar reportes de calidad y cobertura de
código.
6.- Etapa de ejecución / Funcionamiento
Aquí es donde el software se ejecuta en un entorno estable, escalable y seguro.
DevOps busca que la infraestructura sea inmutable y automatizada, evitando
configuraciones manuales propensas a error.
Herramientas utilizadas:
-
Ansible (Red Hat): Ansible es una herramienta de automatización IT que
permite a los ingenieros definir y controlar la configuración de servidores,
redes y aplicaciones desde un punto central. Su filosofía es la de
“automatizar todo lo repetitivo”
o Basado en YAML (Playboos)
o Sin agentes (usa SSH)
o Integracion con Jenkins y AWSñUn dato de asible es que es usado por la NASA para automatizar mas
de 10,000 servidores.
-
Docker: es una plataforma de contenedores que permite empaquetar una
aplicación junto con todas sus dependencias (librerías, frameworks,
configuraciones) en un entorno aislado y reproducible llamado contenedor.
Esto garantiza que “funcione igual en cualquier máquina”, eliminando el
clásico problema de incompatibilidades entre entornos de desarrollo y
producción.
o Basado en imagens y contenedores.
o Compatible con Kubernetes
o Repositorios públicos/privados (Docker Hub)
-
Kubernetes: es una plataforma de orquestación de contenedores que
automatiza el despliegue, la gestión, el escalado y la recuperación de
aplicaciones distribuidas. Su función es coordinar múltiples contenedores
Docker ejecutándose en distintos servidores (nodos) como si fueran un solo
sistema lógico. Kubernetes decide dónde, cuándo y cómo se ejecuta cada
contenedor, optimizando recursos y asegurando alta disponibilidad. Si un
contenedor falla, Kubernetes automáticamente lo reinicia o lo reemplaza. Si
hay más demanda, crea nuevos contenedores automáticamente
(autoescalado).
o Arquitectura maestro-nodo
o Balanceo de carga, auto-scaling y selfhealing.
o Integracion con Docker, Jenkins y Prometheus.
7.- Etapa de Monitoreo.
En esta fase final nos centramos en el seguimiento del rendimiento y
disponibilidad del software e infraestructura. En esta etapa se recopilan datos
clave del sistema como; Uso de CPU, memoria, red, latencia, errores, trafico de
usuarios, logs, etc. Esto con el fin de detectar problemas en tiempo real,
anticiparse a fallo y mantener la experiencia del usuario sin interrupciones.
Lo anterior forma parte de un cincuito de retroalimentación continua, donde la
información obtenida se utiliza para mejorar el código, ajsutar configuraciones y
optimizar el rendimiento.
En este punto Nagios será la herramienta para utilizar, Nagios es un sistema de
monitoreo de infraestructura y aplicaciones que permite vigilar el estado de
servidores, servicios, dispositivos de red y aplicaciones empresariales en tiempo
real.
Su objetivo principal es detectar, registrar y notificar incidentes o anomalías antes
de que afecten al usuario final.
Se integra perfectamente en entornos DevOps para cerrar el ciclo de vida del
desarrollo, proporcionando métricas operativas que alimentan las fases de
planificación y mejora continua.
Especificaciones de Nagios:
-
Arquitectura compuesta por:
o Nagios Core: Motor principal de monitoreo, gratuito y open Source.
o Nagios XI: versión comercial con paneles avanzados, reportes y
soporte técnico.
o NRPE / NCPA: Agentes para recopilar métricas de servidores
remotos.
o Plugins: Mas de 5000 disponibles para monitorear prácticamente
cualquier servicio (HTTP, SMTP, MySQL, Docker, Kubernetes, etc)
o Protocolo compatibles con: ICMP, SNMP, SSH, API REST, HTTP,
TCP/UDP.
o Escalabilidad: Cuenta con la capacidad de monitorear un par de
servideroes hast amiles de nodos distribuidos globalmente.
Aplicación en el Ciclo DevOps
Nagios cierra el ciclo retroalimentando métricas al equipo. Si detecta una caída o
lentitud, se dispara una alerta que puede activar un playbook de Ansible o un
rollback automático en Jenkins.
Conclusión
Como pudimos ver a lo largo de este trabajo, el uso del ciclo DevOps no solo
agiliza los procesos técnicos, sino que transforma la organización en una cultura
enfocada en la colaboración y responsabilidad entre desarrollo y operaciones.
Tambien podemos afirmar que cada herramienta desde Git hasta Nagios, cumplen
una función especifica que al trabajar al unísono forman un flujo de trabajo
automatizado, continu y eficiente.