Menú

¿Qué es DevOps?

lupa gris apoyada de costado
Temas

DevOps es un marco de trabajo y una filosofía en constante evolución que promueve un mejor desarrollo de aplicaciones en menos tiempo y la rápida publicación de nuevas o revisadas funciones de software o productos para los clientes.

Con DevOps se promueve una comunicación continua más fluida, la colaboración, la integración, la visibilidad y la transparencia entre equipos de desarrollo de aplicaciones (Dev) y sus homólogos en operaciones tecnológicas (Ops).

Esta relación estrecha entre «Dev» y «Ops» se extiende a cada una de las fases del ciclo de vida de DevOps: desde la planificación inicial del software a las fases de codificación, compilación, pruebas y publicación, y en la puesta en marcha, las operaciones y la supervisión continua. Esta relación impulsa un bucle de retroalimentación continua con los clientes sobre las mejoras, el desarrollo, las pruebas y la puesta en marcha. Uno de los resultados de todos estos esfuerzos puede ser la publicación continua y más rápida de las adiciones y los cambios que se necesitan en las funciones.

Algunas personas agrupan los objetivos de DevOps en cuatro categorías: cultura, automatización, medición y uso compartido (CAMS, por sus siglas en inglés), y las herramientas de DevOps pueden ayudar en estas tareas. Con estas herramientas, los flujos de trabajo de desarrollo y operaciones se convierten en tareas más optimizadas y colaborativas al automatizar tareas que antes eran manuales, estáticas o que llevaban mucho tiempo, y que son necesarias para la integración, el desarrollo, las pruebas, la puesta en marcha o la supervisión.

Por qué es tan importante DevOps

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; por ejemplo, con actualizaciones, funciones o versiones de producto más frecuentes. Puede reflejarse en la rapidez con la que llega al cliente una nueva versión del producto o una nueva función manteniendo los mismos niveles de calidad y seguridad, o en el poco tiempo que se necesita para identificar un problema o un error y, a continuación, solucionarlo y volver a publicar una versión corregida.

Sin duda, todo este trabajo de DevOps se sustenta en una infraestructura subyacente con un rendimiento, una disponibilidad y una fiabilidad fluida y sin interrupciones del software, el cual se desarrolla y se prueba en primer lugar y, luego, se lanza a la fase de producción.

Métodos de DevOps

Existen varios métodos de DevOps comunes que las organizaciones usan para acelerar y mejorar el desarrollo y las publicaciones de productos. Normalmente se presentan como prácticas y metodologías de desarrollo de software. Entre los más populares están Scrum, Kanban y Agile:

  • Scrum. Scrum define la forma en la que los miembros de un equipo deben colaborar para conseguir entre todos acelerar los proyectos de desarrollo y control de calidad. Las prácticas de Scrum incluyen flujos de trabajo principales y terminología específica (sprints, bloques de tiempo, scrum diario [reunión]), y roles designados (Scrum Master, propietario del producto [product owner]).
  • Kanban. Kanban se originó a partir de las eficiencias que se alcanzaron en la fábrica de Toyota. Kanban prescribe que el estado «en curso» (WIP, del inglés «work in progress») de un proyecto de software debe controlarse en un tablero Kanban.
  • Agile. Los anteriores métodos de desarrollo de software Agile siguen teniendo una gran influencia en las herramientas y las prácticas de DevOps. Muchos de estos métodos, incluidos Scrum y Kanban, han incorporado elementos de la programación Agile. Algunas de estas prácticas están asociadas a una mayor capacidad de respuesta a los continuos cambios en requisitos y necesidades, los requisitos de documentación en forma de casos prácticos, la realización de reuniones diarias para ponerse al día y la incorporación de comunicación continua con los clientes para conocer sus opiniones. En Agile también se estipulan ciclos de desarrollo de software más cortos en lugar de los tradicionales métodos de desarrollo «en cascada» que se prolongaban en el tiempo.

Cadena de herramientas de DevOps

Los seguidores de las prácticas de DevOps a menudo incorporan a su «cadena de herramientas» de DevOps particular algunas herramientas que se adaptan perfectamente a estos métodos. El objetivo de estas herramientas es tratar de optimizar, acortar y automatizar las diversas etapas del flujo de trabajo de creación de software (o «canalización»). Muchas de estas herramientas también promueven los postulados principales de DevOps, como son la automatización, la colaboración y la integración entre los equipos de desarrollo y operaciones. A continuación se ofrece un ejemplo de herramientas que se emplean en las diversas etapas del ciclo de DevOps.

  • Planificación. En esta fase se definen los requisitos y valores empresariales. Algunas herramientas de muestra son Jira o Git, con las cuales se puede hacer un seguimiento de los problemas conocidos y llevar a cabo la gestión de los proyectos.
  • Codificación. Esta fase implica el diseño del software y la creación del código. Algunas herramientas de muestra son GitHub, GitLab, Bitbucket o Stash.
  • Compilación. En esta fase se gestionan las versiones y las compilaciones del software, y se utilizan herramientas automatizadas que ayudan a compilar y crear paquetes de código para publicarlos después para la producción. Se utilizan repositorios de código fuente o repositorios de paquetes que también «empaquetan» la infraestructura que se necesita para el lanzamiento del producto. Algunas herramientas de muestra son Docker, Ansible, Puppet, Chef, Gradle, Maven o JFrog Artifactory.
  • Prueba. Esta fase incluye la realización de pruebas continuas (manuales o automatizadas) para garantizar la calidad de la programación. Algunas herramientas de muestra son JUnit, Codeception, Selenium, Vagrant, TestNG o BlazeMeter.
  • Puesta en marcha. En esta fase se emplean herramientas que ayudan a gestionar, coordinar, programar y automatizar las tareas de producción de las versiones de productos. Algunas herramientas de muestra son Puppet, Chef, Ansible, Jenkins, Kubernetes, OpenShift, OpenStack, Docker o Jira.
  • Funcionamiento. En esta fase se gestiona el software durante su producción. Algunas herramientas de muestra son Ansible, Puppet, PowerShell, Chef, Salt o Otter.
  • Supervisión. En esta fase se identifica y recopila información sobre problemas que surgen en una versión de software específica que se encuentra en producción. Algunas herramientas de muestra son New Relic, Datadog, Grafana, Wireshark, Splunk, Nagios o Slack.

Prácticas de DevOps

Las prácticas de DevOps son un reflejo de la idea de automatización y mejora continuas, y muchas de ellas se centran en una o en varias fases del ciclo de desarrollo. Estas prácticas incluyen lo siguiente:

  • Desarrollo continuo. Esta práctica abarca las fases de planificación y codificación del ciclo de DevOps. Puede incluir también mecanismos de control de versiones.
  • Realización de pruebas continuas. Esta práctica incorpora continuas pruebas de código automatizadas y programadas con antelación que se realizan a medida que el código de aplicación se está creando o actualizando. Gracias a estas pruebas, el código pasa antes a la fase de producción.
  • Integración continua (CI). En esta práctica se combinan herramientas de gestión de configuración (CM) con otras herramientas de pruebas y desarrollo para saber qué cantidad del código que se está creando está listo para pasar a producción. Para ello, debe existir un intercambio fluido de información entre las fases de prueba y de desarrollo que permita identificar y resolver con rapidez problemas en el código.
  • Entrega continuaEsta práctica automatiza la introducción de cambios en el código para pasar a un entorno de preproducción o de almacenamiento provisional tras la fase de pruebas. Un miembro de la plantilla podría entonces decidir si es conveniente promover estos cambios de código a la fase de producción.
  • Puesta en marcha continua (CD). Al igual que sucede con la entrega continua, esta práctica automatiza el lanzamiento de código nuevo o modificado a la fase de producción. Una empresa que pone en práctica la puesta en marcha continua podría publicar cambios en código o funciones varias veces al día. Las tecnologías de contenedor, como Docker y Kubernetes, hacen posible esta fase de puesta en marcha continua al ayudar a mantener la coherencia del código entre los diferentes entornos y plataformas de puesta en marcha.
  • Supervisión continua. Esta práctica implica la supervisión continua del código en la fase de producción y la infraestructura subyacente que la sustenta. A través de un bucle de retroalimentación en el que se notifican errores o problemas, este podría volver a la fase de desarrollo.
  • Infraestructura como código. Esta práctica se puede utilizar durante varias fases de DevOps para automatizar el aprovisionamiento de la infraestructura que se necesita para publicar el software. Los desarrolladores añaden «código» de infraestructura procedente de las herramientas de desarrollo actuales. Por ejemplo, los desarrolladores podrían crear un volumen de almacenamiento bajo demanda desde Docker, Kubernetes u OpenShift. Gracias a esta práctica, los equipos de operaciones también pueden supervisar las configuraciones de entorno, registrar los cambios y simplificar la reversión de las configuraciones.

Ventajas de DevOps

Los partidarios de DevOps describen varias ventajas técnicas y empresariales con las que, en última instancia, se consiguen clientes más satisfechos. Entre algunas de las ventajas de DevOps se incluyen las siguientes:

  • Una mejor y más rápida entrega de productos
  • Resolución de problemas en menos tiempo y con menor complejidad
  • Mejor escalabilidad y disponibilidad
  • Entornos de funcionamiento más estables
  • Mejor utilización de los recursos
  • Mayor automatización
  • Mayor visibilidad de resultados del sistema
  • Mayor innovación

Historia de DevOps

Muchos de los métodos de DevOps que se utilizan para sacar el máximo partido a las fases de desarrollo y puesta en marcha de software se basan en las anteriores metodologías de desarollo de software Agile y de programación Lean. Sin embargo, DevOps surgió en un principio a partir de varios movimientos de base que trataban de harmonizar las actividades de desarrolladores y sus homólogos en operaciones.

En la primera década de los años 2000, observamos la necesidad de mantener la disponibilidad de sitios web populares, como Google y Flickr, frente a otros casos masivos de éxito. Esta necesidad generó que se comenzaran a demandar ingenieros de fiabilidad de software (SRE, «software reliability engineer»); es decir, responsables de operaciones que trabajaran codo con codo con los desarrolladores para garantizar que los sitios seguirían funcionando una vez que se lanzara el código en la fase de producción.

En 2009, los ingenieros de Flickr John Allspaw y Paul Hammond presentaron en una conferencia su propia metodología de DevOps. La presentación se llamó «10+ Deploys per Day: Dev and Ops Cooperation at Flickr» (Más de 10 puestas en marcha al día: la cooperación entre departamentos de desarrollo y operaciones en Flickr) y, en ese mismo año, Patrick Debois organizó la primera «jornada de DevOps» en Bélgica. También se incorporó el hashtag #DevOps, el cual fue ganando adeptos a medida que se iban celebrando más «jornadas de DevOps» en todo el mundo.

Durante todos los años siguientes, se fueron desarrollando y proponiendo marcos y herramientas de código abierto y del sector para ir ampliando los objetivos de DevOps.

NetApp y DevOps

NetApp ayuda a que se mejoren los resultados empresariales con DevOps: los equipos de operaciones ofrecen infraestructura automatizada con una menor carga de ingeniería, y los ingenieros pueden hacer su trabajo en entornos fiables y predecibles con una menor fricción. Con la tecnología de NetApp®, puede prestar los servicios y las funcionalidades que necesita su organización con total confianza para maximizar la productividad de los desarrolladores en los entornos de las instalaciones y del cloud.

NetApp hace que los desarrolladores y los equipos de pruebas, de calidad y de operaciones puedan consumir recursos de infraestructura más fácilmente (por ejemplo, con volúmenes de almacenamiento persistente) en forma de código; y todo ello a partir de herramientas que son habituales en la canalización de DevOps. Entre los ejemplos se incluyen las API de almacenamiento de NetApp y las integraciones de IAC con herramientas como Puppet, Ansible, Docker, Kubernetes y OpenShift.

No obstante, no solo NetApp facilita la tarea de los desarrolladores a la hora de consumir almacenamiento como código, sino que la tecnología de NetApp también permite que las operaciones se aprovisionen de forma segura y ofrezcan recursos al personal que se encarga de las fases de desarrollo y pruebas. De este modo, los desarrolladores y los evaluadores pueden acelerar los ciclos de pruebas y codificación al autoaprovisionar funciones de almacenamiento rápidas que consumen menos tiempo, como snapshots o clones. Con estas funciones, las copias de datos de producción en tiempo real o los conjuntos de código se pueden aprovisionar como código en cuestión de segundos o minutos y, por tanto, acelerar el flujo de trabajo de desarrollo y control de calidad.

El compromiso de NetApp con la comunidad se extiende a thePub. Esta comunidad de desarrolladores promueve la colaboración, comparte consejos y trucos, y genera debates en torno a ideas sobre los últimos protocolos y prácticas de DevOps.

Siga leyendo sobre DevOps