FACULTAD UNIVERSIDAD NACIONAL DE COLOMBIA SEDE
DE MEDELLIN
MINAS INGENIERÍA DE SISTEMAS E INFORMÁTICA
DevOps: Un enfoque integral para el Desarrollo
de Software
PRACTICAS DE DESARROLLO DE SOFTWARE
Autor:
Samuel Esteban Reyes Nazate
Profesor Carlos Mario Zapata Jaramillo
13 de Noviembre del 2024 Medellín, Antioquia
Tabla de contenido
1. Introducción ............................................................................................................... 2
1.1. Objetivos ................................................................................................................. 2
1.2. Contexto: Problemas en el desarrollo de software tradicional ...................................... 2
1.3. ¿Qué es DevOps? ..................................................................................................... 3
2. Desarrollo ................................................................................................................... 4
2.1. Roles en DevOps ...................................................................................................... 4
2.2. Actividades en DevOps ............................................................................................. 6
2.4. Competencias en DevOps ........................................................................................ 11
2.5. Fases en DevOps .................................................................................................... 13
2.6. Recursos en DevOps ............................................................................................... 16
2.7. Prácticas en DevOps............................................................................................... 18
3. Conclusión ................................................................................................................ 25
4. Referencias ............................................................................................................... 26
Tabla de ilustraciones
Ilustración 1- Entrega Continua e Implementación continua - AWS .................................................. 7
Ilustración 2 DevOps VS DevSecOps................................................................................................ 13
Ilustración 3 – Ciclo de DevOps y sus fases ..................................................................................... 15
Ilustración 4 - Herramientas por Fases de desarrollo en DevOps ................................................... 18
Ilustración 5 - Pirámide DevOps Automatización de Pruebas ......................................................... 19
Ilustración 6 - Control de Versiones.................................................................................................. 22
Ilustración 7 - Monitoreo Continuo DevOps..................................................................................... 23
Ilustración 8 - Beneficios DevSecOps ............................................................................................... 24
1. Introducción
1.1. Objetivos
El presente reporte tiene como objetivo analizar y profundizar en la metodología
DevOps como un enfoque integral para mejorar la eficiencia en el desarrollo y
operación de software, considerando no solo los aspectos técnicos de programación
y operación, sino también el componente humano de colaboración entre los equipos
de trabajo. A través de este análisis, se busca comprender cómo DevOps aborda los
desafíos comunes en el contexto del desarrollo de software tradicional, creando una
sinergia entre los equipos de desarrollo (Dev) y operaciones (Ops) mediante
prácticas de integración continua, despliegue automatizado y monitoreo constante.
Además, este reporte detalla los elementos fundamentales de DevOps, incluyendo
los roles, actividades, productos de trabajo, competencias, fases, recursos y prácticas,
con el fin de proporcionar una comprensión completa de cómo DevOps optimiza los
tiempos de entrega de software y fomenta una colaboración continua entre los
equipos de trabajo mencionados. Este análisis permitirá reconocer los beneficios de
DevOps en el desarrollo de software y en el fortalecimiento de la cultura de
colaboración y trabajo en equipo dentro de las organizaciones.
1.2. Contexto: Problemas en el desarrollo de software tradicional
En los enfoques de desarrollo de software tradicionales, los equipos de Desarrollo y
Operaciones trabajan de manera independiente, es decir, con objetivos y prioridades
diferentes. Por un lado, los desarrolladores se enfocan en innovar, crear y mejorar el
producto, buscando optimizar e implementar nuevas funcionalidades, así como
realizar lanzamientos constantes de productos. Por otro lado, el equipo de
Operaciones tiene la responsabilidad de mantener el sistema estable, seguro y
disponible para los usuarios, lo cual los lleva a ser más conservadores respecto a los
cambios. Estas diferencias de enfoque crean una separación entre los dos equipos,
generando conflictos no solo en el desarrollo y entrega del producto, sino también
en la colaboración y trabajo en equipo. Esta separación levanta una barrera entre
ambos equipos, conocida en DevOps como el “muro de la confusión”.
Este muro genera problemas significativos tanto en la entrega y desarrollo de
productos de software como en el ambiente de trabajo. La falta de comunicación
efectiva y coordinación entre los equipos da como resultado retrasos en las entregas,
problemas de calidad y una cultura de culpa y conflictos internos, afectando la
eficiencia y productividad dentro de la organización.
En este contexto, DevOps surge como una solución que, en primera instancia,
promueve la colaboración continua y la integración entre estos dos equipos,
derribando el “muro de la confusión” y permitiendo que trabajen en conjunto para
desarrollar y entregar productos de software de calidad de manera ágil, eficiente y
confiable para los usuarios. Con prácticas como CI/CD, DevOps responde a los
inconvenientes que surgen en el desarrollo de software con métodos tradicionales.
DevOps no solo aborda los desafíos técnicos, sino que también responde a los
desafíos culturales, promoviendo una comunicación efectiva y fomentando el trabajo
en equipo entre ambos equipos.
1.3. ¿Qué es DevOps?
“DevOps es más que solo equipos de desarrollo y operaciones trabajando juntos.
Es más que herramientas y prácticas. DevOps es una mentalidad, un cambio
cultural, donde los equipos adoptan nuevas formas de trabajar. (Atlassian, s.f.)”.
Teniendo en cuenta el contexto descrito anteriormente decimos que DevOps es una
metodología de desarrollo de software que también involucra un cambio en la cultura
laboral de los equipos que integran el desarrollo de software, Desarrollo
(Development) y Operaciones (Operations), integrándolos para mejorar la
colaboración, agilidad y eficiencia de todo el ciclo de vida del software. Esta
metodología busca derrumbar ese muro de la confusión mencionado que está
cimentado por la desconexión y falta de comunicación que, en un contexto
tradicional,. separan a estos dos equipos, promoviendo el trabajo en equipo y la
colaboración continua en cada fase del proceso de desarrollo.
DevOps se basa en principios como CI/CD, integración continua (CI) y el despliegue
continuo (CD), que permite a los equipos integrados desarrollar y probar cambios de
manera rápida y segura. Estos principios permiten un desarrollo de software ágil que
reduce el tiempo entre la creación y lanzamiento a producción de nuevas
funcionalidades del producto, adaptando tanto el producto como a las organizaciones
a las necesidades de los usuarios, que son bastante volátiles, y a los cambios del
mercado. Además de ser una metodología ágil, DevOps también promueve el uso de
herramientas de automatización y monitoreo proactivo, permitiendo que los
problemas se detecten de manera rápida y eficiente, es decir en el menor tiempo
posible identificar el como el por que de la falla o problema optimizando el
rendimiento de todo el sistema en el ambiente de producción.
Uno de los ejes centrales de esta metodología es la capacidad de transformar la
cultura organizacional de la empresa, fomentando un ambiente laboral
completamente diferente al que se encuentra en los contextos tradicionales,
inculcando una mentalidad de trabajo en equipo, colaboración y responsabilidad
compartida, creando una sinergia entre los equipos que no solo mejora la calidad y
velocidad de entrega del software, sino que también reduce conflictos y promueve
una cultura de confianza dentro de la organización.
2. Desarrollo
2.1. Roles en DevOps
En DevOps, a diferencia de los enfoques tradicionales no están marcados a una
estructura rígida de desarrollo y operaciones, al contrario, cada rol trabaja de forma
integrada y colaborativa con el fin de lograr un trabajo ágil y automatizado en el
desarrollo, siempre trabajando de la mano con los otros roles. A continuación, se
detallan los roles clave:
1. Desarrollador de software
a. Descripción y responsabilidades
En DevOps los desarrolladores van más allá de solo codificar, o como su
nombre lo indica desarrollar software, en DevOps se encargan de escribir,
probar y mantener el código del software, esto les asigna
responsabilidades como la participación activa en la automatización de
pruebas y despliegues con el fin de asegurarse de que el código se integra
y despliega sin problemas en producción, esta participación se ve
reflejada en la creación de scripts para pruebas automatizadas y en la
configuración de pipelines de CI/CD.
b. Colaboración con otros roles
Según Accelerate de Nicole Forsgren, Jez Humble y Gene Kim, la
coordinación entre los equipos de desarrollo y operaciones en DevOps es
esencial para tener una eficiencia acorde a las necesidades de los usuarios
y de las demandas actuales, tal como se menciona, los desarrolladores no
solo trabajan técnicamente en el proceso de integración y despliegue si
no que tambien se conforma un habito cultural y laboral que rodean estos
procesos logrando una adaptación rápida a las demandas del negocio.
Esta colaboración entre los equipos, colaboración técnica y cultural,
permite generar agilismo en la empresa, un termino que involucra crear
sinergia entre los equipos, técnicamente, automatización de pruebas,
control de versiona miento y construcción de pipelines. (Nicole Forsgren
J. H.)
2. Ingeniero DevOps
a. Descripción y responsabilidades
“Un ingeniero de DevOps debe tener habilidades que abarquen tanto el
desarrollo como las operaciones, así como habilidades interpersonales
para ayudar a cerrar las divisiones entre los equipos aislados.”
(Atlassian, s.f.).
Este rol es fundamental para trabajar con DevOps, su función esencial es
ser el puente, es decir, el mediador entre los desarrolladores y los
administradores de sistemas con el fin de lograr un despliegue ágil y
seguro, técnicamente los ingenieros DevOps configuran la infraestructura
necesaria para que sea eficiente el proceso de desarrollo y se ejecute sin
impedimentos, gestionan las herramientas de CI/CD, orquestación de
contenedores y los ya mencionados scripts de automatización que son
clave en DevOps, facilitando tanto técnicamente como culturalmente la
construcción de un ambiente de colaboracion.
b. Colaboración con otros roles
Como se mencionó en la descripción del rol, la colaboracion con los otros
roles del ingeniero DevOps es esencial, es el puente que hace que los
desarrolladores y los administradores de sistemas trabajen de la mano y
colaborando mutuamente, logrando así un despliegue continuo sin
inconvenientes y ágil. The DevOps Handbook destaca cómo los
ingenieros DevOps facilitan un flujo de trabajo que conecta desarrollo,
QA, IT y seguridad, logrando así una integración continua que culmina
en un despliegue eficiente y seguro. Este enfoque del rol asegura que
tanto técnicamente como culturalmente se cree esa sinergia entre los
equipos técnicos permitiendo crear un contexto estable y seguro,
enfocando la importancia de construir sistemas agiles, productivos y
sostenibles mediante el uso de plataformas de autoservicio y herramientas
automatizadas. (Gene Kim, 2021).
3. Administrador de sistemas
a. Descripción y responsabilidades
Como papel fundamental de este rol tenemos que sigue siendo esencial
para la configuración y mantenimiento de los servidores y en general la
infraestructura en la que se ejecuta las aplicaciones. En DevOps, las
responsabilidades de este puesto se han transformado, centrándose en
acciones que incrementan la confiabilidad y escalabilidad del sistema,
administrando los ambientes de desarrollo y los de prueba y producción,
garantizando la disponibilidad, escalabilidad y seguridad de la
infraestructura. Las practicas de este rol se enfocan en los principios de
Site Reliability Engineering (SRE) para mejorar el rendimiento y
minimizar interrupciones. Como se señala en Site Reliability
Engineering: How Google Runs Production Systems, el fin de SRE es
enfocar las tareas de administración en torno al objetivo de lograr un
sistema ágil, eficiente y flexible en todo momento, destacando la
importancia de que este sistema debe ser lo mas seguro y fiable posible,
siendo los aspectos fundamentales para que cualquier sistema operativo
sea eficiente.
b. Colaboración con otros roles
Así como los otros roles se trabaja en conjunto en una cultura de
colaboracion con el fin de lograr un agilismo y despliegue continuo y
seguro de los productos de software, específicamente junto al ingeniero
DevOps trabajan en colaboracion para optimizar la infraestructura de los
sistemas, garantizando que esta este estable y soporte el trabajo
desarrollado por el equipo de desarrollo y cumpla con los estándares de
seguridad, tambien colaboran en la integración de herramientas de
monitoreo y resolución de incidentes que estén afectando la operación de
los servicios.
4. QA/Tester
a. Descripción y responsabilidades
Los QA y testers en DevOps no solo ejecutan pruebas, tambien se
encargan de automatizar este proceso, participan en el desarrollo y
mantenimiento de pruebas automatizadas que incluyen pruebas unitarias,
de integración y de regresión asegurando que cualquier producto sea de
alta calidad.
b. Colaboración con otros roles
Trabajan muy en conjunto con los desarrolladores para entender la lógica
del trabajo o código, así automatizar las pruebas entorno a ese flujo de
código para que sean correctas, además de trabajar en colaboracion con
los ingenieros DevOps para integrar estas pruebas a los pipelines de
CI/CD.
2.2. Actividades en DevOps
Las actividades en DevOps son el eje central para lograr su meta como método de
desarrollo enfocado en colaboracion y automatización, estas actividades permiten
que el ciclo de vida del desarrollo y despliegue sea eficiente pero sobre todo continuo
y estable, así como tambien permiten acelerar los tiempos de entrega e incrementar
la calidad y confiabilidad del producto. A continuación, se detallan las actividades
principales en el contexto DevOps:
1. Integración continua (CI)
a. Descripción
“La integración continua (CI) es la práctica de automatizar la
integración de los cambios de código de varios contribuidores en un
único proyecto de software. Es una de las principales prácticas
recomendadas de DevOps, que permite a los desarrolladores fusionar
con frecuencia los cambios de código en un repositorio central donde
luego se ejecutan las compilaciones y pruebas.” (Attlassian Integracion
Continua, s.f.).
La integración continua es una actividad central y primordial en DevOps
que se centra en estar desarrollando constantemente cambios en los
códigos, cambios que se someten a unas pruebas automatizadas con el fin
de descartar que estos cambios tengan errores o se generen conflictos con
otras partes del sistema. Esto permite identificar y solucionar problemas
de manera temprana, evitando que errores en el código generen conflictos
mayores en el entorno de producción del sistema.
b. Impacto en la eficiencia:
La integración continua fomenta el agilismo, reduciendo el tiempo de
revisión y prueba manual, otorgando un flujo de trabajo mas eficiente y
ágil. Según Atlassian, la CI favorece a que los equipos identifiquen
problemas de integración de manera temprana, mejorando la
colaboracion y reduciendo la fricción entre los desarrolladores y
administradores de sistemas.
2. Despliegue continuo (CD)
a. Descripción
“La entrega continua es un enfoque en el que los equipos lanzan
productos de calidad con frecuencia y de forma predecible desde el
repositorio de código fuente hasta la producción de forma
automatizada.” (Atlassian Entrega Continua, s.f.).
El despliegue, entrega continua o CD automatiza y agiliza el proceso de
entregar cambios en el código al entorno de producción de manera segura
y controlada. Cuando el código pasa todas las pruebas en el proceso de
CI, este se despliega automáticamente en producción o en entornos de
preproducción, esta automatización reduce enormemente el riesgo de
errores humanos y acelera el proceso de despliegue.
b. Impacto en la eficiencia:
Esta actividad permite que los cambios desarrollados lleguen de manera
segura, ágil y eficiente a los usuarios, adaptándose mejor a las
necesidades de estos y las del mercado. De acuerdo con AWS, la
implementación de CD permite que las empresas lancen actualizaciones
de manera rápida y constante, otorgando a los usuarios una experiencia
agradable y encaminada a superar las demandas actuales. (Amazon Web
Services, s.f.)
Ilustración 1- Entrega Continua e Implementación continua - AWS
3. Automatización de pruebas
a. Descripción
La automatización de pruebas es una practica clave en DevOps que
garantiza que cada desarrollo o cambio de software cumpla con los
estándares de calidad antes de su despliegue o lanzamiento. Estas pruebas
incluyen como ya se ha mencionado pruebas unitarias, de integración, de
regresión y pruebas funcionales, pruebas que, a comparacion de las
pruebas manuales reducen enormemente el tiempo y los recursos
necesarios.
b. Impacto en la eficiencia
Automatizar las pruebas da paso a que se identifiquen de manera acertada
y eficiente defectos que puedan tener los códigos desarrollados, evitando
fallas en el despliegue o lanzamiento de estos cambios, permitiendo que
los desarrolladores entreguen actualizaciones de manera continua sin
comprometer la calidad y confiabilidad del sistema. GitLab menciona
que la automatización de pruebas disminuye enormemente el riesgo de
errores en producción, creando un entorno de pruebas seguro y confiable
que permite que los desarrolladores se enfoquen en mejoras y cambios
continuos en lugar de correcciones constantes del código.
“la automatización de pruebas es más rápida y efectiva que las pruebas
manuales. Reduce la posibilidad de que se produzcan costosos errores
humanos y elimina las barreras de comunicación entre los miembros del
equipo, lo que ahorra tiempo y dinero.” (GitLab, s.f.).
4. Monitoreo y Retroalimentación Continua
a. Descripción
El monitoreo en DevOps es esencial para detectar, en tiempo real, el
estado de los ambientes de producción. Utilizando monitoreo proactivo,
los equipos DevOps observan métricas de cómo se está comportando el
sistema, esto incluye uso de recursos, tiempos de respuesta, errores
presentados, cantidad de errores y donde se están presentando estos. La
retroalimentación obtenida a través del monitoreo le permite al equipo
mejorar el sistema y los cambios que se estén realizando, planificando y
desarrollando los ajustes necesarios según lo obtenido en las métricas
mencionadas del software en el entorno de producción.
b. Impacto en la eficiencia:
El monitoreo continuo detecta y resuelve problemas antes de que se
afecten a los usuarios finales, permitiendo que los equipos ajusten el
software en función de las métricas detectadas, favoreciendo tanto al
sistema como a la experiencia del usuario.
2.3. Productos de trabajo (Work Products)
En DevOps, los productos de trabajo son resultados tangibles que contribuyen a que
los procesos de desarrollo y operaciones, antes aislados y separados, fluyan de
manera colaborativa, continua y eficiente. Estos productos van desde el código
fuente hasta su respectiva documentación que facilita la comunicación y
colaboracion entre los equipos. A continuación, se describen los productos de trabajo
clave en un proceso DevOps:
1. Código Fuente
a. Descripción
El código fuente es la parte central de cualquier proceso de desarrollo de
software. Este se almacena y gestiona mediante el control de versiones
como Git, permitiendo a los equipos de desarrollo realizar cambios de
manera estructurada y colaborativa. Aquí, el control de versiones es de
mucha importancia pues es esencial para verificar cambios, revertir
errores y como se menciona facilitar la colaboracion en equipos grandes
o distribuidos.
b. Importancia
Como se menciona el código versionado es la base de cualquier proyecto
de software, este código versionado permite realizar las prácticas de
integración continua, donde se fusionan los distintos códigos versionados
desarrollados y se prueban constantemente, Según Atlassian, el uso de
un sistema controlado de versiones mejora enormemente la eficiencia de
los equipos de desarrollo sobre todo al usar DevOps, ofreciendo
visibilidad y control sobre el código fuente.
“El control de versiones, también conocido como "control de código
fuente", es la práctica de rastrear y gestionar los cambios en el código
de software. Los sistemas de control de versiones son herramientas de
software que ayudan a los equipos de software a gestionar los cambios
en el código fuente a lo largo del tiempo. A medida que los entornos de
desarrollo se aceleran, los sistemas de control de versiones ayudan a los
equipos de software a trabajar de forma más rápida e inteligente. Son
especialmente útiles para los equipos de DevOps, ya que les ayudan a
reducir el tiempo de desarrollo y a aumentar las implementaciones
exitosas.” (Attlassian Control de Versiones, s.f.).
2. Pipelines de CI/CD
a. Descripción
Los pipelines de integración son pasos por seguir o flujos de trabajo
automatizados enfocados en la integración y despliegue continuo de
DevOps (CI/CD), estos permiten compilar, probar y desplegar los
códigos fuente de manera eficiente y segura. Cada pipeline incluye una
serie de etapas, como compilación, pruebas automatizadas y despliegues
en los diferentes entornos como prueba, preproducción y producción.
Estos pipelines minimizan los errores humanos, minimiza los riesgos y
asegura que los cambios del producto sean de la mejor calidad.
b. Importancia
Los pipelines de CI/CD son clave para que cada cambio o producto que
se desarrolle se haga de manera ágil y continua, pues estas aseguran que
cada desarrollo o cambio en los códigos pasen por las pruebas
automatizadas y se verifiquen correctamente antes de llegar al entorno de
producción. Como lo menciona AWS, los pipelines de CI/CD permiten
una entrega rápida y segura, reduciendo enormemente los tiempos de
lanzamiento de nuevos productos y la probabilidad de errores en
producción. (Amazon Web Services, s.f.).
3. Documentación
a. Descripción
La documentación en DevOps incluye manuales de usuario y guías de
instalación, pero también incluye documentación de procesos,
configuraciones y arquitectura del sistema. Esta documentación es
fundamental para que se del trabajo colaborativo que se busca en DevOps
ya que ayuda a los equipos otorgando información importante de como
operar, configurar y resolver problemas del sistema.
b. Importancia
Una documentación especifica y accesible para todo el equipo ayuda a
que los equipos puedan entender y configurar el sistema de manera ágil.
En DevOps, donde el cambio es un evento constante, la documentación
asegura que las mejores prácticas y procesos estén claros para todo el
equipo, promoviendo así la colaboración ente ellos y reduciendo el
tiempo de adaptación para posibles nuevos integrantes.
4. Métricas y Reportes de Monitoreo
a. Descripción
Los reportes y métricas de monitoreo son productos de trabajo clave que
permiten observar el estado del sistema en tiempo real, así como tener un
histórico de como se ha comportado el sistema durante un tiempo
establecido para almacenar. Estos reportes incluyen métricas como se
había mencionado sobre la disponibilidad del sistema, tiempos de
respuesta, tasa de errores, numero de errores, donde se encuentran esos
errores, uso de recursos, entre otras que pueden ser de utilidad.
b. Importancia
Las métricas y el monitoreo son esenciales para detectar problemas y
diagnosticarlos de manera proactiva, es decir, antes de que afecten a los
usuarios finales.
2.4. Competencias en DevOps
Para que DevOps funcione de manera correcta, es esencial que los equipos cumplan
con las competencias necesarias, que tal como se desarrolla este método, muchas van
más allá de habilidades técnicas, por ejemplo, es esencial tener habilidades blandas
como trabajo en equipo, colaboracion, adaptabilidad, comunicación entre otras. Las
competencias en DevOps abarcan diversas áreas, desde conocimientos de
automatización y orquestación hasta el manejo de la infraestructura como código. A
continuación se presentan las competencias fundamentales en un equipo de DevOps
eficiente:
1. Habilidades en automatización y CI/CD
a. Descripción
Las habilidades de automatización son clave en DevOps, pues estas
permiten que las tareas repetitivas que son susceptibles a errores humanos
realizadas manualmente se hagan de manera mas eficiente y segura. La
capacidad para configurar y gestionar los pipelines de CI/CD da paso a
que la integración, las pruebas y el despliegue del código se haga de
manera automatizada y continua.
b. Relevancia en DevOps
GitLab dice que estas habilidades en automatización son clave para
optimizar el flujo de trabajo, disminuir errores causados por
procedimientos manuales y asegurar que los despliegues sean agiles y
confiables. La automatización de procesos tambien permite que los
desarrolladores se enfoquen en los cambios y mejoramiento del productor
en lugar de realizar tareas operativas repetitivas o reacondicionamiento
del código fuente por errores presentados.
2. Conocimiento de infraestructura como código (IaC)
a. Descripción
La IaC permite gestionar y suministrar la infraestructura del sistema a
través de archivos de configuración en lugar de configuraciones manuales
con tendencias a errores. Este conocimiento incluye el uso de
herramientas como Terraform, Ansible o CloudFormation cuando son
despliegues o trabajos en la nube, herramientas que permiten gestionar la
infraestructura de manera replicable y auditable.
b. Relevancia en DevOps
El uso de la IaC permite a los equipos DevOps gestionar la infraestructura
de manera correcta, eficiente y estandarizada, logrando así que cualquier
cambio en el sistema pueda ser versionado, testeado y desplegado como
si fuera código. De acuerdo con HashiCorp, la IaC logra consistencia en
los entornos y facilita la colaboración, ya que todos los miembros pueden
observar y modificar la configuración de infraestructura.
“La infraestructura como código es un patrón principal para administrar
la infraestructura con archivos de configuración en lugar de a través de
una interfaz gráfica de usuario o mediante secuencias de scripts de línea
de comandos manuales. Le permite crear, cambiar y administrar su
infraestructura de forma segura, coherente, rastreable y repetible
mediante la definición de configuraciones de recursos que puede
versionar (en un sistema de control de versiones como GitHub), reutilizar
y compartir.” (HashiCorp, s.f.)
3. Competencias en monitoreo y gestión de rendimiento
a. Descripción
La capacidad para implementar y utilizar herramientas de monitoreo y
gestión del rendimiento es esencial en DevOps. El conocimiento de
herramientas como Prometheus, Grafana y ELK Stack entre otras como
Power BI, permite observar y analizar el estado del sistema en tiempo
real, así como tambien monitorear el rendimiento de las aplicaciones, si
tienen errores, como se están comportando, cuantos recursos se están
utilizando, entre otras.
b. Relevancia en DevOps
El monitoreo continuo como ya se menciono asegura y permite al equipo
de DevOps detectar y resolver problemas antes de que afecten al usuario
final.
4. Habilidades de colaboracion y comunicación
a. Descripción
DevOps se basa en la colaboracion que debe existir entre los equipos de
desarrollo y operaciones, para lograr esto, las habilidades de
comunicación efectiva y la capacidad de trabajar en equipo son esenciales
para implementar DevOps, ya que estas permiten que todos los miembros
del equipo se alineen en los mismos objetivos y trabajen de manera
coordinada.
b. Relevancia en DevOps
Aquí Atlassian nos plantea que la colaboracion es uno de los pilares
fundamentales en DevOps, una buena comunicación reduce los
conflictos, destacando así que es fundamental para mejorar el flujo de
trabajo, el agilismo y la rapidez de resolución de problemas. (Atlassian,
s.f.).
5. Conocimientos en seguridad (DevSecOps)
a. Descripción
El tema de la seguridad es una responsabilidad que se comparte entre todo
el equipo DevOps pues es un tema que involucra todas las fases de
desarrollo. Las competencias en seguridad, o en el contexto de DevOps,
DevSecOps, permiten que los desarrolladores y administradores de
sistemas incorporen prácticas de seguridad en cada etapa del ciclo de vida
de desarrollo. Esto incluye crear políticas de seguridad automatizadas,
escaneo de vulnerabilidades y auditoria de la infraestructura.
b. Relevancia en DevOps
La seguridad en DevOps permite que el desarrollo de software sea
eficiente y ágil pero sobre todo sea seguro y fiable. Tal como lo menciona
Snyk, implementar practicas de DevSecOps permite que el equipo
detecte debilidades en el sistema de manera rápida, mejorando la
seguridad del producto final sin comprometer el agilismo que se quiere
conseguir.
“La definición del modelo DevSecOps, a un alto nivel de funcionamiento,
es integrar los objetivos de seguridad lo antes posible en el ciclo de vida
del desarrollo de software. Si bien la seguridad es "responsabilidad de
todos", los equipos de DevOps se encuentran en una posición única en la
intersección del desarrollo y las operaciones, capacitados para aplicar
la seguridad tanto en amplitud como en profundidad.” (Snyk
DevSecOps, s.f.).
Ilustración 2 DevOps VS DevSecOps
2.5. Fases en DevOps
El ciclo de DevOps este compuesto de 8 fases clave, cada una diseñada para permitir
un flujo de trabajo fácil, continuo y adaptable. A continuación, se describen estas
fases con sus contribuciones al proceso:
1. Plan
a. Descripción
La fase de planificación se utiliza para estableces cuales son los requisitos
y objetivos del proyecto. Se definen las tareas a realizar, se les dan unas
prioridades y se divide el trabajo en cantidades manejables para el equipo.
Esto permite que todos los miembros comprendan cuales son las metas y
trabajen en conjunto para lograr un objetivo común, facilitando la
colaboración y agilidad del equipo DevOps.
2. Code
a. Descripción
En esta fase, los desarrolladores crean el código fuente para nuevas
funcionalidades, nuevos proyectos o mejoras en proyectos ya existentes.
El uso del versiona miento que se ha mencionado o sistemas de control
de versiones para código, como Git, permite que los desarrolladores
trabajen en paralelo en sus tareas asignadas, gestionen los cambios
necesarios y mantengan el código limpio y eficiente para una integración
continua necesaria en DevOps
3. Build
a. Descripción
La fase de construcción da paso a convertir en un paquete ejecutable el
código fuente, durante esta etapa, el código se copila, resolviendo
dependencias y verificando que esté listo para un despliegue correcto.
Herramientas como Jenkins automatizan este proceso, permitiendo que
el ciclo sea continuo y confiable.
4. Test
a. Descripción
La fase de pruebas como su nombre lo indica asegura que el software
cumpla con esas pruebas que validan que este cumple con los estándares
de calidad establecidos. Se realizan pruebas unitarias, de integración,
funcionales y de regresión para verificar que todo este correcto y se
garantice la estabilidad y funcionalidad del software, recordemos que esta
fase se debe realizar entorno a la automatización de pruebas clave y
necesaria para DevOps, permitiendo una rápida detección y corrección
de errores en el software antes de que llegue al ambiente de producción.
5. Release
a. Descripción
En la fase de lanzamiento, el software pasa por la ultima validación antes
de ser configurado para su despliegue, esta última validación se encarga
de verificar que el software cumpla con todos los requisitos y esté listo
para entrar a producción, logrando un despliegue seguro, controlado y
estale.
6. Deploy
a. Descripción
En esta fase, el software pasa al entorno de producción o a entornos de
staging como preproducción para pruebas adicionales. El despliegue
tambien se realiza de manera automatizada minimizando los errores
humanos, logrando lanzamientos seguros y continuos que mantienen la
fiabilidad del sistema.
7. Operate
a. Descripción
La fase de operación está dedicada en mantener ese despliegue en
funcionamiento de manera estable, eficiente y segura en el entorno de
producción. Incluye administración de la infraestructura, soporte y
resolución de problemas capturados con el monitoreo continuo en tiempo
real, permitiendo que los usuarios tengan una experiencia agradable y
continua con el producto.
8. Monitor
a. Descripción
La fase de monitoreo está enfocada en observar el rendimiento y
disponibilidad del software en producción. A través de herramientas que
permiten el monitoreo, los equipos detectan problemas en tiempo real y
recopilan métricas importantes sobre cómo se está comportando el
sistema, analizando en tiempo real y tambien guardando un histórico
sobre cómo se ha comportado el sistema, observando tendencias patrones
que permitan una rápida respuesta ante posibles problemas, asegurando
la estabilidad continua del sistema.
Ilustración 3 – Ciclo de DevOps y sus fases
2.6. Recursos en DevOps
La implementación de DevOps se apoya en distintas herramientas especializadas en
este método que permiten las actividades claves de DevOps, es decir, la
automatización, la colaboracion continua y la eficiencia en los procesos. A
continuación, se presentan los recursos clave organizados por sus funciones
específicas:
1. Herramientas de CI/CD
a. Descripción
Estas herramientas permiten automatizar todo lo que involucra la
integración y despliegue continuo de código, asegurando que ellos
cambios se prueben y desplieguen de manera continua y segura
b. Ejemplos
Jenkins, GitLab CI, GitHub Actions, CircleCI y Bamboo (Atlassian).
Jenkins destaca por su flexibilidad y gran cantidad de plugins que
permiten personalizar los pipelines de CI/CD.
2. Herramientas de Control de Versiones
a. Descripción
Permiten el versiona miento del código, gestionando el código fuente,
observando cambios y colaborar paralela y eficientemente entre
desarrolladores.
b. Ejemplos
Git es el sistema de control de versiones distribuido más popular, y se
encuentra en plataformas como GitHub, GitLab y Bitbucket. Facilita la
colaboración al gestionar cambios en el código fuente y rastrear cada
modificación de manera organizada.
3. Herramientas de Contenedorización
a. Descripción
Facilitan el empaquetado de aplicaciones junto con sus dependencias,
garantizando su ejecución en diferentes entornos sin conflictos
b. Ejemplos
Docker es el estándar de contenedorización, permitiendo a los equipos
empaquetar aplicaciones y sus dependencias en contenedores ligeros y
portátiles. Podman es una alternativa útil, especialmente en entornos sin
un daemon centralizado.
4. Herramientas de Orquestación de Contenedores
a. Descripción
Gestionan el despliegue y la escalabilidad de contenedores a gran escala,
permitiendo la resiliencia y el escalado automático.
b. Ejemplos
Kubernetes es la plataforma líder en orquestación de contenedores,
proporcionando escalabilidad y administración automatizada de
contenedores en producción. OpenShift (basado en Kubernetes) y Docker
Swarm también son opciones populares para administrar grandes
cantidades de contenedores.
5. Herramientas de Infraestructura como Código (IaC)
a. Descripción
Permiten definir y gestionar la infraestructura mediante archivos de
configuración, lo que facilita la replicabilidad y la estandarización.
b. Ejemplos
Terraform y Ansible son herramientas populares para gestionar la
infraestructura como código. Terraform permite definir infraestructura en
múltiples nubes, mientras que Ansible facilita la automatización de
configuraciones y despliegues de servidores. AWS CloudFormation es
una herramienta específica para gestionar la infraestructura en AWS.
6. Herramientas de Monitoreo y Observabilidad
a. Descripción
Ayudan a supervisar la salud y el rendimiento de los sistemas en
producción, y a recopilar métricas clave para la mejora continua.
b. Ejemplos
Prometheus y Grafana se utilizan comúnmente para el monitoreo y la
visualización de métricas en tiempo real, mientras que ELK Stack
(Elasticsearch, Logstash y Kibana) permite el análisis y registro de logs.
Herramientas como Datadog y New Relic también son populares para
monitorear aplicaciones en la nube, proporcionando una observabilidad
completa del sistema.
7. Herramientas de Seguridad (DevSecOps)
a. Descripción
Aseguran la integración de prácticas de seguridad en todas las fases del
ciclo de vida de desarrollo y despliegue, lo que permite detectar y
remediar vulnerabilidades de manera temprana.
b. Ejemplos
Snyk y SonarQube detectan vulnerabilidades en dependencias y analizan
la calidad del código. Aqua Security y Twistlock aseguran los entornos
de contenedores, gestionando permisos y detectando amenazas.
HashiCorp Vault permite gestionar credenciales y secretos de manera
segura en entornos de producción.
8. Herramientas de Gestión de la Configuración y Despliegue en la Nube
a. Descripción
Facilitan la implementación, escalado y administración de infraestructura
en la nube, permitiendo que los equipos DevOps gestionen recursos con
agilidad.
b. Ejemplos
AWS, Microsoft Azure y Google Cloud Platform (GCP) son proveedores
de nube ampliamente utilizados, que ofrecen servicios gestionados desde
almacenamiento y cómputo hasta redes y bases de datos. Pulumi es una
alternativa de IaC que admite múltiples lenguajes de programación para
gestionar infraestructura en la nube.
Ilustración 4 - Herramientas por Fases de desarrollo en DevOps
2.7. Prácticas en DevOps
Las prácticas en DevOps representan procesos, estrategias y métodos clave que
ayudan a los equipos a implementar DevOps de manera eficiente. Estas practicas
abarcan tambien enfoques culturales que ayudan a crear una sinergia entre los
equipos de desarrollo y operaciones, promoviendo el trabajo en equipo, la
colaboración, y la mejora continua. A continuación, se presentan algunas de las
practicas fundamentales en DevOps:
1. Automatización de pruebas
a. Descripción
La automatización de pruebas garantiza que cada versión del software sea
probada de forma rápida y eficaz. Incluye pruebas unitarias, de
integración, de regresión y funcionales, lo que permite identificar errores
antes de que lleguen a producción.
“La práctica de automatización de pruebas consiste en revisar y validar
automáticamente un producto de software (por ejemplo, una aplicación
web) para asegurarse de que cumple con los estándares de calidad
predefinidos para el estilo de código, la funcionalidad (lógica
empresarial) y la experiencia del usuario.
Las pruebas suelen constar de las siguientes etapas:
Pruebas unitarias: verifican unidades individuales de código, como una
función, para comprobar que funcionan según lo esperado.
Pruebas de integración: garantizan que varios fragmentos de código
puedan funcionar juntos sin consecuencias imprevistas.
Pruebas de extremo a extremo: verifican que la aplicación cumple con
las expectativas del usuario.
Pruebas exploratorias: adoptan un enfoque no estructurado para revisar
numerosas áreas de una aplicación desde la perspectiva del usuario con
el fin de descubrir problemas funcionales o visuales.”
(Atlassian Automatizacion De Pruebas, s.f.).
Ilustración 5 - Pirámide DevOps Automatización de Pruebas
b. Importancia
Automatizar las pruebas minimiza el riesgo de errores en el software y
acelera los lanzamientos, permitiendo que los equipos implementen
cambios de manera continua y confiable.
2. Integración Continua (CI)
a. Descripción
La integración continua es la práctica de fusionar el código de los
desarrolladores en un repositorio común varias veces al día. Cada cambio
se prueba automáticamente para detectar y corregir errores
tempranamente.
b. Importancia
CI asegura que el código esté siempre listo para ser desplegado y permite
que los equipos detecten y solucionen problemas antes de que se
conviertan en bloqueos mayores.
“La CI hace que el desarrollo de software sea más fácil, rápido y menos
arriesgado para los desarrolladores. Al automatizar las compilaciones y
las pruebas, los desarrolladores pueden realizar cambios más pequeños
y realizar las confirmaciones con confianza. Los desarrolladores de
software reciben comentarios sobre su código antes, lo que aumenta el
ritmo general de la innovación.” (GitLab CI, s.f.).
3. Despliegue Continuo (CD)
a. Descripción
El despliegue continuo se refiere a la práctica de automatizar el proceso
de despliegue del software en producción después de que haya pasado
todas las pruebas de calidad.
b. Importancia
Esta práctica reduce el tiempo entre la creación de nuevas
funcionalidades y su disponibilidad para los usuarios, permitiendo
lanzamientos rápidos y continuos. Según AWS el despliegue o entrega
continuos nos da los siguientes beneficios:
“Automatice el proceso de publicación de software.
La entrega continua permite al equipo crear, probar y preparar
automáticamente los cambios en el código para su envío a producción,
con lo que se mejora la eficacia y rapidez de la entrega de sofware.
Mejore la productividad de desarrollo.
Estas prácticas mejoran la productividad del equipo al liberar a los
desarrolladores de las tareas manuales y fomentar comportamientos que
ayudan a reducir la cantidad de errores y bugs enviados a los clientes.
Encuentre y arregle los errores con mayor rapidez.
Su equipo puede descubrir y arreglar los errores antes de que se
conviertan en problemas más graves gracias a las pruebas más
frecuentes y exhaustivas. La entrega continua le permite realizar tipos de
pruebas adicionales en el código con facilidad, ya que todo el proceso se
ha automatizado.
Entregue las actualizaciones con mayor rapidez.
La entrega continua le permite a su equipo entregar actualizaciones a los
clientes con mayor rapidez y frecuencia. Cuando se la entrega continua
se implementa de manera adecuada, dispondrá siempre de un artefacto
listo para su implementación que se ha sometido a un proceso de pruebas
estandarizado.” (Amazon Web Services, s.f.)
4. Versionamiento y Control de Cambios
a. Descripción
El control de versiones permite a los equipos rastrear y gestionar cada
cambio en el código de manera organizada, asegurando que los
desarrolladores trabajen en versiones actualizadas y coordinadas.
b. Importancia
“Para casi todos los proyectos de software, el código fuente es como las
joyas de la corona, un activo valioso cuyo valor debe protegerse. Para la
mayoría de los equipos de software, el código fuente es un repositorio del
conocimiento de valor incalculable y de la comprensión sobre el dominio
del problema que los desarrolladores han recopilado y perfeccionado
con un esfuerzo cuidadoso. El control de versiones protege el código
fuente tanto de las catástrofes como del deterioro casual de los errores
humanos y las consecuencias accidentales.” (Attlassian Control de
Versiones, s.f.).
A parte que protege el código como lo menciona Atlassian, el
versionamiento o control de versiones facilita la colaboracion entre los
desarrolladores que trabajan en paralelo, permitiendo revertir cambios en
casos de problemas, garantizando una mayor estabilidad del código.
Ilustración 6 - Control de Versiones
5. Infraestructura como código (IaC)
a. Descripción
IaC permite gestionar y configurar la infraestructura mediante archivos
de configuración en lugar de configuraciones manuales. Esto facilita la
replicabilidad y consistencia en los entornos de desarrollo, prueba y
producción.
b. Importancia
La gestión de infraestructura como código garantiza entornos
consistentes y fácilmente reproducibles, lo que reduce errores de
configuración y facilita la escalabilidad.
6. Monitoreo Proactivo
a. Descripción
El monitoreo proactivo permite que los equipos puedan detectar y
resolver problemas antes de que estos afecten a los usuarios finales, este
monitoreo no solo se da en entorno de producción si no que se debe
realizar un monitoreo durante todas las etapas del proceso de desarrollo
de software, teniendo un control no solo de los productos ya desplegados
si no que tambien de los productos en planeación, desarrollo o en
cualquier otra fase de DevOps.
“La supervisión de DevOps implica monitorizar todo el proceso de
desarrollo, desde la planificación, el desarrollo, la integración y las
pruebas a la implementación y las operaciones. Supone una visión
completa y en tiempo real del estado de las aplicaciones, los servicios y
la infraestructura en el entorno de producción. Las funciones como la
transmisión en tiempo real, la reproducción histórica y las
visualizaciones son componentes esenciales de la supervisión de
aplicaciones y servicios.” (Atlassian Monitoreo DevOps, s.f.)
b. Importancia
El monitoreo continuo ayuda a los equipos a mantener la estabilidad y el
rendimiento del sistema, ofreciendo una mejor experiencia al usuario y
facilitando una respuesta rápida ante incidentes.
Ilustración 7 - Monitoreo Continuo DevOps
7. Prácticas de seguridad integrada (DevSecOps)
a. Descripción
DevSecOps integra la seguridad en cada fase del ciclo de vida de
desarrollo de software en DevOps, permitiendo que el software sea fiable
y seguro tanto en etapas de desarrollo como en su fase de despliegue y
monitoreo
b. Importancia
La seguridad integrada permite que las debilidades sean detectadas de
manera rápida y eficiente, esto no solo mejora la seguridad el código, da
paso a que DevOps cumpla sus objetivos de agilismo y entrega continua,
mejorando la integración y teniendo una mayor calidad de producto de
software. Según Snyk una de las empresas enfocadas a la ciberseguridad,
el modelo DevSecOps nos entrega estos 6 beneficios principales:
“Entrega más rápida: La velocidad de entrega de software mejora
cuando la seguridad se integra en la canalización. Los errores se
identifican y corrigen antes de la implementación, lo que permite a los
desarrolladores centrarse en las funciones de envío.
Postura de seguridad mejorada: La seguridad es una característica
desde la fase de diseño en adelante. Un modelo de responsabilidad
compartida garantiza que la seguridad esté estrechamente integrada,
desde la creación, la implementación hasta la protección de las cargas
de trabajo de producción.
Reducción de costes: La identificación de vulnerabilidades y errores
antes de la implementación da como resultado una reducción
exponencial del riesgo y el costo operativo.
Mejorar el valor de DevOps: La integración de las prácticas de
seguridad en DevOps crea la mejora de la postura de seguridad general
como una cultura de responsabilidad compartida. El informe
Snyk/Puppet 2020 DevSecOps Insights encontró que este es el caso en
las organizaciones DevSecOps maduras.
Mejorar la integración y el ritmo de la seguridad: El costo y el tiempo
de entrega segura de software se reducen al eliminar la necesidad de
adaptar los controles de seguridad después del desarrollo.
Permitiendo un mayor éxito empresarial general: Una mayor confianza
en la seguridad del software desarrollado y la adopción de nuevas
tecnologías permiten un mayor crecimiento de los ingresos y una mayor
oferta empresarial.” (Snyk DevSecOps, s.f.).
Ilustración 8 - Beneficios DevSecOps
8. Retroalimentación continua y Mejora
a. Descripción
La retroalimentación constante entre equipos de desarrollo, operaciones
y usuarios permite una mejora continua en el proceso y en el producto.
b. Importancia
La retroalimentación permite ajustar y mejorar el software y los procesos
de DevOps en función de los resultados reales y las necesidades de los
usuarios, garantizando así un ciclo de desarrollo adaptable y eficiente
3. Conclusión
DevOps se ha convertido en un método muy utilizado y relativamente moderno para
desarrollo de software, su misión principal es lograr derribar ese muro de la confusión
generado por los métodos tradicionales de desarrollo de software, promoviendo la
colaboracion continua, el agilismo mediante la automatización ya sea de pruebas o de
despliegue, minimizando los errores humanos y mejorando la calidad del software en
cada uno de los ciclos de desarrollo. Al implementar DevOps de manera adecuada, los
equipos de desarrollo y operaciones rompen ese muro de la confusión, colaborando entre
ellos, dándose una comunicación efectiva que facilita el flujo del trabajo, mejorando la
eficiencia con respecto a los tiempos de entrega, lo cual resulta en un producto de mayor
calidad y con lanzamientos mas frecuentes, seguros y rápidos.
Sin embargo, aunque DevOps ha tenido una buena aceptación como método de desarrollo
de software, no esta libre de desafíos, entre los principales encontramos que hay una
notoria resistencia al cambio cultural dentro de las empresas, dificultad para integrar
herramientas de automatización y la complejidad de configurar infraestructuras
consistentes. Superar estos desafíos es clave para lograr fomentar DevOps, pero
superarlos no es un proceso que se dé de un día para otro, deben crearse estrategias
graduales que primero antes que todo fomenten esa cultura colaborativa, de trabajo en
equipo y comunicación efectiva, hablando en términos técnicos, la capacitación de los
equipos en las herramientas y practicas necesarias para trabajar con DevOps es
supremamente necesario, esto incluye capacitación en prácticas de automatización,
herramientas de CI/CD, herramientas de monitoreo proactivo que lleven hacia un camino
de agilismo, seguridad, transparencia y eficiencia operativa. Generando una estrategia
clara, las empresas pueden sacarle el máximo provecho a DevOps, optimizando y
mejorando los procesos de desarrollo, ofreciendo soluciones innovadoras y de alta
calidad a los usuarios.
4. Referencias
Amazon Web Services. (s.f.). Obtenido de https://aws.amazon.com/es/devops/continuous-
delivery/
Atlassian. (s.f.). Atlassian. Obtenido de https://www.atlassian.com/devops/what-is-devops
Atlassian Automatizacion De Pruebas. (s.f.). Obtenido de
https://www.atlassian.com/es/devops/devops-tools/test-automation
Atlassian Entrega Continua. (s.f.). Obtenido de https://www.atlassian.com/continuous-
delivery
Atlassian Monitoreo DevOps. (s.f.). Obtenido de
https://www.atlassian.com/es/devops/devops-tools/devops-monitoring
Attlassian Control de Versiones. (s.f.). Obtenido de
https://www.atlassian.com/es/git/tutorials/what-is-version-control
Attlassian Integracion Continua. (s.f.). Obtenido de
https://www.atlassian.com/es/continuous-delivery/continuous-integration
Gene Kim, J. H. (2021). The DevOps Handbook: How to Create World-Class Agility, Reliability,
& Security in Technology Organizations. IT Revolution Press.
GitLab. (s.f.). Obtenido de https://about.gitlab.com/es/topics/devops/devops-test-
automation/
GitLab CI. (s.f.). Obtenido de https://about.gitlab.com/es/topics/ci-cd/benefits-continuous-
integration/#what-are-the-benefits-of-continuous-integration-for-dev-ops-teams
HashiCorp. (s.f.). Obtenido de https://www.hashicorp.com/resources/what-is-infrastructure-
as-code
Nicole Forsgren, J. H. (s.f.). Accelerate: The Science of Lean Software and DevOps.
Snyk DevSecOps. (s.f.). Obtenido de https://snyk.io/series/devsecops/