Introducción a DevOps


Introducción

Hoy en día, las organizaciones confían en la filosofía DevOps para automatizar y acelerar el desarrollo de software para obtener procesos y desarrollos de mayor calidad y confiabilidad. Esta filosofía consta de varias etapas como el desarrollo continuo, la integración continua, las pruebas continuas, la implementación continua y el monitoreo continuo.


DevOps es una combinación de dos palabras: desarrollo y operaciones. Esta filosofía te permitirá que un solo equipo de trabajo controle y administre todo el ciclo de vida de un sistema durante los procesos de desarrollo, pruebas, implementación y operaciones.

En resumen, el objetivo principal de DevOps es acelerar el ciclo de vida del desarrollo de sistemas mediante la implementación de herramientas que te facilite la organización, desarrollo, pruebas, integración y monitoreo para así poder corregir y actualizar con una mayor frecuencia y, de esta manera, que estés mejor alineado con los objetivos comerciales de los clientes.


Explicación

¿Cómo se define DevOps?

DevOps es una filosofía que permite crear una estrategia para el desarrollo de software mediante una colaboración más ágil y rápida entre los desarrolladores y el equipo de tecnologías de la información.
Con DevOps, las empresas pueden lanzar microservicios de manera rápida y eficiente, integrando retroalimentaciones que dan como resultado un trabajo mejor estructurado y un avance eficaz en los proyectos de desarrollo de sistemas. Implementar esta filosofía implica una gran cantidad de desarrollo, tecnologías, retroalimentaciones y pruebas para obtener una buena automatización en las integraciones y despliegues continuos (Microsoft, s.f.).


Aun y cuando las empresas adopten las prácticas de DevOps para mejorar y automatizar los procesos basándose en la tecnología, se tienen que tomar en cuenta otros factores como la cultura interna y todo el personal que va a participar en la implementación de esta filosofía. El desafío de esta implementación son los cambios en la forma de trabajar y colaborar entre las diferentes áreas y equipos de trabajo. Si se sobrepasa este desafío, se logrará crear un entorno que facilite el desarrollo de equipos de alta especialidad y rendimiento.

Es importante que los equipos de trabajo participen en varias fases del ciclo de vida de DevOps y no solo las principales de su rol, ya que se tiene que recordar que la colaboración entre fases es uno de los pilares de esta filosofía. También las operaciones de TI tienen que madurar para lograr la estabilidad y seguridad deseada y que la gobernanza sea más sólida, así como su rendimiento en los cambios que se lleguen a presentar en las diferentes etapas.

Los ciclos de la entrega de versiones son cortos y de esta manera se facilita la administración de riesgos y su planteamiento, reduciendo el impacto en la estabilidad de los sistemas; esto ayuda a las empresas a tener un crecimiento constante y reaccionar a la presión competitiva, así como a los cambios de los clientes.

En resumen, una correcta implementación de esta filosofía logrará que los equipos tengan una mentalidad de crecimiento, una respuesta rápida a los errores y cambios, madurez en los procesos de automatización, mejora continua e innovación en la organización, así como la satisfacción del cliente y, por último, la flexibilidad en la adaptación al mercado.

Prácticas de desarrollo ágil aplicadas a DevOps

En DevOps se utilizan prácticas de la metodología ágil, ya que el enfoque es el desarrollo de software repetitivo o iterativo en el que el proyecto de software se divide en sprints. Cada sprint tiene distintas fases como el análisis y recopilación de requerimientos, el desarrollo del diseño de software, las pruebas funcionales y no funcionales del sistema y el mantenimiento; estos sprints son utilizados en DevOps.

Con estas prácticas las aplicaciones son liberadas desde la primera iteración (sprint). Después de su liberación los clientes regresan las retroalimentaciones necesarias basándose en el rendimiento de la aplicación, los cambios que se producen por estos comentarios hacen que la aplicación tenga características nuevas y mejoras en las actuales y al terminar se procede a la segunda iteración. Este proceso se repetirá hasta que se alcance la calidad y rendimiento del software deseado.

Gracias a esta metodología, el acercamiento con los clientes hace que se den retroalimentaciones rápidamente y se tomen las decisiones sobre la marcha; también se disminuyen los riesgos, ya que los resultados se revisan en cada iteración ahorrando dinero y tiempo en gastos innecesarios y al mismo tiempo mejorando la calidad de la aplicación en cada ciclo. Por último, al dividir los proyectos en pequeños pedazos hay muchas pruebas que disminuyen el factor de error entre los equipos, mejorando la colaboración entre las diferentes áreas.

El reto que se presenta en esta metodología es que es muy dependiente de los requerimientos del cliente, es difícil predecir el esfuerzo y tiempo de los proyectos grandes, debido a la rapidez de los sprints y la documentación, muchas veces es deficiente. No se recomienda utilizar esta metodología en proyectos complejos. Por último, el riesgo de los mantenimientos es mayor.

La metodología ágil es superior a otras cuando no se tiene una imagen clara del producto final o cuando el proyecto es demasiado grande o complejo, también cuando se requiere que el proyecto se adapte a los cambios de una manera rápida y efectiva.

Conceptos básicos y beneficios de DevOps

DevOps beneficia a las empresas haciéndolas más ágiles y rápidas en sus entregas debido a la automatización y alineación de sus operaciones. Respecto al equipo de trabajo tendrá mejor colaboración y organización con una infraestructura más sólida y veloz, contando con un sistema integral que mejore los procesos de todo el ciclo de vida del desarrollo de un sistema.

En la cultura de DevOps, un grupo de administradores de sistemas, control de calidad, desarrolladores, QA, etcétera, son convertidos en el equipo de DevOps; este equipo tiene la responsabilidad de la recopilación de los requerimientos, diseño, desarrollo, pruebas e implementación de la infraestructura de la aplicación y, finalmente, del monitoreo y la recopilación de la retroalimentación de los usuarios finales y luego, nuevamente, implementan los cambios que sean necesarios (Arvind, 2020).

Ahora conocerás los conceptos básicos de DevOps:

  1. Desarrollo Continuo. El desarrollador se enfoca en construir el código actual, no hay tiempo de espera para la implementación del mismo.
  2. Integración continua (CI, continuos integration). La integración continua logra un mecanismo de retroalimentación, desarrollo del código y pruebas más rápidas.
  3. Entregas continuas. Es una práctica en el desarrollo de software en la cual se preparan automáticamente los cambios en el código para posteriormente mandarlas a producción.
  4. Despliegues continuos (CD, continuos deploy). El desarrollador implementa el código en los servidores de producción; es importante que se implemente correctamente el código en todos los servidores.
  5. Monitoreo continuo. Para asegurar una administración eficaz se requiere un buen sistema de retroalimentación y monitoreo que se puede establecer a través del software Nagios.
  6. Infraestructura como código (IaC, infraestructure as code). Es una práctica clave de DevOps y se utiliza junto con la entrega continua. Es la gestión de las redes, máquinas virtuales, balanceadores de carga y topología de conexión en un modelo descriptivo utilizando el mismo control de versiones que utiliza el equipo de DevOps para el código fuente (Microsoft, 2021).

Cómo definir y construir una cadena de flujo (pipeline) para DevOps

Con los conocimientos de los conceptos básicos de las diversas fases del ciclo de vida de DevOps, como el desarrollo continuo, la integración continua, las pruebas continuas, la implementación continua y el monitoreo continuo, ahora verás cada una a detalle, así como algunas herramientas que se utilizan en cada una.



En la fase del desarrollo continuo se lleva a cabo la planificación y la codificación del software. Basándose en los requerimientos se define la planificación y el alcance del proyecto, así los desarrolladores empiezan a construir el código para la aplicación. No hay herramientas de DevOps necesarias para la planificación, pero existen algunas herramientas para mantener el código.

Las herramientas que se utilizan comúnmente en esta fase son GIt, JIRA, Mercurial, SVN y CVS. Estas ayudan en el mantenimiento del código, gracias al control de versiones; esto se conoce como gestión del código fuente. También se pueden utilizar otras herramientas como Maven, Gradle y Ant para desarrollar y crear paquetes de código en un archivo ejecutable para reenviarlo a alguna de las fases siguientes.


Figura 1. Sistema distribuido de control de versiones en Git.

Los riesgos según su naturaleza son los siguientes:

Git es un software para el control de versiones y este es el proceso en el cual se guardan versiones de archivos en las diferentes etapas de un proyecto para que los desarrolladores puedan hacer un seguimiento de los avances que se han realizado y, en caso de que ocurra algún error, debido a los cambios que se han realizado puedan revertirlos, volviendo a la versión anterior. Varios desarrolladores pueden trabajar en el mismo proyecto y a esto se le conoce como sistema de control de versiones distribuidos.

En la fase de pruebas continuas se detectan los errores del software desarrollado ya que se realizan las pruebas continuamente. En la fase se utilizan herramientas para automatización de pruebas como Selenium, TestNG y JUnit. Estas permiten que los QA (quality assurance o control de calidad) realicen múltiples pruebas de la codificación al mismo tiempo para revisar con cuidado y evitar fallas en la funcionalidad. También en esta fase se integra otra herramienta creadora de contenedores para poder simular los entornos de pruebas llamado Docker.

Docker permite crear contenedores que facilitan la creación y ejecución de arquitecturas de microservicios distribuidos, la integración del código y entregas continuas. Mejor aún, ahora con la colaboración reciente entre Docker y AWS (Amazon Web Services) se facilita la implementación en Amazon ECS y AWS Fargate.




Por otra parte, Selenium también realiza pruebas de automatización y TestNG genera los informes. Toda esta fase se puede automatizar con la herramienta de integración continua que se llama Jenkins. En la cuestión del flujo de trabajo hay que suponer que se desarrolló el código con Selenium en Java para probar una aplicación. Una vez creado el código se realizan las pruebas de aceptación del usuario, pues bien, todo este proceso se puede automatizar con Jenkins.


Figura 2. Proceso y automatización de pruebas con Jenkins.

De esta manera las pruebas de automatización ayudarán a ahorrar tiempo, trabajo y esfuerzo en la ejecución de todas las pruebas en lugar de hacerlo manualmente. Con TestNG se generarán los informes y esto es una gran ventaja, se contará con la programación de la ejecución de las pruebas en horarios definidos y, por último, después de la prueba la codificación, se integrará continuamente con el código ya existente.

La fase de integración continua se puede considerar como la más importante en el ciclo de vida de DevOps, es en donde los desarrolladores realizan los cambios en el código fuente con más frecuencia, ya sea diariamente o por semana. El flujo de trabajo no solo sería la compilación del código, sino que, aparte se tiene que revisar, probar, integrar las pruebas y, por último, empaquetar.

Como se comentaba, Jenkins es una herramienta utilizada en esta fase; siempre que se realice un cambio en el repositorio de Git, Jenkins obtiene la actualización de la codificación y después ese código lo convierte en un archivo ejecutable. Posteriormente, este archivo se reenvía al servidor de ambiente de prueba o al de producción.

El código se tiene que actualizar continuamente y sin fallas para que los usuarios finales puedan ver los cambios realizados sin problemas. No hay que olvidar que los cambios en el código se integran continuamente con el código ya existente.


Figura 3. Proceso de la integración y entregas continuas.

En la fase de despliegue continuo el código se implementa en los servidores de producción. Es muy importante que el código que se va a implementar se realice de una manera segura y correcta en los servidores. Este código se va a estar implementando continuamente; se debe de administrar la configuración con algunas herramientas. Las más utilizadas son Puppet, Chef, Saltstack y Ansible. Estas desempeñan un rol importante en la ejecución de tareas de una manera rápida y frecuente. Las tareas que se tienen que realizar para administrar la configuración en esta etapa serían las de la implementación continua del código en los servidores, la programación de las actualizaciones y mantener las configuraciones consistentes en los servidores.
En esta fase también son importantes las herramientas que crean contenedores como Docker y Vagrant a la hora de realizar las implementaciones, ya que ayudan a la coherencia de estas en los ambientes de pruebas antes de pasar el código a producción.

Por último, es la fase del monitoreo continuo. En esta etapa es donde se realiza la supervisión continua del rendimiento del sistema o aplicación y es crucial en el ciclo de vida de DevOps. Toda la información vital se registra y al mismo tiempo se procesa para monitorear el desempeño de la aplicación para detectar fallas como servidores no accesibles, falta de memoria en los sistemas o cualquier falla en algún servicio de la red y, de esta manera, se puedan solucionar automáticamente en cuanto se detecten.

Las herramientas más utilizadas en esta etapa son Nagios, Splunk, ELK Stack, NewRelic y Sensu. Aquí, el equipo de operaciones monitorea todas las actividades que realizan los usuarios para detectar fallas o errores en el comportamiento del sistema y las herramientas ayudan a supervisar de cerca el rendimiento de los servidores, de la aplicación y el estado del sistema en general.

Gracias a esto se mejora la confiabilidad y la productividad de los sistemas y esto a su vez reduce los costos del soporte de TI, ya que cualquier falla que se detecte se le informa al equipo de desarrollo para que se solucione en la fase de desarrollo continuo, optimizando la resolución de una manera ágil y eficaz.

El ciclo de DevOps se repite continuamente (sprints) hasta lograr la calidad del producto deseada, es por lo que la mayoría de las organizaciones de TI están implementando esta filosofía para la creación de los productos.


Cierre

Además de los esfuerzos por romper las barreras de comunicación y fomentar la colaboración entre los equipos de desarrollo y operaciones tecnológicas, uno de los principales valores de DevOps es lograr la satisfacción del cliente y prestar sus servicios en menos tiempo. DevOps también se ha creado para impulsar la innovación empresarial y ser el motor de continuas mejoras en los procesos.

La práctica de DevOps propicia que cada empresa se ponga como objetivo ofrecer un mejor servicio cada vez, en menos tiempo, de mejor calidad y con mayor seguridad a sus clientes finales.


Checkpoint

Asegúrate de:

  • Reforzar el concepto y la filosofía detrás de DevOps para comprender adecuadamente cada una de las etapas.
  • Reforzar los conceptos básicos de DevOps para mejorar el conocimiento en el alcance de la filosofía.
  • Emplear cada una de las etapas del ciclo de vida de un producto para cumplir con la filosofía DevOps.
  • Implementar alguna de las herramientas de software disponibles para cada etapa del ciclo de vida de DevOps para practicar.

Bibliografía

  • Arvind. (2020). DevOps Life cycle: Everything You Need To Know About DevOps Life cycle Phases. Recuperado de https://www.edureka.co/blog/devops-lifecycle/
  • Microsoft. (s.f.). ¿Qué es DevOps? Recuperado de https://azure.microsoft.com/es-mx/overview/what-is-devops/#devops-overview
  • Microsoft. (2021). What is Infrastructure as Code? Recuperado de https://docs.microsoft.com/en-us/devops/deliver/what-is-infrastructure-as-code

La obra presentada es propiedad de ENSEÑANZA E INVESTIGACIÓN SUPERIOR A.C. (UNIVERSIDAD TECMILENIO), protegida por la Ley Federal de Derecho de Autor; la alteración o deformación de una obra, así como su reproducción, exhibición o ejecución pública sin el consentimiento de su autor y titular de los derechos correspondientes es constitutivo de un delito tipificado en la Ley Federal de Derechos de Autor, así como en las Leyes Internacionales de Derecho de Autor.

El uso de imágenes, fragmentos de videos, fragmentos de eventos culturales, programas y demás material que sea objeto de protección de los derechos de autor, es exclusivamente para fines educativos e informativos, y cualquier uso distinto como el lucro, reproducción, edición o modificación, será perseguido y sancionado por UNIVERSIDAD TECMILENIO.

Queda prohibido copiar, reproducir, distribuir, publicar, transmitir, difundir, o en cualquier modo explotar cualquier parte de esta obra sin la autorización previa por escrito de UNIVERSIDAD TECMILENIO. Sin embargo, usted podrá bajar material a su computadora personal para uso exclusivamente personal o educacional y no comercial limitado a una copia por página. No se podrá remover o alterar de la copia ninguna leyenda de Derechos de Autor o la que manifieste la autoría del material.