DevOps es un conjunto de prácticas que agrupan el desarrollo de software y las operaciones en distintos grupos, de tal manera que la parte relacionada con Dev (desarrollo) y la parte Ops (operaciones) quedan separadas. Esta técnica se realiza con el fin de poder hacer el ciclo de vida de desarrollo de software más rápido y proporcionar una entrega continua de alta calidad.
Como podemos observar en la imágen anterior se pueden apreciar las distintas fases de cada parte, en la parte Dev encontramos las fases de desarrollo:
-
Plan
-
Código
-
Construir
-
Prueba
Y en la parte Ops encontramos las fases de operaciones:
-
Lanzamiento
-
Desplegar
-
Operar
-
Monitor
De esta manera podemos realizar nuestro objetivo de una manera más ágil, creando un producto mínimo viable que puede alcanzar los estándares que se propongan, y siempre mantener una sólidez a la hora de realizar las tareas y llevar a cabo las actividades de desarrollo software.
El mayor objetivo es satisfacer al cliente mediante una entrega temprana y continua de software con valor. Esto nos lleva a centrarnos en la integración y entrega continua.
Integración continua
La integración continua busca que el código que se vaya subiendo por los distintos miembros del equipo al repositorio común sea estable y robusto, tenga el menor número de fallos, se pueda compilar y empaquetar en cualquier momento todo ello de forma automatizada.
Esto nos permite en cierta manera ser más ágiles, ya que una integración continua nos permite un desarrollo mucho más eficaz, eficiente, posee una menor tasa de fallos y la estabilidad que ofrece, también destacar que nos permite poseer un producto mínimo viable en todo momento del desarrollo, como mencionamos anteriormente.
1) Mejora la calidad del código⟶ Se usan herramientas como Jenkins y Sonarqube que lanzan test unitarios y calidad código, lo que hace que se puedan encontrar errores en las primeras fases del desarrollo. Además el código se puede analizar online según lo va escribiendo el desarrollador.
2) Detección de errores más rápida y fácil⟶ La automatización de los test hace que los errores tanto de integración como de calidad de código sean localizados diariamente.
3) Reduce tareas repetitivas y manuales⟶ El lanzamiento de test unitarios y calidad de código y la generación automática de los artefactos entregables libera a los programados de estas tareas repetitivas y manuales.
4) Puede crear versiones de prueba en cualquier momento⟶ En la mayoría de los casos basta con pulsar un botón para realizar los pasos de compilación, ejecución de pruebas automatizadas y empaquetado de artefactos.
5) Completa la visibilidad del proyecto⟶ Las herramientas como Jenkins te dan información de cuando se ha realizado la compilación, test ejecutados y resultados. En herramientas como Sonarqube se pueden ver los cuadros de mando de calidad del proyecto (reglas de calidad).
6) Mayor confianza y seguridad del equipo de trabajo⟶ Al liberar al equipo de las tareas de integración y revisión de calidad de código así como de la generación de artefactos de entrega se consigue que estén centrados en sacar las historias adelante aumentando la velocidad del mismo y ganando confianza.
Entrega continua
La entrega continua se basa en buscar que los artefactos generados en la Integración continua se puedan desplegar en los diferentes entornos de forma organizada, monitorizada y versionada hasta llegar al entorno de producción, todo ello de forma automatizada.
De tal manera que podamos ver que en la integración continua mencionamos el producto mínimo viable, eso es ya que la entrega continua se centra en, de forma organizada, llevar a cabo toda la tarea automatizadamente de la el empaque de la producción. De esta forma la entrega continua nos da una serie de beneficios los cuáles son:
1) Menor tiempo de puesta en producción entre releases. Permite desplegar de forma continua. En ambientes competitivos esto reduce significativamente el time to market, fundamental en los tiempos que corren.
2) La automatización en los despliegues evita errores a la hora de desplegar.
3) La automatización en el despliegue hace que el equipo de desarrollo está centrado en generar valor, construyendo nuevas funcionalidades.
4) Monitorización del desarrollo que ofrece feedback inmediato del producto y genera nuevas funcionalidades que desarrollar favoreciendo el cambio y la adaptación del software.
5) La automatización de los despliegues y monitorización trae una reducción de los costes.
Integración y entrega continua
Cuando se juntan integración y entrega continua llegamos al concepto de las técnicas empleadas en DevOps, de este modo podemos llegar a comprender que la integración continua es una práctica del desarrollo de software ágil en la que los ingenieros van integrando los fragmentos de código que desarrollan poco a poco en lugar de hacerlo una vez concluido todo el proyecto, y que la entrega continua consiste en tratar el flujo de despliegue como un sistema a prueba de errores. Hay un conjunto de validaciones que cada pieza de software debe pasar en su camino hacia la liberación. El código es compilado, si es necesario, y empaquetado por un servidor de compilación cada vez que se realiza un cambio en un repositorio de control de versiones, y luego es probado por una serie de técnicas diferentes (posiblemente incluyendo pruebas manuales) antes de que se pueda desplegar.
Por tanto, encontramos las distintas fases que se llevan a cabo en integración y entrega continua:
Planificación: Los equipos Ágiles al final de cada iteración deben de tener un software funcionando en un entorno pre productivo. Por lo tanto las planificaciones coincidirán al menos al final de cada Iteración. No obstante mientras se realiza el desarrollo puede haber más entregas planificadas entre medias de un Sprint en función de las historias terminadas y la gestión de releases hechas (BurnUp).
Creación: Implica como tal el desarrollo del Software (codificación) y la configuración de todo lo necesario para que funcione correctamente. En esta fase el código deberá de estar subido a un repositorio común. Generalmente todos los desarrolladores suben varias veces al día código a este repositorio común el cual es verificado de forma continua.
Verificación: Se verifica que el código subido es completo y está correctamente integrado. Es en este punto donde se lanzan los test unitarios, reglas de calidad de código, cobertura… Si el código cumple con todo esto se puede acometer el empaquetado.
Empaquetado: Se empaqueta el código generando un artefacto que pueda ser desplegado en los diferentes entornos ( típicamente desarrollo, integración y producción).
Release: Incluye la programación, orquestación, aprovisionamiento y despliegue del software en un entorno. Las actividades que se suelen hacer en esta fase
-
Creación y coordinación de la versión.
-
Desplegar y promocionar aplicaciones.
-
Vuelta atrás y recuperación.
-
Programación de versionado.
Configure: Una vez que el software es desplegado existen otras actividades de aprovisionamiento y configuración de infraestructura IT que hay que realizar:
-
Aprovisionamiento y Configuración de Almacenamiento y red
-
Provisión y configuración de aplicaciones.
Monitor: Permite al equipo IT identificar problemas específicos en la versión y entender el impacto en los usuarios finales. Algunas actividades son
-
Rendimiento de la infraestructura IT
-
Respuesta y experiencia del usuario final.
-
Estadísticas y métricas del entorno de producción.
Add new comment