Si estás dentro del sector IT, independientemente de tu rol, has oído hablar de DevOps. Es la palabra de moda (como lo fue Agile en su momento) y todas las organizaciones quieren abrazar este nuevo concepto. Sin embargo… ¿Estamos preparados? ¿Realmente sabemos lo que es DevOps? ¿Sabemos cómo obtener los beneficios que nos brinda DevOps? En el post de hoy daremos un repaso superficial a este ya no tan nuevo concepto y qué prácticas DevOps podemos (o debemos) llevar a cabo para remar en esta dirección.
Qué vas as ver en esta entrada
DevOps, más allá de una cultura
Recordemos brevemente qué entendemos por DevOps. Si nos vamos a la parte semántica, la palabra DevOps es una combinación de dos palabras en ingles: Dev (development, desarrollo) y Ops (operations, operaciones) haciendo referencia a romper los clásicos silos en los que los equipos de desarrollo y los equipos de operaciones (donde normalmente recaen las tareas de integración, despliegue, mantenimiento, etc) formando un único enfoque: DevOps. Un nuevo enfoque donde se unen personas, tecnología y procesos con un único objetivo: ofrecer valor a los usuarios o clientes constantemente.
¿Es un nuevo equipo entonces? No, es un cambio de cultura, de hacer las cosas. Hay que cambiar el sistema para que esto suceda. Se busca la colaboración de equipos clásicamente separados (desarrollo y operaciones) donde no existan barreras entre ellos. Para ello, hay que abrazar esta nueva cultura de entrega frecuente al usuario mediante la colaboración y uso de las prácticas y herramientas DevOps tales como la integración continua, entrega continua y las que veremos a continuación.
Prácticas DevOps
En el post de hoy rescataremos algunas de las más extendidas y compartidas prácticas DevOps en el sector IT. Por supuesto, cualquier nueva práctica que nos ayude a mejorar y aportar más valor al usuario, puede entrar bajo este paraguas:
Integración continua
Digamos que yo, como desarrollador, he terminado el código de una funcionalidad. Y a la par, el resto de personas de mi equipo, también han ido desarrollando, con lo que nuevo código se ha generado. ¿Cómo hacemos para que, sin romper nada, esto llegue al usuario? ¿Esperamos a que estén listos los desarrollos en vuelo para lanzarlo? Según DevOps, aquí es donde entra la integración continua. Hay multitud de herramientas que nos permiten hoy en día integrar cambios (a poder ser pequeños) garantizando niveles óptimos de seguridad y calidad, de tal manera que, en nuestro ejemplo, conforme yo termine mi código, podría ser integrado directamente sin causar mayor problema.
Otros de los objetivos de la integración continua es la pronta detección de errores (Lean ya nos hablaba de esto mediante la técnica de Poka-Yoke). ¿Y cómo conseguimos esto? Cuando hablamos de integración hablamos no solo de la compilación si no también la ejecución de pruebas automatizadas de todo el proyecto o software. Por lo tanto, es importante mantener estas baterías de pruebas consistentes y actualizadas y, a poder ser, en unos altos niveles de cobertura.
Entrega continua
DevOps aboga por entregar cuanto antes mejor. Y pequeños trozos de código. Siempre que estemos alineados con la estrategia empresarial, se habilitará la posibilidad de entregar y desplegar en un entorno productivo (o no) de forma automatizada. Sin tener que esperar a otros desarrollos o despliegues manuales. Con la seguridad de que la entrega que realicemos ha pasado unos controles de pruebas estandarizados, eliminando la probabilidad de fallos.
Actualmente, gracias a la tecnología Cloud, es bastante fácil (y rentable) montar y desmontar de forma automática entornos de pruebas bajo demanda sobre los que podremos, aparte de test unitarios, poder lanzar pruebas de carga, de integración con terceros o de seguridad. Todo esto, al igual que la integración continua, tiene el objetivo de poder entregar cuanto antes, pero con cero sorpresas, poder asegurar la calidad de lo entregado y aumentar nuestra frecuencia de despliegues. Nuestro sistema es la mejor garantía de éxito.
Registro y monitorización
Para garantizar poder integrar y entregar lo más frecuentemente posible con seguridad, una práctica DevOps importantísima es el registro de la actividad de nuestro software (independientemente de que sea aplicaciones web, móviles o un simple blog como el que estás leyendo). ¿Por qué? Para poder monitorizar todo. Ello nos permitirá, tal y como Lean nos indica, adelantarnos a los posibles problemas, y solucionarlos antes de llegar al usuario final. También, podremos ver niveles de carga, la escabilidad del sistema, etc.
El objetivo es poder tener una supervisión completa y en tiempo real. Es importante este último aspecto ya que implica supervisar todo el proceso (desde desarrollo, pasando por despliegues y estado de las aplicaciones e infraestructura implicados) en tiempo real. Esto implica también crear un sistema de umbrales y alertar para aquellos puntos más críticos, de nuevo, con el objetivo de adelantarnos a los problemas en cualquier momento del proceso, ya sea en entornos preproductivos o, por supuesto, producción.
Infraestructura como código
Aunque es una práctica un poco más avanzada y compleja de implementar que las tres anteriores, es una práctica que aporta mucho. La idea es, igual que con el código tenemos un sistema de control de versiones con el que poder «jugar» también deberíamos poder hacerlo con infraestructura. La idea es poder conseguir levantar sistemas bajo demanda con versiones que nos interesen para poder por ejemplo hacer pruebas, analizar, revisar y, por supuesto, revertirlo al igual que haríamos con el código.
Conclusión
En sucesivos posts ampliaremos con prácticas más complejas de implementar y, aunque menos extendidas, nos ayudarán en nuestro camino. Por último, recordar que, aunque tengamos sistemas que abracen las prácticas anteriores, DevOps no es nada sin una cultura que lo sustente donde la comunicación y la colaboración sea el foco central de los equipos y las personas que los componen.
Si quieres conocer más, te recomendamos este artículo en el que analizamos las tendencias en DevOps este año.