DevOps ¿Qué es?

DevOps es la intersección de desarrollo, operaciones de tecnología y calidad.

DevOps es un acrónimo inglés de desarrollo ( development ) y operaciones ( operations) es una práctica de ingeniería de software que tiene como objetivo unificar el desarrollo de software (Dev) y la operación del software (Ops). La principal característica de DevOps es defender la automatización y el monitoreo en todos los pasos de la construcción del software, desde la integración, las pruebas, la liberación hasta la implementación y la administración de la infraestructura. DevOps apunta a ciclos de desarrollo más cortos, mayor frecuencia de implementación y lanzamientos más confiables, en estrecha alineación con los objetivos del negocio.

Principios del manifiesto ágil resumidos.

Los proyectos DevOps utilizan procesos estandarizados, permitiendo la automatización de estos para mejorar su fiabilidad y, por extensión, la calidad del software. De esta forma, la automatización, combinada con otros principios de DevOps, facilita que los equipos puedan focalizarse en proporcionar valor a la entrega del software, siguiendo el primer principio del Manifiesto Agile: “Nuestra mayor prioridad es satisfacer al cliente mediante la entrega temprana y continua de software con valor”.

Los procesos de automatización se desarrollan en cuatro áreas:

1. Construcción Automatizada

Basada en técnicas de Integración Continua, con generación de builds automatizados que incluirán tanto los desarrollos de software como las pruebas que permitan localizar lo antes posible errores de código o en la propia integración de éste.

Para tal fin se utilizan herramientas como Jenkins, Bamboo o Team Foundation Build, apoyadas en otras herramientas de gestión y construcción de proyectos, como Ant, Maven, Nant o MSBUILD.

2. Testing Automatizado

La automatización de las pruebas es una de las partes básicas de los proyectos DevOps. En este aspecto no debemos pensar solo en la automatización de las pruebas funcionales, sino a todos los niveles.

  • Automatización de pruebas unitarias. Deberán ser las pruebas más voluminosas. Cada clase o método tendrá que disponer de su prueba automatizada. Esto se convertirá en la base de los desarrollos y en lo que permitirá construir un software robusto y de alta calidad. Para este fin surgen herramientas como JUnit o Cactus.
  • Automatización de Servicios, APIS o integración de componentes. Estas pruebas serán muy estables, sufrirán pocas modificaciones y asegurarán la integración del software. Herramientas como SoapUI o JMeter.
  • Automatización de pruebas funcionales. Será preciso definir regresiones que aseguren el cumplimiento de los requisitos de negocio solicitados. Es la clave para garantizar que el software cumple las expectativas para las que fue concebido. Estas necesidades se cubren con herramientas basadas en BDD (Behavior-Driven Development), como Cucumber o SpectFlow en lenguaje Gherkin (lenguaje a alto nivel que permite la comprensión del código por los usuarios). También a través de herramientas clásicas de automatización, tales como HP UFT, Rational Functional Tester (RFT) o EggPlant.
  • Automatización de pruebas de rendimiento. Se automatizan pruebas de carga y estrés, observando la respuesta del software ante un número de peticiones determinado y ante situaciones extremas. Para la automatización de las pruebas de rendimiento se utilizarán herramientas como HP Load Runner o JMeter.

3. Despliegue Automatizado

Hay que pensar que serán despliegues constantes, con pequeños cambios, y que deben ser rápidos y fiables. Es preciso automatizar tanto las subidas de código como las modificaciones en base de datos. Con este fin aparecen herramientas como XL Deploy o Clarive Lean Application Delivery.

4. Aprovisionamiento Automatizado

El aprovisionamiento automatizado de los sistemas permite que todos los interlocutores dispongan del mismo sistema en el mismo momento en el tiempo. Para ello se vigila la construcción de las máquinas y se mantiene el control sobre los paquetes instalados, cuentas de usuario, configuraciones, etc. En este caso, se utilizan herramientas como Chef, Puppet o SaltStack.

Aplicando a estas cuatro áreas se encuentra el concepto “Everything as Code”, basado en el uso de diferentes herramientas de desarrollo a través de las cuales es posible automatizar las tareas que en una organización tradicional, podría costar varios días llevarlas a cabo. Un ejemplo es el despliegue y provisión de un nuevo servidor: desde que el equipo de desarrollo hace la petición hasta que el equipo de operaciones la ejecuta pasa por diferentes estados y fases que ralentizan el trabajo.

Comparación Iass, Pass y SaaS.

De esta tendencia a utilizar la programación como herramienta principal, junto con las nuevas necesidades de agilidad que está demandando el mercado, nacen conceptos como PaaS (Platform as a Service), IaaS (Infrastructure as a Service) o SaaS (Software as a Service), en los que la automatización representa un papel protagonista, permitiendo definir servicios ágiles y fiables, y difuminando, así, las barreras existentes entre los equipos de desarrollo y los de operaciones.

En definitiva, la automatización es uno de los pilares fundamentales en los que se basan los principios de DevOps. Invertir en la automatización de los procesos, liberando a los equipos de tareas que no aportan valor y que les permitan orientar sus esfuerzos hacia la mejora del producto final, sería un buen comienzo para las organizaciones que tienen como objetivo llegar a ser DevOps.

Mis estimados, esta es la tendencia más reciente para contratar ingenieros de sistemas: Tener habilidades de DevOps para implementar en las empresas, de tal manera que las cosas se hagan «rápidas» pero con «calidad». ¿Te estás preparando para ello? ¿Conoces las herramientas suficientes para ser DevOps?