¿No sabes cómo comenzar con DevOps? En este blog te mostraremos los primeros pasos para montar tu estrategia Continuous Integration / Continuous Delivery Pipeline de manera sencilla.
En este blog nos centraremos en las 3 primeras fases del ciclo de vida del desarrollo software, es decir, en el camino desde el equipo de desarrollo hacia el cliente, desde el código al lanzamiento del desarrollo, analizando cómo AWS nos ayuda en la creación del conocido como CI/CD Pipeline.
DevOps: ¿Qué es?
DevOps aparece ante la necesidad de alinear los diferentes equipos que, de una forma u otra, toman parte en el ciclo de vida de un desarrollo software o en su mantenimiento.
Si bien tradicionalmente los departamentos trabajaban prácticamente de manera aislada, DevOps propone una metodología orientada a:
- Eliminar barreras
- Facilitar la comunicación
- Mejorar la eficiencia
- Mejorar la calidad de los desarrollos de software
Ese ciclo de vida se compone de 5 fases, que son:
- Build: engloba la fase propia de desarrollo de software en función de los requisitos marcados por los usuarios finales y negocio.
- Test: para validar que el desarrollo responde ante dichas necesidades
- Release: la fase de lanzamiento del desarrollo, una vez pasadas todas las validaciones y pruebas necesarias
- Monitor: para seguir verificando de manera continua que el desarrollo es estable y responde ante las situaciones reales de producción
- Plan: última y, a la vez, primera fase, donde se realizan las tareas de diseño (o rediseño), las tareas de mejora o evolución del desarrollo, para así dar paso de nuevo a la fase de Build.
De estas 5 fases, nos centraremos en las 3 primeras, y mostraremos la arquitectura y los procedimientos que posibilitan la integración y entrega continuas.
CI/CD, el corazón de DevOps
Una parte integral de DevOps es la implementación de la metodología:
- Consistente en realizar una integración (CI – Continuous Integration)
- Entrega de manera continua (CD – Continuous Delivery)
Arquitectura de CI/CD
A nivel de arquitectura, podemos reflejarlo de la siguiente forma:
Si hacemos un resumen muy simple, llevamos el código a la computación en AWS de una manera automatizada, lo que facilita el trabajo de los diferentes roles que han de tomar parte en el proceso (desarrollo, validación, test, pruebas y despliegue).
Partiendo de que nuestro equipo utiliza GitLab como repositorio de código, el funcionamiento de la arquitectura anterior es el siguiente:
- Se realiza un push de código en GitLab, el cual se traslada al repositorio AWS CodeCommit mediante "push mirroring" o bien mediante la realización de un push remoto desde GitLab hasta AWS CodeCommit.
- El pipe se descarga el código desde el repositorio de CodeCommit, con lo que se inicia la fase de Build & Test dentro del servicio AWS CodeBuild, de nuevo con la ayuda de los eventos de CloudWatch, que actúan como trigger para iniciar cada una de las acciones.
- En el caso de que la construcción y los test del código resulten satisfactorios, el pipe configurado inicia la siguiente fase, que consiste en el despliegue del código en el ecosistema de desarrollo mediante el uso AWS CodeDeploy.
- Por último, si las validaciones son correctas (funcionalidad, usuarios, rendimiento, etc.), un nuevo trigger inicia de nuevo el servicio CodeDeploy, esta vez para desplegar en el ecosistema de producción, realizándose la entrega final de la aplicación.
¿Cuáles son los componentes de esta arquitectura?
Tras analizar las diferentes fases y servicios que componen el pipe CI/CD, resulta interesante entrar un poco más en profundidad en cada uno de los servicios AWS que han formado parte del flujo, haciendo mención expresa a que todos son servicios completamente administrados por AWS, lo que implica que nos despreocuparemos de la gestión de la infra, alta disponibilidad, rendimiento, etc. y los consumiremos en modo pago por uso:
AWS CodeCommit
Un servicio de control de código fuente que aloja repositorios seguros basados en Git. CodeCommit facilita a los equipos la colaboración en código en un ecosistema seguro y altamente escalable. Esta solución utiliza CodeCommit para crear un repositorio que almacena el código de aplicación.
AWS CodeBuild
Un servicio de integración continua que compila código fuente, ejecuta pruebas y produce paquetes de software listos para implementarse en un servidor de compilación creado dinámicamente. Esta solución usa CodeBuild para compilar y probar el código.
AWS CodeDeploy
Un servicio de implementación completamente administrado que automatiza las implementaciones de software en una variedad de servicios de computación como Amazon EC2, AWS Fargate, AWS Lambda e incluso servidores locales (On Premise).
AWS CodePipeline
Un servicio de entrega continua que ayuda a automatizar los pipes de versiones para obtener actualizaciones rápidas y fiables de aplicaciones e infraestructura. Esta solución utiliza CodePipeline para crear un pipe integral que recupera el código de la aplicación de CodeCommit, compila y prueba con CodeBuild y, por último, se implementa con CodeDeploy.
AWS CloudWatch Events
Se crea una regla de AWS CloudWatch Events para activar CodePipeline en una confirmación de Git en el repositorio de CodeCommit.
Amazon Simple Storage Service (Amazon S3)
Un servicio de almacenamiento de objetos que ofrece escalabilidad, disponibilidad de datos, seguridad y rendimiento líderes del sector. Esta solución utiliza un bucket de S3 para almacenar los artefactos de compilación e implementación creados durante la ejecución del pipe.
¿Qué podemos ofrecerte?
Desde Neteris queremos ayudarte a que IT responda de la manera más ágil posible ante las necesidades de negocio, y creemos que este tipo de soluciones realmente contribuyen a ser más eficientes, hacer más con menos y, así, obtener ventaja competitiva.
Por tanto, no dudes en contactar con nosotros para estudiar tu caso y analizar cuál es la forma óptima de cumplir con los requisitos de tu negocio.