El concepto DevOps viene definido por varios factores, tales como trabajo en equipo, creatividad y automatización, siendo este último uno de los más relevantes, ya que la automatización afecta directamente a todos los procesos del proyecto.
Los proyectos DevOps utilizan procesos estandarizados, permitiendo la automatización de estos para mejorar su fiabilidad y, por extensión, la calidad del SW. 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”.
Para ello, los procesos de automatización se desarrollan en cuatro áreas:
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 MSBUIL.
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.
Despliegue Automatizado
Para poder llevar a cabo la política de despliegue continuo utilizada en los proyectos DevOps es necesario que estos procesos sean automatizados. 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.
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 Salt.
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, en la que existieran silos de responsabilidad, 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.
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.