Qué es DevOps: Fundamentos, beneficios y herramientas
Conoce la respuesta a esta pregunta que tanto intriga a muchos en el sector TI y seguramente te hayas hecho alguna vez.
En este artículo hablamos sobre qué es Azure DevOps y para qué sirve, además de abordar sus características y los principales beneficios de uso que ofrece.
Azure DevOps es un conjunto de herramientas y servicios que te ayudan en la administración del ciclo de vida de tus proyectos de desarrollo de software, es la evolución de Visual Studio Team Services.
Como características destacadas podemos decir que soporta cualquier lenguaje de programación y cualquier plataforma de desarrollo. Con lo que cualquier desarrollador, sea cual sea su lenguaje/ecosistema puede utilizar esta plataforma del ecosistema de Azure. Azure contiene todo lo necesario desde que tienes una idea hasta que la conviertes en una aplicación en producción.
Aunque es posible trabajar de forma aislada con Azure DevOps, este tiene la capacidad de integrarse con otras plataformas, como GitHub para descargar repositorios de código o sincronizarlos hacia el mismo. Puedes usar Docker, para la creación de imágenes de contenedores o descargar imágenes existentes, tiene integración con plataformas de colaboración como Slack. Puedes usar para desarrollo otros IDEs que no sean Visual Studio como IntelliJ IDEA o Eclipse… Azure DevOps incluye diferentes herramientas/servicios, entre las que podemos destacar los siguientes servicios
Azure Repos: el cual es un servicio para el almacenamiento de repositorios de código fuente, de cualquier lenguaje de programación y de cualquier plataforma de desarrollo. Azure Repos soporta dos sistemas de control de versiones las cuales son Git y Team Foundation Version Control (el control de versiones de Team Foundation Server). Con esta herramienta puedes sustituir el uso de Git o GitLab.
Azure Pipelines: puedes crear definiciones de pipelines, de integración continua (IC) y de despliegue continuo (CD) para automatizar las fases de desarrollo, compilación, pruebas y despliegue de tus proyectos de software. Azure Pipelines tiene una gran cantidad de tareas preconstruidas para ayudarte a compilar y desplegar tu software, sin importar si es en una nube pública, privada o híbrida. Con esta herramienta puedes sustituir el uso de Jenkins, o TeamCity por poner unos ejemplos.
Azure Boards: puedes administrar los esfuerzos de desarrollo de software a través de la definición de listas de tareas, backlogs, tableros de Kanban, consultas, informes, gestión de sprints de Scrum, asignación y estimación de tareas y retrospectivas entre otras. Tiene capacidad para integrarse con VisualStudio de tal forma que desde el mismo podemos ver nuestras tareas asignadas, así como realizar un seguimiento de las mismas. Con esta herramienta podemos sustituir el uso de JIRA.
Azure Artifacts: los componentes compartidos entre diferentes proyectos podemos almacenarlos en este servicio el cual es un almacenamiento y directorio de componentes. Puedes generar un feed de contenidos tipo nuget o npm.
Azure Test Plans: en los proyectos de desarrollo de software es necesario realizar pruebas al software en cualquiera de sus etapas. Con Azure Test Plans, podemos hacer definiciones de pruebas como, por ejemplo, pruebas de carga o pruebas de aceptación, teniendo a nuestra disposición distintos tableros en los que llevar un seguimiento de la ejecución de dichos planes de tests, ver que cobertura de código tenemos, etc.
Como puedes ver la potencia que nos brinda y el tenerlo todo centralizado e integrado en una única plataforma es más que interesante.
Cuando hablamos de lo que es DevOps no encontramos con diferentes definiciones, por ejemplo se puede considerar como automatización de procesos. Se puede considerar como el despliegue de infraestructura a través de scripts. Otras definiciones incluyen el tener tu proyecto en un tablero de Kanban o usar una metodología ágil, como Scrum. La verdad es DevOps es mucho más que eso. Una descripción más detallada que podemos encontrar, por parte de un DevOps de Microsoft, llamado Donovan Brown que sería la siguiente:
«DevOps es la unión de personas, procesos y productos para habilitar la entrega continua de valor a nuestros usuarios finales».
Su nombre proviene de Developers, en inglés desarrolladores, y Operations, en inglés operaciones. Es el conjunto de ambas prácticas que nos permite construir software de una mejor manera y con mucha mayor calidad, desde su planeación hasta su despliegue y monitorización y telemetría y el aprendizaje que todas estas prácticas nos brinda.
Si te das cuenta, en esta descripción, tenemos todos los elementos que hemos definido anteriormente, y alguno más. Para esta definición, podemos dividirlo en los siguientes elementos:
Personas: Las personas son los usuarios finales de tus aplicaciones, además aquí debemos de incluir a toda persona involucrada en el ciclo de desarrollo de software, como desarrolladores, managers, los gerentes…
Procesos: Los procesos son aquellos procesos de desarrollo de software, pero no nada más de la programación como tal, sino también los procesos de despliegue, monitorización, configuración, etc.
Productos: Y, finalmente, los productos que son los productos de software que estás construyendo dentro de tu empresa.
DevOps considera algunas prácticas esenciales que debemos considerar para adoptar esta metodología de trabajo, como son el Control de versiones, la integración continua, la infraestructura como código, monitorización y pruebas de carga.
El control de versiones, o VCS, por sus siglas en inglés de Version Control System, es un repositorio de ficheros en el cual los desarrolladores pueden hacer cambios o añadir nuevos ficheros, a la vez que pueden monitorizar los cambios que se producen sobre estos. Gracias a este sistema, los desarrolladores podemos beneficiarnos de tener una base de datos con nuestro código, en la cual podemos rastrear los cambios que se han producido en los mismos, ver cuándo y quién produjo dichos cambios. Podemos restaurar estos ficheros a estados anteriores, y como característica más importante es la posibilidad de que varios desarrolladores puedan colaborar entre ellos, teniendo a su disposición esta herramienta que permite ver los conflictos que puedan darse al trabajar sobre los mismos ficheros de código y puedan resolverlos.
Dentro de Azure DevOps esta necesidad la tenemos cubierta gracias a Azure Repos, tenemos acceso a crear un número ilimitado de repos de forma gratuita.
Uno de los procesos más importantes en DevOps es la integración continua. La integración continua o CI, por sus siglas en inglés de Continuous Integration, es una práctica en el desarrollo de software en la que los miembros de un equipo de desarrollo integran frecuentemente su trabajo, normalmente se hace como poco diariamente siendo beneficioso si se hace múltiples veces incluso. Cada integración es verificada por la Build que se debe de ejecutar automáticamente, incluyendo los tests, para detectar los errores de integración de manera temprana, de esta forma se reducen los problemas de integración y se permite al equipo desarrollar mejor de manera conjunta y entregar software más rápidamente. En palabras de Martin Fowler:
“La integración continua no elimina los errores, pero los hace mucho más fáciles de encontrar y eliminar”.
Dentro de Azure DevOps esta necesidad la tenemos cubierta gracias a Azure Pipelines, que los podemos usar para cualquier lenguaje de programación que queramos. Tenemos 10 trabajos paralelos con minutos ilimitados gratis. Además, tiene una gran compatibilidad con Docker y Kubernetes, para que puedas preparar tus imágenes y subirlas a Docker Hub o Azure Container Registry. Podemos ver el resumen de las compilaciones, commits, tests, etc.
El despliegue continuo, es una metodología de trabajo en la cual construyes el software de tal forma que lo puedes desplegar en cualquier momento a producción. Para esto, sería necesario cumplir con lo siguiente:
Tienes que asegurarte de que tu código se puede desplegar a lo largo de su ciclo de vida.
Tu equipo debe priorizar el que su código sea posible de desplegar antes de empezar a trabajar en nuevas “features”.
Se tiene que poder tener un rápido y automático feedback de que el producto en producción está funcionando correctamente después de que alguien haya subido cambios.
Deberías de poder desplegar cualquier versión de tu software a demanda en cualquiera de los entornos de tu aplicación.
Si construyes software, pero no llega a los clientes o tarda mucho en llegarles, no sirve de mucho. El proceso de despliegue continuo, digamos que es una extensión natural del proceso de integración continua, ya que una vez que hemos integrado nuestro software, lo que hacemos es continuar con el siguiente paso natural en el ciclo de vida de un producto de software para que pueda ser usado por los usuarios finales. Hay que diferenciar entre el concepto de despliegue continuo y el concepto de entrega continua. El despliegue continuo hace el despliegue al ambiente de producción de manera automática, mientras que la entrega continua hace un despliegue a producción de forma manual (por ejemplo, dándole a un botón que tiene que revisar un aprobador).
Dentro de Azure DevOps esta necesidad la tenemos cubierta gracias a Azure Pipelines y Azure Artifacts. Con los Azure Artifacts empaquetamos nuestras funcionalidades, en paquetes nuget, o npm para poder crear feeds de contenido y usarlos como referencia en nuestros proyectos de desarrollo. Con Azure Pipelines podemos automatizar los despliegues una vez se han cumplido las condiciones que hayamos impuesto para los mismos. Podemos dejarlo de modo automático o poner aprobadores para hacer los despliegues de forma manual.
La infraestructura como código, Infraestruture as Code, es la forma de definir nuestra infraestructura (recursos de computación, redes, etc.) para nuestra aplicación, como si de código se tratase, a través de scripts que pueden correr en nuestra infraestructura local o en la nube. De esta forma dicho código lo podremos mantener en un sistema de control de versiones, para poder llevar una auditoria de los cambios en el mismo, podremos además implementar técnicas de testing, integración continua y despliegue continuo.
En las empresas en las que esta técnica no está implementada, todo el aprovisionamiento de recursos de cómputo e infraestructura, generalmente, se hace de forma manual. De esto se suele encargar un equipo, cuando no el propio desarrollador, para poder hacer la instalación del software en los distintos entornos.
Al tratarse de un proceso manual y sin auditoria, hay muchas posibilidades de errores, siendo además un proceso mucho más lento que si se hace de forma automatizada. Nuestros scripts deben de poder ejecutarse de forma idempotente de tal forma que, aunque ejecutes el script múltiples veces, el resultado siempre será el mismo. Esta técnica es utilizada en conjunto con el despliegue continuo, de tal forma que compilamos, probamos el código, hacemos el aprovisionamiento de recursos y desplegamos nuestro código hacia dichos recursos que acabamos de aprovisionar.
Dentro de Azure DevOps esta necesidad la tenemos cubierta gracias a Azure Pipelines y Azure Repos. Podemos basarnos en los scripts que subamos a los Azure Repos y generar nuestras Azure Pipelines que nos provean de la infraestructura necesaria para que nuestra app empiece a funcionar.
Las compañías que adoptan la cultura de DevOps se benefician de una gran cantidad de beneficios, entre los que podemos destacar:
Como puedes ver, todas estas funcionalidades las puedes realizar desde Azure DevOps, utilizando únicamente si lo deseas este producto, por ejemplo si hiciéramos un Azure DevOps vs Github, lo primero que podrías pensar es que GitHub sólo te cubre las necesidades relacionadas con control de código fuente, pero en realidad tienen otros productos adicionales que puedes usar como GitHub Actions para tener la parte de CI/CD, incluso puedes tener paneles para llevar el seguimiento tipo Scrum o Kanban haciendo uso de las opciones incluidas en el repo, en el apartado Projects.
En un Azure DevOps vs Jira, verías que Jira te permite cubrir la funcionalidad relacionada con Azure Boards. Y por ejemplo en un Azure DevOps vs Jenkins, en Jenkins tendríamos cubierta la parte de CI, CD, Pipelines, Artifacts. Con esto lo que vemos es que tendrías que tener varios productos por separado en los que la unificación y centralización es más compleja. Para finalizar decir que DevOps es un proceso sin fin de mejora continua.
Si quieres conocer más acerca de la plataforma Azure y todo lo que puedes hacer con ella, te recomiendo que veas el siguiente curso que puede te puede ser de utilidad: Curso de administración de Azure.
También te puede interesar
Conoce la respuesta a esta pregunta que tanto intriga a muchos en el sector TI y seguramente te hayas hecho alguna vez.
Azure es la plataforma en la nube de Microsoft para empresas y profesionales que está impulsando la transformación digital. ¿Quieres saber qué...