VPS - CI/CD
El flujo de CI/CD de Checkout v2 está diseñado para automatizar la integración y entrega continua del proyecto. Mediante la combinación de herramientas como GitHub Actions, Docker y Prisma, se asegura que las actualizaciones de código se desplieguen de manera eficiente y sin interrupciones en producción. El proceso comienza con la clonación del repositorio, seguida por la validación y aplicación de migraciones de base de datos. Posteriormente, se implementan los contenedores y se limpia el entorno, manteniendo la infraestructura actualizada y optimizada. Este enfoque permite una integración fluida entre el desarrollo, las pruebas y el despliegue, minimizando el riesgo de errores y garantizando una entrega continua de valor.
Flujo de CI/CD
Herramientas
Docker Hub
Utilizamos Docker Hub para el almacenamiento de imágenes de Docker en repositorios privados, utilizando así un registro de actualización para mantener las imágenes de una manera más eficiente.
Scripts y archivos
Se desarrollaron varios archivos que permiten una mejor gestión de desarrollo e integración continua, manejándolo mediante varios scripts y archivos:
| Script | Descripción |
|---|---|
| update_and_restart.sh | Actualiza los contenedores en caliente |
| migrate_db.sh | Realiza la migración de base de datos según el esquema de Prisma |
| checkoutv2-compose.yml | Docker-compose conteniendo todas las propiedades necesarias para levantar el proyecto |
update_and_restart.sh
Este script realiza un despliegue automático con Docker de la siguiente manera:
- Verifica si el archivo docker-compose.yml existe.
- Descarga las últimas versiones de las imágenes de los contenedores.
- Reinicia los contenedores aplicando la actualización sin detener la aplicación.
- Elimina imágenes antiguas que no están en uso.
- Muestra los contenedores en ejecución.
- (Opcional) Muestra los logs en tiempo real de los contenedores. El objetivo es actualizar y gestionar los contenedores de forma rápida y eficiente.
El link del recurso se puede encontrar Dentro del repositoriode Github
migrate_db.sh
Este script realiza lo siguiente:
- Clona un repositorio de GitHub que contiene un archivo
schema.prismade Prisma. - Verifica si el archivo
schema.prismaexiste en el repositorio clonado. - Copia el archivo
schema.prismaal directorio actual. - Ejecuta una migración de base de datos usando Prisma (
prisma db push), aplicando el esquema del archivo copiado. - Muestra un mensaje de éxito si la migración es exitosa o un error si algo falla.
- Elimina el directorio temporal con el repositorio clonado al finalizar el script.
El objetivo es clonar un repositorio, aplicar cambios de migración a la base de datos y limpiar el entorno después.
El link del recurso se puede encontrar Dentro del repositoriode Github
checkoutv2-compose.yml
Este archivo de configuración de Docker Compose define varios servicios necesarios para una aplicación, cada uno con su respectiva configuración:
-
redis:
- Usa la imagen oficial de Redis.
- Se reinicia automáticamente y expone el puerto
6379.
-
mongodb:
- Usa una imagen de MongoDB configurada con autenticación.
- Expondrá el puerto
27017 - Utiliza un volumen persistente
mongodb_datapara almacenar los datos. - Se configura con variables de entorno para la inicialización de la base de datos (usuario, contraseña y nombre de la base de datos).
-
frontend:
- Utiliza la imagen de Docker para el frontend del checkout.
- Se reinicia automáticamente y expone el puerto
4000.
-
middleend:
- Usa una imagen personalizada para el middleend.
- Depende de los servicios
redisymongodbpara funcionar. - Se reinicia automáticamente y expone el puerto
3015. - Contiene varias variables de entorno para configuraciones de AWS y de la base de datos.
-
Volumen:
- Se define un volumen persistente
mongodb_datapara MongoDB.
- Se define un volumen persistente
-
Red:
- Utiliza la red por defecto con el driver
bridge.
- Utiliza la red por defecto con el driver
En resumen, el archivo configura un entorno Docker para una aplicación que incluye Redis, MongoDB, un frontend y un middleend, todos comunicándose entre sí mediante variables de entorno y configuraciones de red.
El link del recurso se puede encontrar Dentro del repo de Github