fbpx

DevOps, más que un marco de trabajo, una filosofía

Por: Fernando Peña, Gerente de Operaciones TI
—————–

En todas las empresas de tecnología que basan su negocio en el desarrollo y mantención de software existen sesgos y barreras en la comunicación y la colaboración entre los diferentes equipos que actúan como participantes en este proceso, barreras que pueden terminar afectando la eficiencia de los equipos y la calidad de los productos ofrecidos.

Para apoyar en la resolución de estos problemas existen marcos de trabajo que permiten acercar a los equipos y promover el trabajo colaborativo con un fuerte impacto en la calidad de los productos, uno de estos marcos, que se ha estado impulsando y adoptando fuertemente por las organizaciones, es DevOps.

DevOps se define no sólo como un marco de trabajo, sino que también como una filosofía que permite mejorar la colaboración y el rendimiento de los equipos de desarrollo y operaciones (derribando el muro de la confusión), aportando en agilizar los procesos de desarrollo y entrega de productos, además de aumentar la confianza y el valor entregado a los clientes.

Para DevOps es muy importante mantener ciertos conceptos adoptados por la organización para ser exitoso, dentro de éstos está la Cultura como base para una organización colaborativa y con buena comunicación, la Automatización, ya que todos los procesos manuales repetitivos no generan valor, el uso de los principios Lean para eliminar desperdicios y mejorar la frecuencia de entregas, Métricas, ya que es necesario siempre mantener mediciones para poder mejorar y Sharing (compartir), ya que compartir las experiencias y el conocimiento es necesario para que las personas involucradas en este marco de trabajo o filosofía puedan aprender.

Imagen: Ciclo DevOps

 

Para entender mejor el marco de trabajo, DevOps define un ciclo de vida continuo que refleja la interacción y colaboración entre los equipos de desarrollo y operaciones. Por otra parte, desde un enfoque más técnico, el ciclo representa los pasos que debe seguir cualquier nueva funcionalidad o pieza de código para llegar a estar disponible en la aplicación objetivo. Este ciclo represente una forma permanente de mejora continua en la organización.

El ciclo DevOps busca también que el proceso sea lo más automatizado posible, es decir, que, en cada etapa del ciclo, e incluso en sus transiciones, existan herramientas y técnicas que permitan automatizarlos, acá es donde comienzan a aparecer términos como integración continua, testing continuo y entrega continua.

Los pasos o etapas del ciclo DevOps se definen de la siguiente forma:

Plan (Planificación): En esta etapa se define el objetivo y el conjunto de funcionalidades que se deben realizar, además de los criterios de aceptación que se deben cumplir para determinar el trabajo como terminado en una iteración. Para esta etapa existen variadas herramientas de apoyo como Jira, Confluence, Trello, Asana, Jamboard, entre otras.

Code (Codificación): Posterior a la definición del plan viene la etapa de codificación o programación de la o las funcionalidades y automatizaciones definidas para la iteración. En esta etapa los desarrolladores se apoyan principalmente de IDEs de programación que no solo permiten escribir código, sino que también aportan en la validación de estándares de programación y seguridad. Por otra parte, en esta etapa se crean y se ejecutan algunas pruebas internas que aseguren el buen funcionamiento del código en la aplicación. En esta etapa se utilizan herramientas como Visual Studio Code, NetBeans, Git, Slack, entre otras.

Build (Construcción):  Luego que ya existe al menos una pieza de código terminada, ésta se integra en una fase inicial a la aplicación, lo que permite contar con un primer alcance de cómo funcionará esta nueva pieza en conjunto con toda nuestra aplicación, ya que, si existe algún problema en esta fase, no será posible integrar de forma definitiva este componente a menos que se repare. Para esta etapa se utilizan herramientas que permiten automatizar las integraciones y pruebas iniciales de código fuente como Jenkins, Bamboo, Maven, CircleCI, entre otras.

Test (Pruebas): En esta etapa se ejecutan todas las pruebas para verificar el correcto funcionamiento de la iteración. Es importante destacar que no sólo se deben probar las nuevas funcionalidades, sino que también las existentes, ya que se debe asegurar el correcto funcionamiento de la aplicación en su totalidad. Esta etapa se alimenta de los criterios de aceptación que se pudieron definir en la etapa de planificación, además de las pruebas internas creadas y definidas en la etapa de codificación. Acá se utilizan herramientas que nos ayudan a automatizar las pruebas, ya sea pruebas funcionales, de carga, código fuente y seguridad. Algunas herramientas utilizadas son Selenium Web Driver, Cucumber, Sonarqube, Junit, Jmeter, entre otras.

Release (Lanzamiento): Una vez que las pruebas de la iteración son exitosas, se lanza la nueva versión de la aplicación. En esta fase se utilizan herramientas como Git, Jenkins, Bamboo, entre otras.

Deploy (Despliegue): Con la nueva versión disponible en la etapa anterior se puede ya realizar el despliegue de ésta en los distintos ambientes, incluyendo el ambiente de producción. Para lograr esto se utilizan herramientas de despliegue y entrega continua como Jenkins, Bamboo, Amplify, entre otras.

Operate (Operación): Esta es la fase donde el equipo de operaciones toma el control de la nueva versión de la aplicación en el ambiente productivo. En esta etapa se utilizan herramientas como Ansible, Docker, Kubernetes, Visual Studio Code, entre otras

Monitor (Monitoreo): En esta última etapa del ciclo se recopila la información importante de la aplicación que nos permitirá enterarnos de su estado de salud. Además, en esta etapa se busca obtener información (feedback) que nos ayude a realizar ajustes necesarios para la siguiente iteración. Existen muchas herramientas que nos ayudan a monitorizar distintos aspectos de nuestra aplicación, alguna son Newrelic, Nagios, Google Analytics, ELK, entre otras.

En PlanOK adoptamos este y otros marcos de trabajo y filosofías con una mirada enfocada en el valor que podemos entregar a nuestros clientes y cuán oportunos podemos ser, utilizando metodologías basadas en principios de agilidad, promoviendo siempre la colaboración y comunicación en nuestros equipos. Buscamos, además, de forma permanente, la optimización de nuestros procesos y la inclusión de metodologías de trabajo que nos permitan generar productos de calidad para nuestros clientes.