DevOps es un conjunto de prácticas que automatizan los procesos entre los equipos de desarrollo de software y TI para que puedan compilar, probar y publicar software con mayor rapidez y fiabilidad. El concepto de DevOps se basa en establecer una cultura de colaboración entre equipos que, tradicionalmente, trabajaban en grupos aislados. Entre las ventajas que promete, se incluyen el aumento de la confianza y de la velocidad de publicación de software, la capacidad de solucionar incidencias críticas rápidamente y una mejor gestión del trabajo imprevisto.

Realmente se trata de un cambio de cultura que fomenta la colaboración entre áreas tradicionalmente contrapuestas, como son desarrollo (Dev) y operaciones (Ops), además de aseguramiento de la calidad (QA), permitiendo desarrollar software de forma más rápida, más eficiente y por consiguiente con mayor calidad y a un coste inferior.

5iLTphnjS410rn48A253xYn-asi6Vd9vi1bFPoi8Du1G0fwyWKQa3Tj9_m3LrSIq2hNblN7VVyxI6CZEIjmYdVhA-0bMbNWTSqFunQdxT5MV4YF7C5Xe4vBZGJ9UBpPwVjeie5Cs

Es importante entender que DevOps se trata de un ciclo iterativo compuesto por diferentes fases que buscan siempre el incremento de valor y la mejora continua.

tFwQuU9AolFqFFbxfBo7fB74OSZo07JGp2qcRQyCRYWAqYOCbSRnRueFzlXAOSh_DXmaub2XkLC_SAtBnjHZrSaWos-29zDmQtyiJCyeq7a5ZKTuZvr8SN_OSAPWVgOkg0vHbmOP

Fase 1: el plan

La primera fase del ciclo DevOps se basa en habilitar los mecanismos necesarios para dar la posibilidad a cualquier usuario de aportar de forma continua sus ideas y que estas puedan ser transformadas en requerimientos u objetivos, siendo estos priorizados e incluidos en próximas iteraciones en forma de historias de usuario.

Fase 2: build

¿Cuántas veces habremos oído a un desarrollador la afirmación “Funcionaba en mi máquina”? Normalmente esta afirmación siempre se escucha después de ver cómo falla el software cuando otro desarrollador coge esta funcionalidad para evolucionarla o peor aún, cuando se pasa a un entorno de integración el código que se suponía funcionando y este no cumple su función. DevOps ayuda a la construcción de software propiciando mecanismos que sean capaces de favorecer la creación de entornos de desarrollo repetibles, utilizando por ejemplo tecnologías como Docker.

Fase 3: integración continua

La integración continua (CI) es una técnica que tiene como objetivo detectar los posibles problemas que pueda tener el software de forma temprana, permitiendo así solucionarlos antes de que sea demasiado tarde o la solución implique un gran cambio en la aplicación o componente. Para esta labor es conveniente realizar de forma periódica (por ejemplo, varias veces al día) compilación del código (Jenkins), ejecución de tests unitarios, revisión de la calidad del código y detección de vulnerabilidades. Los resultados de las acciones anteriores se pueden exponer mediante herramientas apropiadas que permitan al desarrollador visualizarlas de una forma ágil.

Fase 4: despliegue

Uno de los grandes objetivos de DevOps es facilitar el paso de un software que se está desarrollando a una versión funcional. En una metodología tradicional, se requiere de una intervención manual desde la construcción de los artefactos hasta el paso de los mismos a producción. DevOps proporciona técnicas que permiten automatizar esta transición, pero también para la subsanación de posibles “catástrofes” que puedan ocurrir.

Programación de despliegues. Existen herramientas que permiten programar los despliegues, organizando las diferentes historias de usuario en versiones, lo que permite además disponer de una trazabilidad completa de qué y cuándo se despliega en cada entrega.

Compatibilidad de componentes. Aseguramiento de que todos los componentes son compatibles unos con los otros. Cuando hablamos de componentes no solo nos referimos a software, sino que también hay que poner en la ecuación a sistemas externos, hardware o requerimientos de arquitectura.

Transición entre entornos. Es muy importante mantener la integridad mientras avanza el software entre los diferentes entornos: desarrollo, testing, staging y producción. No es nada raro que el software sufra pequeños ajustes durante esta transición, por lo que es fundamental garantizar que se siga manteniendo la integridad de la versión.

Solución de desastres. Aunque las técnicas DevOps ayudan a evitar que llegue una versión inestable al entorno productivo, siempre existe una pequeña posibilidad de que se encuentre un fallo, el cual haga que sea necesario realizar un rollback al último estado estable. Dada la automatización de la que disponen las herramientas de despliegue, es posible recuperar de una forma muy rápida el correcto funcionamiento del aplicativo.

Fase 5: operación

Una vez una versión de software sea funcional, es fundamental realizar un seguimiento de la misma:

Monitorización del rendimiento de la aplicación y servidor. Para ello hay que realizar de forma automatizada la lectura de parámetros que permitan dar la voz de alarma en caso de fallo.

Seguimiento de problemas, incidentes y cambios. Una comunicación fluida entre las diferentes personas es fundamental para poder identificar y resolver los posibles problemas que se vayan encontrando.

Fase 6: feedback continuo

Es muy importante escuchar lo que todos los implicados tienen que decir acerca de los productos de software. La cultura DevOps fomenta la utilización de herramientas que facilitan exista un flujo continuo de comunicación. Medios como encuestas, herramientas de ticketing, chats o incluso redes sociales pueden ser utilizados para cumplir esta finalidad.

 

DevOps es algo complicado de definir porque, al igual que con Agile, se trata de una cultura, y por tanto no está circunscrita, ni prescribe actividades específicas. En SOLTEL hicimos una rápida integración de DevOps en nuestra cultura de empresa, ya que había una serie de buenas prácticas que ya aplicábamos anteriormente. En definitiva, en SOLTEL mejoramos la colaboración y la automatización no solo para construir software, sino también para entregarlo exitosamente a nuestros clientes y satisfacer sus expectativas de rendimiento, disponibilidad, seguridad y evolución.