DevOps: Etapas de la jornada y el nivel de adopción de las empresas

Equipos de TI estables, confiables y que responden a las necesidades de los clientes

 

La adopción de tecnología y marcos de trabajo ágiles son una obligación para las empresas que desean ser y mantenerse competitivas con éxito en un mercado que es cada vez más especializado y enfocado en la personalización de la experiencia del cliente, por lo que marcos de trabajo como DevOps deben ser considerados si se busca incursionar en prácticas y herramientas para que los equipos de TI obtengan la capacidad de responder mejor a las necesidades de los clientes, aumenten la confianza y estabilidad en las aplicaciones que crean y logren alcanzar el time-to-market oportunamente.

 

¿Cómo influye DevOps en el ciclo de vida de las aplicaciones para lograr acelerar el tiempo de respuesta de las organizaciones en el mercado en el que participan?

 

Entiéndase DevOps como la unión de personas, procesos y productos para lograr la entrega de valor continuo al negocio a través de etapas genéricas que conllevan a realizar una buena práctica de DevOps, estas etapas son: planeación, desarrollo que incluye las fases de codificación compilación, pruebas, liberación y entrega, finalmente operación y monitoreo. Cada fase se basa en las demás. En las empresas en donde la cultura DevOps realmente fue interiorizada cada rol está implicado en cada fase.

 

devops

Descrubre que es DevOps y sus beneficios ¡Aprende mas aquí!

 

Etapa de Planeación DevOps:

 

En la fase de planeación, los equipos idean, definen y describen características y funcionalidades de las aplicaciones y sistemas. Realizan un seguimiento del progreso en niveles bajos y altos de granularidad, desde tareas de un solo producto hasta tareas que abarcan varios productos y/o aplicaciones y sistemas. La creación de tareas pendientes, el seguimiento de errores. Todo esto a través de la gestión del desarrollo de software ágil con marcos de trabajo como Scrum, el uso de Kanban y la visualización del progreso con dashboards son algunas de las formas en que los equipos de DevOps planean con agilidad y visibilidad.

 

Etapa de Desarrollo DevOps:

 

El desarrollo incluye todos los aspectos de la codificación, la escritura, las pruebas, la revisión y la integración del código por parte de los miembros del equipo, así como la creación de ese código en artefactos de compilación que se pueden implementar en varios entornos de desarrollo y pruebas hasta la entrega en producción. Para este fin, se utilizan herramientas para el control de versiones, como Git de adopción masiva y gratuita creando las ramas o “branch” necesarias para colaborar en el código y trabajar en paralelo. DevOps está altamente ligado con la automatización, por lo que para el desarrollo se usan herramientas altamente productivas que automatizan pasos manuales, e iteran en pequeños incrementos a través de pruebas automatizadas e integración continua del código.

Una regla para la automatización: si un proceso dentro del ciclo de desarrollo se realiza manualmente más de tres veces en un mes entonces es candidato de automatización.

La integración continua (CI) en conjunto con la entrega continua (CD) son el conjunto de buenos hábitos que equipos de desarrollo de alto desempeño adoptan para transformar ideas en productos consumibles para un usuario final. Estos hábitos son tanto los procesos automatizados como los comportamientos grupales del equipo necesarios para este fin.

 

Beneficios de implementación de CI/CD: 

 

  • Los desarrolladores pueden detectar problemas de integración de código de forma continua evitando en gran medida conflictos en fechas cercanas de “reléase”.
  • Disponibilidad constante de una versión de pruebas para Demos o incluso para reléase en producción.
  • Continuos testing: ejecución inmediata de las pruebas automatizadas.

 

En esencia, una tubería o pipeline es una línea de ensamblaje digital que ayuda a visualizar el proceso de creación de software tal y como lo hizo Henry Ford en 1913 con las líneas de ensamblaje para crear automóviles en masa.

En CI/CD cuando hablamos de pipelines o tuberías nos referimos a la serie de pasos necesarios para llevar una idea desde su concepción hasta convertirse en una aplicación instalada, una página web desplegada o una aplicación móvil descargada en el smartphone de algún usuario.

Si los equipos de desarrollo están recién empezando con la práctica de DevOps muchos de estos pasos aún son manuales. Por ejemplo, el desarrollador que compila el producto en su ambiente el cual es llevado manualmente a producción o la persona del equipo de calidad que realiza pruebas manuales. El equipo de operaciones de TI que crea máquinas virtuales a mano a pesar de ser pasos que parecen cortos y con mínimo esfuerzo humano, sin embargo, a largo plazo, tienen un costo muy alto: se crea un conocimiento (expertos) que no siempre es transmitido a otros miembros del equipo, por otro lado, se dedica tiempo a tareas repetitivas que dejan poco tiempo para la creatividad, innovación y estrategia.

Para comprender mejor CI/CD dividamos en: Pipeline de CI y Pipeline de CD.

CI Pipeline es el proceso de automatizar la compilación y las pruebas de código cada vez que un miembro del equipo confirma los cambios en el control de versiones. La CI incorpora cambios a un repositorio de control de versiones compartido después de que cada tarea pequeña se complete. Confirmar código desencadena un sistema de compilación automatizado para obtener el código más reciente del repositorio compartido y compilar, probar y validar la rama o branch completa main o trunk.

La CI surgió como procedimiento porque los desarrolladores de software suelen trabajar de forma aislada, necesitan integrar sus cambios con el resto de la base de código del equipo. La espera de días o semanas para integrar código crea muchos conflictos de integración o merge, difíciles de corregir errores y esfuerzos duplicados.  CI requiere que el código del equipo de desarrollo se combine en una rama de control de versiones compartida continuamente para evitar estos problemas.

Las herramientas de análisis de código estático o revisión automática de código nos ayudan a fallar rápido, es una buena práctica en la etapa de compilación para hallar potenciales problemas y bugs en el código recientemente creado. Algunas herramientas sugeridas son: Resharper, Sonarqube y Coverity para este fin.

CI/CD nos permite tener un flujo constante, las pruebas no son la excepción, es así como tenemos la práctica de continuos testing (CT) o pruebas continuas que permite lograr sistemas robustos a través de tests automatizados para evitar al máximo la deuda técnica. Herramientas como Apache JMeter, Taurus y BlazeMeter ayudan en la ejecución de pruebas automatizadas. Para reforzar el hábito de crear pruebas durante el ciclo de desarrollo de software existe el Test Driven Development (TDD) en donde antes de codificar se crean los units test que irán probando el código desarrollado.

Durante cada etapa del ciclo de DevOps encontramos distintos tipos de pruebas a realizar y que son viables para su automatización como pruebas unitarias, pruebas de integración, pruebas de aceptación de usuario, pruebas de performance y carga, pruebas de seguridad y vulnerabilidades (pentest) por mencionar algunas. Es por esto, que ahora DevOps se ha convertido en DevSecOps integrando la seguridad en todo el ciclo de desarrollo de software.

Adicionalmente, para lograr la automatización requerida, se requiere de la selección de un entorno de desarrollo adecuado. El objetivo es que los desarrolladores dediquen la mayor parte de su tiempo a las tareas de desarrollo con valor para el negocio, como editar y depurar código. Tener el conjunto de herramientas adecuadas puede marcar la diferencia entre la máxima productividad y el rendimiento poco óptimo. Los entornos de desarrollo integrados (IDE) han evolucionado en gran medida. Hoy en día, los desarrolladores tienen la capacidad de realizar casi todas sus tareas de DevOps dentro de una sola experiencia de usuario permitiendo ejecutar todas las fases del ciclo de vida del software.

La coordinación de los procesos automatizados que describimos anteriormente es conocido como “orquestación”. Actualmente, se encuentra con una variedad de herramientas de orquestación en el mercado como Jenkins, GoCD, GitLab, BitBucket Pipelines, Jira Software y Azure Devops de las cuales varias son gratuitas.

En cada una de las etapas de CI/CD estos orquestadores se integran con otras herramientas a través de sus APIs (aplication programming interface) o CLIs (command line interfaces). Es esta integración la que produce la sensación de tener un flujo de trabajo tal y como lo hacen las líneas de ensamblaje en las fábricas.

Los orquestadores permiten a los desarrolladores tener una representación visual del flujo y detectar problemas en el mismo para evitar que estos avancen a etapas posteriores.

Es importante elegir un orquestador que promueva el concepto de “Pipeline-as-Code”. Se trata de representar los pipelines en código para que puedan ser almacenadas en nuestra herramienta de versionamiento y modificadas por miembros del equipo cuando sea necesario y sirvan como documentación viviente.

 

Devops

 

Etapa de Entrega:

 

La entrega es el proceso de implementar aplicaciones en entornos de producción de manera confiable y periódica a través de la entrega continua. La fase de entrega también incluye la implementación y configuración de la infraestructura que constituye esos entornos en los que se ejecutarán las aplicaciones. Estos entornos suelen usar tecnologías  infraestructura como código (IaC), contenedores y microservicios.

La infraestructura como código es la utilización de tecnologías de la era “Cloud” para construir y administrar infraestructura dinámica, a través del uso de herramientas y servicios que manejan la infraestructura misma como software. Plataformas como AWS, Azure o Google Cloud Platform cuentan con procesos automatizados que ofrecen a los usuarios herramientas para aprovisionar infraestructura y que ligan con los pipelines de CI/CD sobre todo para las etapas de pruebas durante todo el ciclo DevOps. Un ejemplo de este tipo de herramientas es Terraform, Azure Resource Manager de Azure, CloudFormation de AWS.

La entrega continua (CD) es el proceso para, probar, configurar e implementar desde una compilación en un entorno de producción. La integración continua inicia el proceso de CD. Sin CD, los ciclos de lanzamiento de software eran anteriormente un cuello de botella para los equipos de aplicaciones y operaciones. Los procesos manuales llevaron a versiones poco confiables que producían retrasos y errores.

La entrega de versiones automatizada permite un enfoque de «error rápido» para la validación, donde las pruebas donde se producen errores se ejecutan primero y las pruebas de ejecución más largas solo se producen después de que las más rápidas se completen correctamente.

Para implementar un pipeline automatizado de CD o scripts de entrega se requieren utilizar herramientas como Chef, Puppet o Ansible para realizar el “deployment” de tus artefactos en el ambiente previsto. Considerar el upgrade de bases de datos en esta etapa es una buena práctica. Dependiendo del ambiente al que se realice el deployment se puede encadenar la ejecución de pruebas automatizadas al pipeline de CD para incrementar la calidad del producto a desplegar.

Cuando el nivel de madurez tecnológico y del equipo se va incrementando, los releases en producción se realizan de manera más frecuente (2 semanas a menos de 2 meses) y sin interrupción del servicio, a esto se le llama realmente “continuos delivery”. Si la entrega de los equipos de TI es mayor a 2 meses, seguramente se están perdiendo oportunidades de negocio importantes ante la competencia.

Agile Testing: trabajo colaborativo que ayuda a reducir el Time-to-Market de los productos de software.

 

Operación y monitoreo

 

La fase de operación implica mantener, supervisar y solucionar problemas de aplicaciones en entornos de producción, normalmente hospedadas en nubes públicas e híbridas. En la adopción de prácticas de DevOps, los equipos trabajan para garantizar la confiabilidad del sistema, la alta disponibilidad y lograr un tiempo de inactividad cero a la vez que refuerzan la seguridad y el monitoreo.

En una práctica DevOps, los equipos emplean prácticas de implementación seguras para identificar problemas antes de que afecten a la experiencia del cliente y mitiguen los problemas rápidamente cuando se producen. Esto a través del incremento de ciclos de feedback en los diferentes niveles de monitoreo:

  • Monitoreo de Negocio: KPIs de Negocio.
  • Monitoreo de Aplicaciones: Instrumentación embebida en las aplicaciones.
  • Monitoreo de servidores: Performance de CPU, memoria, espacio en disco duro.
  • Monitoreo de Red. Ancho de banda, latencia, rendimiento, errores en la red.

Mantener esta vigilancia requiere de indicadores, alertas accionables y visibilidad completa de las aplicaciones y sus dependencias para reconocer proactivamente impactos en el negocio. Es por ello por lo que la “instrumentación” que se define como la habilidad de diseñar el software de manera que sea monitoreable.

Por ejemplo: si añades logs a las aplicaciones y centralizarlos en un mismo punto para ser analizados con herramientas como Splunk y GrayLog.

Para monitorear la infraestructura, herramientas como Cloud Watch de AWS, DataDog, Prometheus y herramientas de visualización de dashboards como Grafana y Kibana.

La utilización de herramienta de administración de cambios, para visualizar, administrar y auditar dichos cambios como Fresh Service o Service Now o con un tablero Kanban. Para iniciar es recomendable gestionar los cambios que sucede en el ambiente productivo.

Una vez que sabemos todo esto, ¿qué sigue?, ¿por dónde comenzar? Necesitamos conocer y evaluar en qué etapa de la jornada de DevOps se encuentra nuestra área de TI y definir los pasos para avanzar en la misma.

Evaluar el Modelo de Madurez Tecnológica de tu empresa, en dónde se consideren por lo menos 3 áreas:

  • cultura (personas).
  • procesos.
  • tecnología.
  • y en qué nivel de cumplimiento se encuentra en cada una de ellas.

Creando estrategias para avanzar e ir madurando en casa área y en los diferentes niveles de cada una. Adoptando nuevos procesos, trabajando en la cultura de innovación de las personas e implementando herramientas que permitan la gestión y automatización de procesos.

Proceso DevSecOps para desarrollo de software y una infraestructura con seguridad.

También creemos que te gustará...

Únete a más de 15.000 empresas

Recibe nuestro newsletter en tu bandeja de entrada

Suscríbete y haz parte de nuestros lectores

Ask SophieX