Rubén Gavilán Fernández Software Architect

DevOps: 6 fases clave para el proceso del desarrollo de software

DevOps es una de las palabras que cada vez nos encontramos más en el día a día del mundo de las tecnologías de la información.

Normalmente se asocia a la utilización de herramientas de integración continua, entrega continua o desarrollo ágil, los cuales, aun siendo elementos clave de esta metodología, no la definen completamente, ya que DevOps es un concepto mucho más amplio que se basa en la utilización de diferentes técnicas y, sobre todo, de un cambio en la forma de realizar las cosas, que ayudan a que los proyectos software se desarrollen con mayor calidad.

¿A qué nos referimos cuando hablamos de DevOps?

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.

Figura 1

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.

Figura 2

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, 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.

Conclusión

Adoptar herramientas de Integración Continua y automatización no es suficiente para asegurar la calidad del desarrollo del software, se necesita también un cambio de cultura o filosofía que permita adoptar y utilizar de forma correcta todas las herramientas y lo que es más importante, una comunicación constante entre todas las implicados en el desarrollo y puesta en producción de un aplicativo.

En Izertis hemos adoptado DevOps como un estilo de vida, ayudándonos a que el software se produzca con la calidad que exigen nuestros clientes.