# DevOps

DevOps (acrónimo inglés de development -desarrollo- y operations -operaciones-) es un conjunto de prácticas que agrupan el desarrollo de software ( Dev ) y las operaciones de TI ( Ops ). Su objetivo es hacer más rápido el ciclo de vida del desarrollo de software y proporcionar una entrega continua de alta calidad. DevOps es una práctica complementaria al desarrollo de software ágil ; esto debido a que varias de las características de DevOps provienen de la metodología Agile (término en inglés para la metodología de desarrollo ágil).
La principal característica del movimiento DevOps es defender activamente la automatización y el monitoreo en todos los pasos de la construcción del software, desde la integración, las pruebas, el despliegue, 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, lanzamientos más efectivos, en estrecha alineación con los objetivos comerciales.

## Definiciones e historia

En la conferencia Agile 2008 Toronto, Yhens Wasna y Patrick Debois introdujeron el término en su charla sobre "Infraestructura Ágil". A partir de 2009, el término DevOps se ha promocionado constantemente y se ha incorporado a un uso más general a través de una serie de "devopsdays", que comenzaron en Bélgica y ahora también se han extendido a otros países.
El término DevOps ha sido utilizado en múltiples contextos diferentes.
Una definición propuesta por Bass, Weber y Zhu es:
Durante la década siguiente, también se desarrollaron iniciativas de DevOps más tangenciales, como OpsDev, WinOps, y BizDevOps.

## Herramientas DevOps

Como DevOps pretende ser un modo de trabajo interfuncional, en lugar de una sola herramienta de DevOps existen conjuntos (o "toolchains") de múltiples herramientas. Se espera que tales herramientas de DevOps encajen en una o más de estas categorías, que reflejen los aspectos clave del proceso de desarrollo y entrega:
* Código: desarrollo y revisión de código, herramientas de administración de código fuente, fusión de código
* Construcción: herramientas de integración continua, estado de compilación
* Prueba: herramientas de prueba continuas que brindan retroalimentación sobre los riesgos comerciales
* Paquete: repositorio de artefactos, distribución previa a la implementación de la aplicación
* Lanzamiento - gestión de cambios, aprobaciones de versiones, automatización de versiones
* Configurar - configuración y gestión de la infraestructura, Infraestructura como código
* Monitor: monitoreo del rendimiento de las aplicaciones, experiencia del usuario final
Algunas categorías son más esenciales en una cadena de herramientas DevOps que otras; especialmente la integración continua (por ejemplo, Jenkins) y la infraestructura como código (por ejemplo, Puppet).

## Relación y otros enfoques
### Agile

La necesidad de DevOps surgió del creciente éxito del desarrollo de software ágil, ya que eso llevó a que las organizaciones quieran lanzar su software más rápido y con mayor frecuencia. A medida que trataban de superar la tensión que esto suponía para sus procesos de gestión de versiones, debían adoptar patrones como la automatización del lanzamiento de aplicaciones, las herramientas de integración continua y la entrega continua.

### Entrega Continua

La entrega continua y DevOps tienen objetivos comunes y a menudo se usan en conjunto, pero hay diferencias sutiles.
Si bien la entrega continua se centra en la automatización de los procesos de entrega de software, DevOps también se centra en el cambio de la organización para admitir una gran colaboración entre las muchas funciones involucradas.
DevOps y la entrega continua comparten una base común en métodos ágiles y pensamiento ligero: cambios pequeños y frecuentes con valor focalizado para el cliente final.

### ArchOps

ArchOps es una extensión de DevOps que incrementa el nivel de abstracción al priorizar los artefactos de arquitectura de software por encima del código fuente para el despliegue y operación de soluciones de software. ArchOps establece que los modelos de arquitectura son entidades de primera clase dentro del desarrollo, despliegue y operación de soluciones de software.

### DataOps

La aplicación de entrega continua y DevOps para el análisis de datos se ha denominado DataOps. DataOps busca integrar ingeniería de datos, integración de datos, calidad de datos, seguridad de datos y privacidad de datos con operaciones. Aplica principios de DevOps, desarrollo ágil y el control estadístico del proceso, utilizado en la fabricación ajustada, para mejorar el tiempo de ciclo de extracción de valor del análisis de datos.

### DevSecOps

DevSecOps es un aumento de DevOps para permitir que las prácticas de seguridad se integren en el enfoque de DevOps. El modelo tradicional de equipo de seguridad centralizado debe adoptar un modelo federado que permita a cada equipo de delivery tener en cuenta los controles de seguridad correctos en sus prácticas de DevOps.

### Objetivos

Los objetivos de DevOps abarcan todo el proceso de entrega. Incluyen:
* Frecuencia de implementación mejorada;
* Lanzamientos a producción más rápidos;
* Baja tasa de errores en la generacíón de nuevas versiones;
* Tiempo de entrega más corto entre versiones;
* Tiempo de despliegue más rápido (en caso de que una nueva versión tenga inconsistencias).
* Velocidad de reacción en caso de que una versión desplegada falle
Los procesos simples se vuelven cada vez más estándar y dinámicos, utilizando un enfoque DevOps. DevOps tiene como objetivo maximizar la previsibilidad, eficiencia, seguridad y mantenimiento de los procesos operativos. Muy a menudo, la automatización o robotización de procesos apoya este objetivo.
La integración de DevOps se enfoca en la entrega de productos, pruebas de usuario (UAT), pruebas continuas, pruebas de calidad, desarrollo de características y versiones de mantenimiento para mejorar la confiabilidad y la seguridad y proporcionar ciclos de desarrollo e implementación más rápidos. Muchas de las ideas (y personas) involucradas en DevOps provienen de la administración de sistemas empresariales y los movimientos ágiles de desarrollo de software.

### Microservicios

Este tipo de enfoque permite a las empresas digitales brindar alta disponibilidad y estabilidad a sus aplicaciones; esto se debe a que todas las partes de las aplicaciones (base de datos, back-end, front-end, etc.) son independientes y, si una de ellas falla, no implica que todo el sistema de información presente inconvenientes. En lugar de eso, los otros servicios continuarán trabajando mientras se restaura el componente afectado. Los creadores de DevOps requieren de microservicios para optimizar sus desarrollos, y dejar atrás arquitecturas monolíticas, ya que la arquitectura de servicios se vuelve modular y segmentada para minimizar el riesgo y mejorar la forma de despliegue de las aplicaciones y sus componentes de integración con las diferentes capas.