La guía completa de DevOps (con ejemplos)

¿Qué tienen en común empresas como Amazon, Target, Esty, Netflix, Google y Walmart? Aparte del hecho de que son empresas tremendamente exitosas, todas utilizan un método conocido como DevOps en sus procesos diarios para aumentar la eficiencia y mejorar el tiempo de entrega. En esta guía de DevOps, intentaremos explicar qué es DevOps y cómo puede ser de gran ayuda para tu negocio.

¿Qué es DevOps?

DevOps (un acrónimo de «desarrollo» y «operaciones») es la combinación de prácticas y herramientas diseñadas para aumentar la capacidad de una organización para entregar aplicaciones y servicios más rápido que los procesos de desarrollo de software tradicionales. Esta velocidad permite a las organizaciones brindar un mejor servicio a sus clientes y competir de manera más efectiva en el mercado.

En términos simples, DevOps trata de eliminar las barreras entre los equipos, el desarrollo y las operaciones tradicionalmente aislados. Bajo un modelo DevOps, los equipos de desarrollo y operaciones trabajan juntos durante todo el ciclo de vida de la aplicación de software, desde el desarrollo y la prueba hasta la implementación y las operaciones.

Tomemos un pequeño ejemplo hipotético para ilustrarlo. Digamos que hay una pequeña startup que construye robots de limpieza habilitados para IA. Hay 3 desarrolladores (llamémoslos simplemente Equipo D) que escriben y ejecutan el código para crear los robots y dos personas de operaciones (Equipo O por supuesto) que mantienen la infraestructura del robot en el entorno del mundo real y brindan soporte para el usuarios de robots.

El equipo D acaba de pasar 8 meses creando el último robot. Puede reconocer a las personas, recibir comandos de los dispositivos Alexa y, por supuesto, limpiar como un jefe. El equipo D ha dedicado tiempo a crear este robot en su entorno de desarrollo controlado y todo parece funcionar sin problemas. No podrían estar más orgullosos.

Entregan su creación al Equipo O, que rápidamente la lleva al mundo real. Ahí es cuando empiezan los problemas. Resulta que el robot de limpieza perfecto no es tan perfecto después de todo. No reconoce a todos, su capacidad para seguir los comandos de Alexa se rompe cuando los dan diferentes personas y no puede alcanzar y aspirar estantes complicados.

El equipo O está enojado y frustrado. Han estado esperando este robot durante tanto tiempo y no pueden creer que sea un desastre absoluto. El equipo D, por otro lado, ahora está a la defensiva. Creen que todo estaba funcionando perfectamente durante las condiciones de prueba controladas y el lío real ahora debe deberse a la mala ejecución del Equipo O.

En conclusión, hay un producto subóptimo en el mercado, parece que las correcciones y mejoras ahora tomarán casi tanto tiempo como lo hizo el lanzamiento del producto, y dos equipos muy competentes ahora se odian entre sí y a sus trabajos.

Eso, en pocas palabras, es la razón por la que se creó DevOps. Se podrían haber evitado muchos dolores de cabeza, frustración e ineficiencia si el Equipo D y el Equipo O trabajaran juntos desde la concepción y la ejecución hasta la entrega y el soporte. En cambio, trabajaron en silos con una pared imaginaria entre ellos.

DevOps no es más que un conjunto de filosofías, prácticas y herramientas que ayudan a una organización a entregar mejores productos más rápidamente al facilitar una integración de las funciones de desarrollo y operaciones. Esto permite a empresas como la de nuestro ejemplo atender mejor a sus clientes y mercados y tener una ventaja competitiva.

Esto comienza desde el diseño hasta todo el proceso de desarrollo hasta el soporte de producción.

¿Cómo ha evolucionado DevOps?

DevOps lleva más de doce años en funcionamiento. Como la mayoría de las filosofías y herramientas que tienen aplicación práctica, ha pasado de ser solo un montón de ideas y principios reunidos a una disciplina completa con sus propios procesos y herramientas.

En 2007, un director de proyecto llamado Patrick Debois estaba trabajando con el gobierno belga para ayudar con las migraciones de centros de datos. Encontró todo el proceso extremadamente frustrante debido al muro entre los desarrolladores y el equipo de operaciones, lo que hizo que su trabajo fuera mucho más difícil y la entrega mucho más lenta.

Debois era un gran creyente en la metodología ágil que promueve la iteración continua del desarrollo y las pruebas a lo largo del ciclo de vida del desarrollo, lo que ayuda a los equipos de desarrollo a enviar mejores productos más rápido. Creía que se deberían aplicar principios similares a los equipos de desarrollo y operaciones que trabajan juntos en sincronía.

En 2008, Andrew Schafer (quien más tarde se hizo conocido como un evangelizador de DevOps) y Debois se reunieron en una conferencia para discutir las ideas y principios iniciales en torno a lo que luego llamaron “administración de sistemas ágiles”. También formaron un grupo de administradores ágil en Google, que es donde se encuentran los verdaderos comienzos de DevOps.

Otro evento histórico en la historia de la evolución de DevOps fue la ahora famosa presentación de los empleados de Flickr John Allspaw y Paul Hammond en la conferencia O’Reilly Velocity en 2009. Con un divertido juego de roles contundente, se dieron cuenta de que hubo una gran pérdida comercial debido al muro entre el desarrollo y las operaciones y que la única salida era una integración perfecta entre los dos.

Esta presentación llegó a ser conocida como «el momento decisivo» para DevOps, ya que el mundo tecnológico se dio cuenta rápidamente de la necesidad de dicha integración. La presentación inspiró a Debois a organizar una conferencia de DevOps llamada Devopsdays en Bélgica, y el resto, como dicen, es historia.

Otro momento importante en la evolución de DevOps fue la primera conferencia de DevOps en los Estados Unidos. Se llevó a cabo en 2010 en Mountain View, California, la Meca de la tecnología. Esta fue la señal definitiva de que DevOps había llegado y estaba aquí para quedarse. En 2018, de hecho, hubo más de 30 conferencias de DevOps en todo el mundo.

Beneficios

Entre los beneficios proporcionados por DevOps a las empresas, destacamos los siguientes:

  • Velocidad. Las prácticas de DevOps permiten moverse a la velocidad que necesita para innovar más rápido, adaptarse mejor a los mercados cambiantes y ser más eficiente para impulsar los resultados comerciales.
  • Entrega rápida. Cuando aumentas el ritmo de los lanzamientos, puedes mejorar tu producto más rápidamente y generar una ventaja competitiva.
  • Fiabilidad. Las prácticas de DevOps, como la integración continua y la entrega continua, pueden garantizar la calidad de las actualizaciones de las aplicaciones y los cambios de infraestructura para que pueda entregar de manera confiable a un ritmo más rápido mientras mantiene una experiencia óptima para los usuarios finales.
  • Colaboración mejorada. Bajo un modelo de DevOps, los desarrolladores y los equipos de operaciones colaboran estrechamente, comparten responsabilidades y combinan sus flujos de trabajo. Esto reduce las ineficiencias y ahorra tiempo.
  • Seguridad. Puedes adoptar un modelo DevOps sin sacrificar la seguridad mediante el uso de herramientas de prueba de seguridad integradas y automatizadas.
  • Innovación acelerada. El uso de DevOps permite a las empresas desarrollar e implementar productos mucho más rápido. Los tiempos de ciclo se vuelven significativamente más largos cuando hay un muro entre el desarrollo y las operaciones. Cuando los dos están integrados, por otro lado, los conjuntos de cambios son más pequeños y los problemas a resolver cada vez son menos complejos.
  • Escalabilidad. La automatización y consistencia que viene con DevOps permite administrar y cambiar sistemas complejos de manera más eficiente.

Componentes

La premisa de DevOps se basa en cinco componentes principales.

Marco ágil

Agile es un enfoque bien conocido para la gestión de proyectos de software. Inicialmente se desarrolló para acelerar el proceso de desarrollo dividiendo los proyectos de TI en pequeños fragmentos o incrementos. Los requisitos del proyecto se revisan durante todo el ciclo de vida del proyecto para responder rápidamente a cualquier cambio.

Si bien DevSecOps utiliza muchos de los mismos principios de desarrollo como ágil, como la integración continua y la entrega de sistemas de software (CI / CD) en iteraciones, difieren en la forma en que manejan la seguridad. Por ejemplo, el corazón de DevSecOps es integrar la seguridad en todas las iteraciones del proyecto, mientras que el único objetivo del modelo ágil es entregar proyectos de software rápidamente y dejar que la seguridad se agregue más tarde, una vez finalizado el producto.

Desarrollo de una sola construcción y ejecución en cualquier lugar

DevOps utiliza tecnología de contenedores que cambió radicalmente las metodologías del ciclo de vida del desarrollo de software (SDLC). Existe un acuerdo semi-mutuo en la comunidad DevOps para evitar perder tiempo en el desarrollo de entornos de prueba para plataformas específicas.

Por ejemplo, los desarrolladores de DevOps utilizan la tecnología de contenedores para escribir código, compilar, ejecutar y probar sin preocuparse por los recursos operativos. Esto deja tiempo suficiente para que el equipo de operaciones se concentre más en las pruebas y la seguridad.

Todo como código

La incorporación de la seguridad en el código es un avance significativo en el desarrollo de proyectos de software. Para crear aplicaciones seguras, la seguridad debe integrarse en las herramientas y los flujos de trabajo de DevOps.

Esto podría lograrse implementando políticas de seguridad y agregando verificaciones y pruebas al código sin introducir costes adicionales o demoras durante el proceso de escritura del código real.

Automatización

La automatización juega un papel integral en la integración exitosa de la seguridad en el modelo DevOps. Por ejemplo, al automatizar procesos manuales y construir herramientas en canalizaciones (CI / CD), el equipo de desarrollo y operaciones puede trabajar en estrecha colaboración y funcionar como un solo equipo. aumentando así su capacidad para responder a las consultas del equipo de seguridad.

La automatización puede mejorar la tarea de implementar la seguridad durante el desarrollo de un proyecto al acelerar el ciclo de retroalimentación. La automatización acelerará el proceso de diseño, ya que todos los problemas de seguridad descubiertos, incluidos los problemas de cumplimiento, se descubrirán y resolverán rápidamente a medida que avance el proyecto.

Comunicación y colaboración

Tener un canal de comunicación claro y directo durante el proceso de desarrollo es necesario para la finalización exitosa de los proyectos.

En DevSecOps, tres equipos son responsables de entregar el producto final: los equipos de desarrollo, operaciones y seguridad. Cada equipo puede considerar su trabajo para superar al resto. Los equipos de desarrollo y operación siempre se enfocan en entregar la iteración del proyecto a tiempo mientras ven que el trabajo del equipo de seguridad ralentiza su trabajo.

La responsabilidad de la alta dirección es cerrar la brecha de comunicación y colaboración. Pueden hacer esto alentando a todos los equipos, especialmente a los que componen los equipos de DevOps, a comprender la importancia del trabajo en equipo de seguridad para entregar productos seguros que no generen problemas de seguridad después del lanzamiento.

DevOps Security y DevSecOps

La seguridad de DevOps, más comúnmente conocida como DevSecOps, se refiere a la disciplina y práctica de salvaguardar todo el entorno de DevOps a través de estrategias, políticas, procesos y tecnología. La filosofía de DevSecOps es que la seguridad debe integrarse en cada parte del ciclo de vida de DevOps, incluido el inicio, el diseño, la compilación, la prueba, el lanzamiento, el soporte, el mantenimiento y más.

La seguridad tradicional opera desde la posición de que una vez que se ha diseñado un sistema, sus defectos de seguridad se pueden determinar y corregir antes de su lanzamiento. Con el cambio a un modelo DevOps, las prácticas de seguridad tradicionales ocurren demasiado tarde en el ciclo de desarrollo y son demasiado lentas para el diseño y lanzamiento de software creado por iteración. Por lo tanto, pueden convertirse en un obstáculo importante para la entrega rápida de aplicaciones y servicios.

Con DevSecOps, la seguridad se convierte en el centro de atención de todos en un equipo de DevOps. DevSecOps tiene el objetivo de implementar decisiones de seguridad a velocidad y escala sin sacrificar la seguridad. DevSecOps implica una colaboración continua y flexible entre los ingenieros de versiones y los equipos de seguridad.

Los conceptos de «velocidad de entrega» y «creación de código seguro» se fusionan en un proceso simplificado. Las pruebas de seguridad se realizan en iteraciones sin ralentizar los ciclos de entrega. Los problemas críticos de seguridad se tratan a medida que se hacen evidentes, no después de que se haya producido una amenaza o un compromiso.

Mejores prácticas para DevOps eficaz

Si bien DevOps todavía significa cosas diferentes para diferentes personas, ha surgido un núcleo de mejores prácticas que deben incorporar las empresas que buscan adoptar DevOps.

Participación activa de las partes interesadas

Este es el principio rector fundamental de DevOps. DevOps. Solo puede tener éxito si tanto los desarrolladores como el personal de operaciones y soporte están realmente comprometidos con la colaboración y el uso de un enfoque integrado para lograr los objetivos.

Pruebas automatizadas

Las pruebas de regresión automatizadas son algo que los equipos ágiles adoptan con mucha frecuencia, ya que ayudan a solucionar problemas de inmediato y a enviar un código de mayor calidad. Esto también funciona bien en DevOps, ya que una necesidad imperiosa del personal de operaciones es que el código enviado debe cumplir con un cierto estándar de calidad.

Gestión de configuración integrada

En un entorno de DevOps, la gestión de la configuración se aplica no solo a la solución actual en la que se está trabajando, sino también a los problemas de configuración entre la solución y el resto de la infraestructura de la organización.

La gestión de la configuración integrada ayuda a los equipos de operaciones a ver el impacto potencial de una nueva versión con mayor claridad, lo que ayuda a tomar mejores decisiones con respecto a cuándo se debe realizar la versión.

Gestión de cambios integrada

Con la gestión de cambios integrada, los equipos de operaciones y desarrollo trabajan juntos para comprender cómo el uso de diferentes tecnologías afectará a la organización en su conjunto y luego trabajar para gestionarlo.

Integración continua

Con la integración continua , el código se prueba y analiza cada vez que se registra un código actualizado en el sistema de control de versiones. Esto proporciona información inmediata sobre los defectos del código, lo que permite a los desarrolladores crear una solución de alta calidad con poco riesgo.

Planificación de implementación integrada

Un enfoque de DevOps significa que los ingenieros de operaciones estarán estrechamente involucrados con los desarrolladores cuando se trata de planificar la implementación de productos según un cronograma de implementación organizacional.

Despliegue continuo

Con la implementación continua, cuando la integración es exitosa en un espacio aislado, se promueve automáticamente al siguiente espacio aislado y la integración comienza allí. Esto continúa hasta que llega al punto en el que requiere verificación humana. Esto suele ocurrir en el punto de transición de desarrollo a operaciones.

Soporte de producción

Con DevOps, los desarrolladores no solo trabajan en nuevas versiones, sino que también trabajan para abordar problemas críticos con una solución que ya está en producción. Aunque son el tercer y último equipo que se involucra en la resolución de problemas de producción, es una ocurrencia bastante común y les brinda información sobre los problemas de producción que les ayudan a diseñar mejores soluciones en primer lugar.

Monitorización de aplicaciones

Esto se refiere a la práctica de monitorizar y registrar soluciones en tiempo real una vez que están en producción. Esto nos brinda métricas de desempeño que mejoran la confiabilidad de la solución y previenen fallas.

Cuadros de mando automatizados

DevOps nos permite crear paneles automatizados para varias métricas clave. Por supuesto, todas las métricas no se pueden automatizar, pero varias métricas clave se pueden ver en tiempo real utilizando paneles de control automatizados y proporcionan inteligencia empresarial crítica.

¿Qué son las herramientas de DevOps?

Con el fin de implementar las mejores prácticas de DevOps descritas anteriormente, se han desarrollado ciertas herramientas para automatizar y facilitar diferentes procesos de DevOps.

Si bien las herramientas adecuadas juegan un papel clave en la implementación efectiva de DevOps, el simple hecho de usar las herramientas no significa la adopción de DevOps. Las herramientas solo son relevantes cuando se utilizan como última etapa, después de que la organización ya haya adoptado la filosofía de DevOps y haya un compromiso de ejecutar sus mejores prácticas.

Aunque se suponía que DevOps no se trataba de herramientas, con su evolución en los últimos años, una serie de tecnologías que no formaban parte del concepto original ahora se han convertido en una parte integral de DevOps.

Una cadena de herramientas vinculadas de tecnologías ahora se ha vuelto fundamental para que DevOps produzca el cambio que se supone. En los últimos años ha habido una explosión de herramientas de DevOps para diferentes prácticas de DevOps. A continuación se muestran algunos ejemplos.

Herramientas de lanzamiento

  • Jenkins
  • Travis
  • TeamCity
  • Bambú

Herramientas de gestión de la configuración

  • Puppet
  • Chef
  • Ansible
  • Cfengine
  • Saltstack

Herramientas de orquestación

  • Zookeeper
  • Noah
  • Mesos

Herramientas de monitorización, virtualización y contenedorización

  • AWS
  • OpenStack
  • Vagrant
  • Docker
  • New Relic
  • Sensu
  • Spunk
  • Nagios

Herramientas de codificación

  • Jira
  • Git
  • Eclipse

Herramientas de prueba

  • JUnit
  • Zephyr
  • Selenium
  • Vagrant
  • SoapUI

Metodologías DevOps

DevOps es el descendiente directo del desarrollo de software ágil , nacido de la necesidad de mantenerse al día con una mayor velocidad de desarrollo de software y métodos ágiles de rendimiento. Los avances en el desarrollo ágil destacaron la necesidad de un enfoque más holístico del ciclo de vida de la entrega de software, lo que resultó en DevOps.

«Desarrollo ágil» es un término general para varias metodologías de desarrollo de software iterativas, muchas de las cuales se han trasladado a DevOps:

  • Scrum: un marco en el que las personas pueden abordar problemas complejos de adaptación al tiempo que ofrecen productos del mayor valor posible.
  • Kanban: un método para gestionar la creación de productos con énfasis en la entrega continua sin sobrecargar al equipo de desarrollo. Al igual que Scrum, Kanban es un proceso diseñado para ayudar a los equipos a trabajar juntos de manera más eficaz.
  • Scaled Agile Framework (SAFe): un conjunto de patrones de flujo de trabajo y organización destinados a guiar a las empresas en el escalado de prácticas ágiles y lean. SAFe es uno de un número creciente de marcos que buscan abordar los problemas encontrados al escalar más allá de un solo equipo.
  • Desarrollo ajustado: una traducción de los principios y prácticas de fabricación ajustada al dominio del desarrollo de software. Lean ofrece un marco conceptual, valores y principios, así como las mejores prácticas derivadas de la experiencia, que respaldan a las organizaciones ágiles.
  • Programación extrema (XP): una metodología de desarrollo de software destinada a mejorar la calidad del software y la capacidad de respuesta a los requisitos cambiantes del cliente. XP aboga por lanzamientos frecuentes en ciclos de desarrollo cortos, destinados a mejorar la productividad e introducir puntos de control en los que se pueden adoptar nuevos requisitos de los clientes. Otros elementos de la programación extrema incluyen la programación en pares o la revisión exhaustiva del código, la prueba unitaria de todo el código, no programar las funciones hasta que sean necesarias, una estructura de gestión plana, simplicidad y claridad del código, esperar cambios en los requisitos del cliente a medida que pasa el tiempo y el problema se comprende mejor y la comunicación frecuente con el cliente.

Características y ventajas de las prácticas y procesos de DevOps

Varias prácticas clave pueden ayudar a las organizaciones a innovar más rápidamente mediante la automatización y la optimización del proceso de gestión del desarrollo de software.

Una práctica fundamental de DevOps es realizar actualizaciones pequeñas pero muy frecuentes. Estas actualizaciones suelen ser más incrementales que las actualizaciones realizadas según las prácticas de lanzamiento tradicionales. Las organizaciones que utilizan un modelo DevOps implementan actualizaciones con mucha más frecuencia que las organizaciones que utilizan prácticas tradicionales de desarrollo de software.

La comunicación y la colaboración son piedras angulares del conjunto de prácticas de DevOps. La automatización del proceso de entrega de software establece la colaboración al reunir físicamente los flujos de trabajo y las responsabilidades de desarrollo y operaciones.

La comunicación entre desarrolladores, operaciones e incluso otros equipos, como marketing y ventas, permite que todas las partes de la organización se alineen más estrechamente con los objetivos y proyectos.

Las prácticas de DevOps, como la integración continua y la entrega continua, permiten a los equipos de DevOps entregar de forma rápida, segura y confiable.

La supervisión y el registro ayudan a los equipos de DevOps a realizar un seguimiento del rendimiento de las aplicaciones para que puedan reaccionar rápidamente a los problemas.