¿Qué es DevOps?
DevOps es una combinación de desarrollo (Dev) y operaciones (Ops) para unir personas, procesos y tecnología en el planeamiento, desarrollo, entrega y operaciones de las aplicaciones. DevOps facilita la coordinación y colaboración entre funciones que antes estaban aisladas, como el desarrollo, las operaciones de TI, la ingeniería de calidad y la seguridad.
Los equipos adoptan una cultura de DevOps junto con las prácticas y herramientas para aumentar la confianza en las aplicaciones que compilan, responden mejor a las necesidades de los clientes y logran sus objetivos empresariales más rápidamente. DevOps permite a los equipos ofrecer continuamente valor a los clientes mediante la creación de productos mejores y más fiables.
DevOps y el ciclo de vida de las aplicaciones
DevOps influye en el ciclo de vida de las aplicaciones a lo largo de las fases de planeamiento, desarrollo, entrega y operaciones. Cada fase se basa en las demás y las fases no son específicas de un rol. Una cultura DevOps implica a todos los roles en cada fase hasta cierto punto.
En el diagrama a continuación se muestran las fases del estilo de vida de la aplicación DevOps:
Objetivos y ventajas de DevOps
Cuando un equipo adopta la cultura, las prácticas y las herramientas de DevOps, puede conseguir resultados increíbles:
Reducir el tiempo de comercialización
Gracias al aumento de la eficacia, la mejora de la colaboración en equipo, las herramientas de automatización y la implementación continua, los equipos pueden reducir con rapidez el tiempo que transcurre desde la creación del producto hasta su lanzamiento al mercado.
Adaptación al mercado y a la competencia
Una cultura de DevOps exige equipos orientados al cliente. La combinación de agilidad, colaboración en equipo y atención a la experiencia del cliente permite a los equipos ofrecer continuamente valor a sus clientes y aumentar su competitividad en el mercado.
Mantenimiento de la estabilidad y la confiabilidad del sistema
Mediante la adopción de prácticas de mejora continua, los equipos son capaces de aumentar la estabilidad y fiabilidad de los productos y servicios que implementan. Estas prácticas facilitan la reducción de errores y de riesgo.
Mejora del tiempo medio de recuperación
La métrica tiempo medio de recuperación indica cuánto tiempo toma la recuperación de un error o una vulneración. Para administrar errores de software, vulneraciones de seguridad y planes de mejora continua, los equipos deben medir y trabajar para mejorar esta métrica.
Adopción de una cultura de DevOps
Para implementar completamente DevOps, debe adoptar una cultura de DevOps. Cultivar una cultura de DevOps requiere cambios profundos en la forma en la que las personas trabajan y colaboran. Cuando las organizaciones se comprometen a implementar una cultura de DevOps, crean un entorno que facilita la evolución de equipos de alto rendimiento. Si bien la adopción de prácticas de DevOps automatiza y optimiza los procesos a través de la tecnología, sin un cambio hacia una cultura de DevOps dentro de la organización y su personal, no se obtendrán todas las ventajas de DevOps.
En la imagen a continuación se capturan aspectos esenciales de la cultura del sitio web en directo de Microsoft.
Los procedimientos a continuación son componentes esenciales de la cultura de DevOps:
- Colaboración, visibilidad y alineación: un rasgo distintivo de una cultura de DevOps saludable es la colaboración entre equipos. La colaboración comienza con la visibilidad. Los equipos de desarrollo, TI y otros deben compartir entre sí los procesos, prioridades y preocupaciones en materia de DevOps. Al planear el trabajo juntos, están en mejores condiciones de alinearse con los objetivos y las medidas de éxito en relación con la empresa.
- Cambios en alcance y responsabilidad: a medida que los equipos se alinean, asumen y participan en otras fases del ciclo de vida, no solo las que son principales para su rol. Por ejemplo, los desarrolladores asumen responsabilidad no solo por la innovación y la calidad establecidas en la fase de desarrollo, sino también por el rendimiento y la estabilidad que sus cambios producen en la fase de uso. Al mismo tiempo, los operadores de TI se aseguran de incluir la gobernanza, la seguridad y el cumplimiento normativo en las fases de planeamiento y desarrollo.
- Ciclos de lanzamiento más cortos: los equipos de DevOps mantienen la agilidad porque lanzan versiones de software en ciclos cortos. Los ciclos de lanzamiento de versiones más cortos facilitan el planeamiento y la administración de los riesgos, porque el progreso es incremental, lo que reduce el impacto en la estabilidad del sistema. El acortamiento de los ciclos de lanzamiento de versiones permite también a las organizaciones adaptarse y reaccionar a las necesidades cambiantes de los clientes y a la presión competitiva.
- Aprendizaje continuo: los equipos de DevOps de alto rendimiento establecen una mentalidad de crecimiento. Fracasan rápido e incorporan los aprendizajes a los procesos. Se esfuerzan por mejorar constantemente, aumentar la satisfacción del cliente y acelerar la innovación y la adecuación al mercado.
Implementación de procedimientos de DevOps
Se implementa DevOps al seguir las prácticas de DevOps (descritas en las secciones siguientes) a lo largo del ciclo de vida de la aplicación. Algunas de estas prácticas ayudan a agilizar, automatizar y mejorar una fase específica. Otras abarcan varias fases y ayudan a los equipos a crear procesos homogéneos que favorezcan la productividad.
Integración continua y entrega continua (CI/CD)
La integración continua (CI) es la práctica que utilizan los equipos de desarrollo para la automatización, combinación y prueba de código. La integración continua ayuda a detectar errores en etapas tempranas del ciclo de desarrollo, lo que hace que sean menos costosos de corregir. Las pruebas automatizadas se ejecutan como parte del proceso de CI para garantizar la calidad. Los sistemas de CI generan artefactos y los alimentan para liberar procesos a fin de impulsar implementaciones frecuentes.
La entrega continua (CD) es un proceso por el que el código se compila, prueba e implementa en uno o varios entornos de prueba y producción. La implementación y las pruebas en varios entornos aumentan la calidad. Los sistemas de CD generan artefactos que se pueden implementar, incluida la infraestructura y las aplicaciones. Los procesos de versión automatizados consumen estos artefactos para publicar versiones nuevas y correcciones en los sistemas existentes. Los sistemas que supervisan y envían alertas se ejecutan de manera continua para impulsar la visibilidad de todo el proceso de CD.
Control de versiones
Control de versiones es la práctica de administrar el código por versiones, haciendo un seguimiento de las revisiones y del historial de cambios para facilitar la revisión y la recuperación del código. Esta práctica suele implementarse con sistemas de control de versiones, como Git, que permite que varios desarrolladores colaboren para crear código. Estos sistemas proporcionan un proceso claro para fusionar mediante combinación los cambios en el código que tienen lugar en los mismos archivos, controlar los conflictos y revertir los cambios a estados anteriores.
El uso del control de versiones es una práctica de DevOps fundamental que ayuda a los equipos de desarrollo a trabajar juntos, dividir las tareas de programación entre los miembros del equipo y almacenar todo el código para poder recuperarlo fácilmente si fuese necesario. El control de versiones es también un elemento necesario en otras prácticas, como la integración continua y la infraestructura como código.
Desarrollo ágil de software
Agile es un enfoque de desarrollo de software que resalta la colaboración en equipo, los comentarios de los clientes y los usuarios, y la alta capacidad de adaptación al cambio a través de ciclos de versión cortos. Los equipos que practican la metodología ágil proporcionan mejoras y cambios continuos a los clientes, recopilan sus comentarios y, después, aprenden y ajustan el software en función de lo que el cliente quiere y necesita. El método ágil es muy diferente a otros marcos más tradicionales, como el modelo en cascada, que incluye ciclos de lanzamiento de versiones largos definidos por fases secuenciales. Kanban y Scrum son dos marcos populares asociados al método ágil.
Infraestructura como código
La infraestructura cómo código define las topologías y los recursos del sistema de un modo descriptivo que permite a los equipos administrar esos recursos igual que lo harían con el código. Las diferentes versiones de esas definiciones se pueden almacenar en sistemas de control de versiones, donde se pueden revisar y revertir, de nuevo, igual que el código.
La práctica de la infraestructura como código permite a los equipos implementar recursos del sistema de un modo confiable, repetible y controlado. Además, la infraestructura como código ayuda a automatizar la implementación y reduce el riesgo de errores humanos, especialmente en entornos complejos de gran tamaño. Esta solución repetible y confiable para la implementación de entornos permite a los equipos mantener entornos de desarrollo y pruebas que sean idénticos al entorno de producción. De igual modo, la duplicación de entornos en otros centros de datos y en plataformas en la nube es más sencilla y más eficiente.
Administración de configuración
La administración de configuración hace referencia a la administración del estado de los recursos en un sistema, incluidos servidores, máquinas virtuales y bases de datos. El uso de herramientas de administración de la configuración permite a los equipos distribuir cambios de un modo controlado y sistemático, lo que reduce el riesgo de modificar la configuración del sistema. Los equipos utilizan herramientas de administración de la configuración para hacer un seguimiento del estado del sistema y evitar alteraciones en la configuración, que es como se desvía la configuración de un recurso del sistema a lo largo del tiempo del estado definido para él.
Junto con la infraestructura como código, resulta fácil elaborar plantillas y automatizar la definición y la configuración de sistemas, lo que permite a los equipos usar entornos complejos a escala.
Supervisión continua
La supervisión continua supone tener una visibilidad completa y en tiempo real del rendimiento y el estado de la totalidad de las aplicaciones. La visibilidad abarca desde la infraestructura de base que ejecuta la aplicación hasta los componentes de software de nivel superior. La visibilidad se logra mediante la recopilación de datos de telemetría y metadatos y el establecimiento de alertas para condiciones predefinidas que garanticen la atención de un operador. La telemetría incluye registros y datos de eventos recopilados de varias partes del sistema que se almacenan donde pueden analizarse y consultarse.
Los equipos de DevOps de alto rendimiento se aseguran de establecer alertas útiles que les permitan tomar medidas y recopilan datos de telemetría muy completos para obtener conclusiones a partir de enormes cantidades de datos. Estas conclusiones ayudan a los equipos a mitigar los problemas en tiempo real y a ver cómo mejorar la aplicación en futuros ciclos de desarrollo.
Planificación
En la fase de planeamiento, los equipos de DevOps conciben, definen y describen las características y la funcionalidad de las aplicaciones y los sistemas que planean crear. Los equipos realizan el seguimiento del progreso de tareas en niveles bajos y altos de granularidad desde productos individuales a carteras de varios productos. Los equipos utilizan las siguientes prácticas de DevOps para establecer planes con agilidad y visibilidad:
- Creación de trabajo pendiente.
- Seguimiento de errores.
- Administración del desarrollo de software Agile con Scrum.
- Uso de paneles Kanban.
- Visualización del progreso con paneles.
Para obtener una visión general de las distintas lecciones aprendidas y prácticas que Microsoft adoptó para admitir el planeamiento de DevOps en todos los equipos de software de la empresa, consulte Cómo Microsoft planea con DevOps.
Desarrollo
La fase de desarrollo comprende todos los aspectos del desarrollo de código de software. En esta fase, los equipos de DevOps llevan a cabo las tareas a continuación:
- Selección de un entorno de desarrollo.
- Escritura, prueba, revisión e integración del código.
- Compilación del código en artefactos para implementarlo en diferentes entornos.
- Uso de control de versiones, normalmente Git, para colaborar en el código y trabajar en paralelo.
Para innovar con rapidez sin sacrificar la calidad, la estabilidad ni la productividad, los equipos de DevOps:
- Utilizan herramientas altamente productivas.
- Automatizan los pasos cotidianos y manuales.
- Realizan iteraciones en incrementos pequeños mediante pruebas automatizadas e integración continua (CI).
Para obtener información general sobre las prácticas de desarrollo que Microsoft adoptó para admitir su cambio a DevOps, consulte Cómo microsoft se desarrolla con DevOps.
Entregar
La entrega es el proceso de implementación de aplicaciones en entornos de producción de forma coherente y confiable, idealmente mediante la entrega continua (CD).
En la fase de entrega, los equipos de DevOps:
- Establecen un proceso de administración de versiones con etapas de aprobación manual claras.
- Configuran puertas automatizadas para mover aplicaciones entre fases hasta la versión final a los clientes.
- Automatizan los procesos de entrega para que sean escalables, repetibles, controlados y probados correctamente.
La entrega también implica la implementación y configuración de la infraestructura fundamental del entorno de entrega. Los equipos de DevOps utilizan tecnologías como infraestructura como código (IaC), contenedores y microservicios a fin de ofrecer entornos de infraestructura totalmente regulados.
Las prácticas de implementación segura pueden identificar problemas antes de que afecten a la experiencia del cliente. Estas prácticas ayudan a los equipos de DevOps a realizar entregas con facilidad, confianza y tranquilidad.
Los principios y procesos básicos de DevOps que Microsoft ha evolucionado para ofrecer sistemas de entrega eficientes se describen en Cómo Microsoft entrega software con DevOps.
Operations
La fase de operaciones implica el mantenimiento, la supervisión y la solución de problemas de aplicaciones en entornos de producción, que incluyen nubes híbridas o públicas como Azure. Los objetivos de los equipos de DevOps son la confiabilidad del sistema, la alta disponibilidad, la seguridad sólida y el tiempo de inactividad cero.
La entrega automatizada y las prácticas de implementación segura ayudan a los equipos a identificar y paliar los problemas rápidamente cuando se producen. El mantenimiento de la vigilancia requiere una telemetría muy completa, alertas que permitan tomar medidas y visibilidad total de las aplicaciones y de los sistemas subyacentes.
Los procedimientos que Microsoft utiliza para operar plataformas en línea complejas se describen en Cómo opera Microsoft en sistemas confiables con DevOps.
Pasos siguientes
- Planee cargas de trabajo eficientes con DevOps
- Desarrollo de software moderno con DevOps
- Entregue servicios de calidad con DevOps
- Opere en sistemas confiables con DevOps
Otros recursos
- Soluciones de DevOps en Azure
- El recorrido de DevOps en Microsoft
- Comience a practicar DevOps con Azure
- Seguridad en DevOps (DevSecOps)
- ¿Qué es la ingeniería de plataformas?
Aprendizaje y certificaciones
- Introducción a Azure DevOps
- Introducción a DevOps Dojo: creación de métodos eficientes para el negocio
- AZ-400: Introducción al recorrido por la transformación de DevOps
- Comunicación y colaboración sencillas
- Examen AZ-400: Designing and Implementing Microsoft DevOps Solutions
- AZ-400: Implementación de seguridad y comprobación del cumplimiento de las de bases de código