DevOps es una metodología de desarrollo de software que acelera la entrega de aplicaciones y servicios de alto rendimiento mediante la combinación y automatización del trabajo de los equipos de desarrollo de software (Dev) y operaciones de TI (Ops).
DevOps describe tanto un proceso de desarrollo de software como un cambio de cultura organizacional que fomenta la coordinación y la colaboración entre el equipo de desarrollo y los equipos de operaciones de TI . Estos dos grupos tradicionalmente practicaban por separado el uno del otro en silos distintos. En la metodología DevOps, trabajan como un equipo con un conjunto de herramientas y prácticas compartidas.
Las características distintivas de DevOps son la integración continua y la entrega continua (CI/CD), que admiten actualizaciones de software más pequeñas y rápidas. Con CI/CD, se fusionan fragmentos más pequeños de código nuevo en la base de código a intervalos frecuentes y luego se integran, prueban y preparan automáticamente para su despliegue en el entorno de producción.
DevOps es una evolución de la metodología ágil de desarrollo de software, que surgió como una alternativa a la metodología en cascada. En el enfoque en cascada, los equipos de desarrollo de software dedicaron meses a desarrollar grandes cuerpos de código, que luego se sometieron a meses de pruebas antes del lanzamiento. Por el contrario, el desarrollo ágil adopta un enfoque iterativo para el ciclo de vida de la entrega de software.
DevOps agrega nuevos procesos y herramientas a la metodología ágil, en particular la automatización de gran parte del pipeline de CI/CD.
En última instancia, DevOps consiste en satisfacer las demandas de los usuarios de software de nuevas características frecuentes e innovadoras y de rendimiento y disponibilidad ininterrumpidos.
DevOps implica tanto un conjunto de flujos de trabajo automatizados, llamado "ciclo de vida de DevOps", como un cambio cultural para respaldar esos flujos de trabajo.
El ciclo de vida de DevOps está diseñado para optimizar la entrega rápida de software de alta calidad. Incluye un serial de flujos de trabajo iterativos y automatizados que se ejecutan dentro de un ciclo de vida de desarrollo automatizado e iterativo más grande.
Los nombres y órdenes de los flujos de trabajo pueden variar de una organización a otra, pero el ciclo de vida de DevOps generalmente incluye ocho pasos principales.
En primer lugar, los equipos estudian nuevas características y funciones para la próxima versión. Durante este flujo de trabajo, se recurre al feedback de los usuarios, estudios de casos y entradas de stakeholders internos, como ingenieros de plataforma e infraestructura, seguridad, cumplimiento de normas, gobernanza, gestión de riesgos y equipos de línea de negocio.
El objetivo de la etapa de planeación es crear un documento de cartera de pedidos. El backlog es una lista priorizada de nuevas característica, mejoras y arreglos de errores que se irán agregando al producto con el tiempo.
El equipo de DevOps codifica las características nuevas y mejoradas identificadas en el backlog. Las prácticas de programación comunes en DevOps incluyen:
Los desarrolladores suelen emplear sus estaciones de trabajo locales para escribir y probar el código antes de enviarlo a la siguiente fase de la delivery pipeline.
El nuevo código se integra en la base de código existente, luego se prueba y se empaqueta para su lanzamiento y despliegue. Las actividades que a menudo se automatizan en esta etapa incluyen la fusión de los cambios de código en una copia maestra; la colocación del código actualizado en un repositorio; y la compilación, prueba y empaquetado del código en un archivo ejecutable.
En DevOps, el resultado de la fase de compilación a menudo se almacena en un repositorio binario. A diferencia de un repositorio de código fuente, un repositorio binario almacena salidas empaquetadas, como bibliotecas y archivos ejecutables, para ser reutilizados en otras fases del ciclo de vida del desarrollo.
Los equipos de DevOps utilizan pruebas, generalmente pruebas automatizadas, para asegurarse de que la aplicación actualizada cumpla con los estándares y requisitos adecuados.
El enfoque DevOps tradicional incluye una fase de prueba discreta que se produce entre la construcción y la liberación. Sin embargo, DevOps ha avanzado de tal manera que ciertos elementos de prueba pueden ocurrir a lo largo del proceso. Las pruebas unitarias (pruebas de pequeñas piezas de código aisladas) pueden ejecutarse durante la fase de programación. Después de integrar el nuevo código, los programas de linting pueden analizarlo en busca de errores.
Las pruebas continuas ayudan a implementar el principio de pruebas de desplazamiento a la izquierda, un enfoque de desarrollo de software que enfatiza mover las actividades de prueba al principio del proceso de desarrollo. Este enfoque ayuda a las organizaciones a identificar los problemas antes y a solucionarlos de forma más eficaz.
La etapa de lanzamiento es el último flujo de trabajo antes de que los usuarios accedan a la aplicación. Esta etapa incluye una serie de pruebas finales para garantizar que el software cumpla con los estándares de calidad, cumplimiento y seguridad y esté listo para uso externo.
Si se encuentran errores o defectos, el equipo tiene la oportunidad de interceptar y remediar cualquier problema antes de que los usuarios lo vean. Cuando se solucionan todos los problemas y la aplicación cumple con todos los requisitos, se puede lanzar al entorno de producción. En la mayoría de los pipelines de DevOps, este proceso está automatizado en gran medida.
La etapa de lanzamiento también podría implicar el provisioning de componentes de infraestructura como servidores, bases de datos y balanceadores de carga. DevOps a menudo utiliza infraestructura como código para automatizar este proceso.
En esta etapa, el proyecto se mueve a un entorno de producción donde los usuarios pueden acceder a la aplicación actualizada.
Muchas organizaciones despliegan primero en un subconjunto de usuarios finales para garantizar que la aplicación funcione correctamente. Cuando se establece la estabilidad, la aplicación se puede desplegar para todos los usuarios.
En esta etapa, los equipos de DevOps verifican que las nuevas características funcionen sin problemas y estén disponibles para los usuarios sin interrupciones en el servicio. Emplean herramientas de gestión y Observabilidad automatizadas para monitorear y optimizar continuamente las operaciones y cerciorar de que la red, el almacenamiento, la plataforma, la computación y la postura de seguridad funcionen correctamente.
En esta fase, los equipos recopilan y analizan el feedback de los usuarios y las lecciones aprendidas de flujos de trabajo anteriores para ayudar a mejorar los procesos y productos en el futuro. Este seguimiento continuo de las características, las funciones, el rendimiento y el valor empresarial sirve de base para la planeación de la próxima versión de nuevas características y mejoras.
La cultura DevOps se caracteriza por un compromiso con la colaboración, la comunicación y la automatización.
A nivel de administración de proyectos, DevOps requiere comunicación continua y responsabilidad compartida entre todos los stakeholders en la entrega de software para innovar rápidamente y centrarse en la calidad desde el principio. Stakeholders incluyen equipos de desarrollo de software y operaciones, para ciertos equipos, pero también de cumplimiento de normas, gobierno, riesgo, línea de negocio y seguridad.
A nivel técnico, DevOps requiere un compromiso con las herramientas automatizadas que mantienen los proyectos en movimiento dentro y entre flujos de trabajo. Por ejemplo, las pruebas automatizadas, el despliegue y el aprovisionamiento de componentes de infraestructura pueden ayudar a acelerar la entrega de proyectos y reducir los errores.
DevOps también requiere retroalimentación y medición que permita a los equipos optimizar continuamente los ciclos y mejorar la calidad y el rendimiento del software.
Para adoptar una cultura DevOps, las organizaciones a menudo deben romper los silos y reorganizar al personal en equipos DevOps multifuncionales y autónomos. Estos equipos trabajan en los proyectos de principio a fin (desde la planeación hasta la retroalimentación) sin hacer traspasos ni esperar la aprobación de otros equipos. En el contexto del desarrollo ágil de software, esta responsabilidad y colaboración son la base de un enfoque compartido sobre el valor y los resultados superiores.
DevSecOps es la abreviatura de desarrollo, seguridad y operaciones. Es una extensión de DevOps que incluye prácticas de ciberseguridad y equipos de seguridad en cada etapa del desarrollo de software.
En el pasado, la seguridad se agregaba al final del ciclo de desarrollo, casi como una ocurrencia de último momento. Un equipo de seguridad independiente aplicó medidas de seguridad, y un equipo de control de calidad (QA) independiente probó estas medidas.
DevSecOps integra la seguridad de las aplicaciones y la infraestructura en las prácticas y herramientas DevOps desde el principio del ciclo de vida de desarrollo del software. Afronta los problemas de seguridad a medida que van surgiendo, cuando son más sencillos, rápidos y económicos de resolver, y antes de su despliegue en producción.
Debido a esta capacidad de acelerar la entrega de software, reducir costos y mejorar la postura de seguridad, muchas organizaciones ahora están adoptando DevSecOps como un enfoque estándar para DevOps.
Al acercar el trabajo de los desarrolladores y las operaciones, DevOps puede aumentar la eficiencia y reducir las cargas de trabajo. Debido a que los desarrolladores y los equipos de operaciones comparten flujos de trabajo y responsabilidades, hay menos sorpresas a medida que avanzan los proyectos. Los equipos comprenden más claramente cómo se espera que su código se desempeñe en el tiempo de ejecución.
Los equipos de DevOps pueden entregar código nuevo más rápido mediante una mayor colaboración y el uso de arquitecturas de microservicios, en las que cada aplicación se compone de muchos componentes o servicios poco acoplados y desplegables de forma independiente.
Con los microservicios, equipos separados pueden trabajar en diferentes componentes de nuevas versiones simultáneamente para acelerar los ciclos de desarrollo. Este enfoque impulsa la mejora continua, las innovaciones y los arreglos de errores al mercado antes.
DevOps también acelera y automatiza el proceso de creación, prueba y despliegue de versiones de software a través de las prácticas de entrega continua e integración continua. Las organizaciones pueden adaptarse a los cambios del mercado con mayor rapidez y satisfacer mejor las necesidades de los clientes.
Las pruebas automatizadas ayudan a garantizar la calidad y confiabilidad de las actualizaciones de software e infraestructura. La monitorización y el registro Verify el rendimiento de la aplicación en tiempo real.
La automatización DevOps acelera el desarrollo, las pruebas y la producción de código para que las organizaciones puedan escalar más rápido y con mayor eficiencia.
Por ejemplo, si una organización necesita agregar rápidamente más aplicaciones para satisfacer la demanda empresarial, DevOps elimina la necesidad de un proceso de programación largo, lento y propenso a errores para implementar esos cambios.
Con DevSecOps, la seguridad se integra en el proceso de desarrollo desde el principio, en lugar de actualizar al final. Los equipos incorporan pruebas y auditorías de seguridad en los flujos de trabajo para ayudar a aplicar los estándares de seguridad y realizar un seguimiento del cumplimiento de los mandatos normativos.
Para respaldar los métodos y la cultura de DevOps, las implantaciones de DevOps requieren cadenas de herramientas especializadas que permitan la colaboración asíncrona, la integración perfecta de los flujos de trabajo de DevOps y la mayor automatización posible durante todo el ciclo de vida de DevOps.
Las categorías de herramientas DevOps incluyen:
Los entornos de programación controlados por versiones permiten que varios desarrolladores gestionen los cambios de código, realicen un seguimiento de los cambios y trabajen en colaboración en la misma base de código. Estos repositorios de código suelen integrarse con herramientas de CI/CD, pruebas y seguridad a través de interfaz de programación de aplicaciones (API), por lo que cuando el código se confirma en el repositorio, puede mover al siguiente paso. Los sistemas de control de versiones populares incluyen Git (a menudo utilizado en GitHub), Apache Subversion y Mercurial.
La canalización CI/CD ayuda a automatizar las principales tareas de desarrollo de software, como la integración del código, las pruebas de calidad del código, la compilación y empaquetado del código y el despliegue del software. Entre las herramientas más populares de esta categoría se encuentran Jenkins, CircleCI y TeamCity.
La contenerización encapsula aplicaciones en paquetes optimizados y portátiles llamados "contenedores" que pueden ejecutarse en cualquier plataforma. Esta capacidad hace que la contenerización sea útil para los ciclos rápidos de lanzamiento y gestión de DevOps. Las organizaciones suelen utilizar herramientas de código abierto, como Docker y Kubernetes, para ayudar a crear, orquestar y automatizar el despliegue de aplicaciones en contenedores.
La mayoría de los principales proveedores de la nube, incluidos Amazon Web Services (AWS), Google, Microsoft Azure e IBM Cloud®, ofrecen algún tipo de solución de canalización DevOps gestionada que incluye herramientas de contenedorización.
Las herramientas de gestión de la configuración ayudan a los equipos de DevOps a configurar la infraestructura, el software y las aplicaciones en diversos entornos de TI. Estas herramientas automatizan tareas de configuración como la instalación y el despliegue de hardware o la aplicación de parches de software para garantizar la consistencia, reducir errores y mejorar la confiabilidad. Las herramientas de administración de configuración más populares incluyen Puppet, Chef y SaltStack.
IaC emplea un lenguaje de programación descriptivo de alto nivel para automatizar el aprovisionamiento de la infraestructura de TI. En lugar de instruir a un sistema sobre cómo aprovisionar infraestructura, los desarrolladores describen el estado final deseado y el software de IaC maneja el resto.
Esta automatización elimina la necesidad de que los desarrolladores dediquen tiempo y esfuerzo a realizar scripts manualmente sobre cambios en la infraestructura de TI cada vez que desarrollan, prueban o despliegan una aplicación de software.
Entre las herramientas de IaC más populares se encuentran Terraform, Pulumi y AWS CloudFormation.
Las herramientas de supervisión y observabilidad ayudan a los equipos de DevOps a identificar y resolver problemas del sistema, como tiempos de respuesta lentos o consumo excesivo de recursos. También recopilan y analizan datos en tiempo real para revelar cómo los cambios de código afectan el rendimiento de las aplicaciones.
Las herramientas populares de observabilidad y monitoreo incluyen Prometheus, Datadog, IBM Instana®, New Relic y Splunk.
Estas herramientas recopilan feedback de los usuarios, ya sea a través de mapeo de calor (registro de las acciones de los usuarios en la pantalla), encuestas, sondeos o emisión de boletos de autoservicio. Algunas herramientas también monitorean las redes sociales para recopilar feedback de los usuarios y medir la satisfacción con las actualizaciones de las aplicaciones.
Ingeniería de confiabilidad del sitio (SRE) y DevOps son estrategias complementarias en ingeniería de software que rompen los silos y conducen a una entrega de software más eficiente y confiable. Los equipos de DevOps se centran en realizar actualizaciones y desplegar nuevas características, mientras que las prácticas de ingeniería de confiabilidad de sitios (SRE) protegen la confiabilidad de los sistemas a medida que escalan.
ingeniería de confiabilidad de sitios (SRE) combina DevOps y las Operaciones de TI tradicionales para automatizar tareas que, de otro modo, los administradores de sistemas podrían realizar manualmente, como la gestión del sistema de producción, la gestión de cambios y la respuesta a incidentes. SRE busca transformar al administrador de sistemas tradicional en un ingeniero.
ingeniería de confiabilidad de sitios (SRE) tiene como objetivo equilibrar el deseo de una organización de un desarrollo rápido de aplicaciones con su necesidad de cumplir con los niveles de rendimiento y disponibilidad especificados en los acuerdos de nivel de servicio (SLA) con los clientes.
Los ingenieros de confiabilidad del sitio logran este equilibrio determinando un nivel aceptable de riesgo operativo causado por las aplicaciones, al que llaman "cotización de error", y automatizando las operaciones para alcanzar ese nivel.
En un equipo multifuncional de DevOps, SRE puede servir como puente entre el desarrollo y las operaciones. ingeniería de confiabilidad de sitios (SRE) proporciona métricas y Automatización para ayudar a los equipos a impulsar los cambios de código y las nuevas características a través de la canalización DevOps lo más rápidamente posible, sin violar los términos de los SLA de la organización.
La inteligencia artificial (IA) y el machine learning (ML) están transformando rápidamente el mundo de DevOps. Con la capacidad de automatizar tareas y analizar procesos complejos, estas tecnologías ayudan a que DevOps sea más rápido, más confiable y más seguro. Según el IBM Institute for Business Value, el 25 % de los desarrolladores de aplicaciones y el 40 % de los evaluadores de aplicaciones afirman que la IA y la automatización han aumentado su productividad.
Algunas de las áreas funcionales de impacto incluyen:
La IA puede analizar grandes cantidades de datos para predecir y direccione problemas de procesos, como fallas de aplicaciones o cuellos de botella en los procesos, antes de que sucedan. Por ejemplo, la IA puede predecir aumentos repentinos en el tráfico de red y aprovisionar automáticamente más recursos para ayudar a prevenir interrupciones del servicio o interrupciones del sistema.
La IA puede identificar vulnerabilidades de seguridad en aplicaciones e infraestructura, y escanear registros de eventos para detectar posibles amenazas en tiempo real. Por ejemplo, la IA puede detectar actividades sospechosas que podrían indicar que es probable que se produzca un ataque cibernético, como una filtración de datos o un ataque a la cadena de suministro, o que ya esté en marcha.
Al identificar errores ocultos, problemas de rendimiento y anomalías de software, la IA puede ayudar a los desarrolladores a abordar los problemas de aplicación antes de que los problemas se intensifiquen. Por ejemplo, la IA puede marcar problemas que requieren atención, como un aumento inesperado en el uso de CPU o una falla en múltiples microservicios.
IA puede revisar y probar el código para ayudar a garantizar que esté listo para el despliegue más rápido que los métodos manuales. Por ejemplo, las herramientas de IA pueden analizar los cambios de código para detectar posibles errores o identificar vulnerabilidades de seguridad que se crearon involuntariamente durante una actualización de software.
Los procesos y herramientas de DevOps continúan expandiéndose y evolucionando para abordar los últimos desafíos en TI y negocios. Algunas de las tecnologías y prácticas que están impulsando el futuro de DevOps incluyen:
La ingeniería de plataformas es la disciplina de crear y gestionar plataformas con herramientas estandarizadas, flujos de trabajo automatizados y entornos congruentes para aumentar la productividad de los desarrolladores. La ingeniería de plataformas puede aumentar la productividad y acelerar los procesos de DevOps al proporcionar a los equipos capacidades de autoservicio para tareas como el aprovisionamiento de recursos, la configuración de software y la contenerización de aplicaciones.
La observabilidad es la capacidad de comprender el estado o condición interna de un sistema complejo basar únicamente en el conocimiento de sus salidas externas, específicamente su telemetría. Las herramientas de Observabilidad pueden proporcionar insights más detallados sobre los comportamientos del sistema que las práctices tradicionales de supervisión de DevOps, que se centran en métricas predefinidas.
Con su capacidad para aislar las causas principales e identificar proactivamente los problemas en sistemas complejos, las herramientas de observabilidad se están convirtiendo en componentes cada vez más vitales de los flujos de trabajo de DevOps.
Las herramientas de código bajo y sin código permiten que las personas con conocimientos de programación limitados participen en flujos de trabajo de DevOps. Con interfaces de arrastrar y soltar, los usuarios empresariales pueden crear aplicaciones sin necesidad de programación tradicional. Este enfoque agiliza la creación y la entrega de aplicaciones diseñadas para satisfacer necesidades comerciales específicas.
Automatice la entrega de software para cualquier aplicación on premises, en la nube o en el mainframe.
Utilice el software y las herramientas de DevOps para crear, desplegar y gestionar aplicaciones nativas de la nube en múltiples dispositivos y entornos.
Desbloquee nuevas capacidades e impulse la agilidad empresarial con los servicios de IBM de asesoramiento sobre la nube. Descubra cómo crear conjuntamente soluciones, acelerar la transformación digital y optimizar el rendimiento a través de estrategias de nube híbrida y asociaciones de expertos.