Práctica Final DevOps CI/CD Aplicación web "Hola Mundo" con pipeline completo de CI/CD usando GitHub Actions, Docker y despliegue automático.
🚀 Características ✅ Aplicación Node.js con Express ✅ Pruebas unitarias con Jest ✅ Containerización con Docker ✅ Pipeline CI/CD con GitHub Actions ✅ Despliegue automático a producción 📋 Requisitos Previos Node.js 18+ Docker Cuenta en Docker Hub Cuenta en Render (o servicio similar) Repositorio en GitHub 🛠️ Instalación Local bash
git clone https://github.com/TU_USUARIO/practica-devops-cicd.git cd practica-devops-cicd
npm install
npm run dev
npm test 🐳 Docker bash
docker build -t practica-devops-cicd .
docker run -p 3000:3000 practica-devops-cicd
curl http://localhost:3000 🔧 Configuración de Secrets en GitHub Debes configurar los siguientes secrets en tu repositorio de GitHub: Settings → Secrets and variables → Actions → New repository secret
Docker Hub: DOCKERHUB_USERNAME: Tu usuario de Docker Hub DOCKERHUB_TOKEN: Token de acceso de Docker Hub Render (opcional): RENDER_DEPLOY_HOOK: URL del deploy hook de Render 📝 Cómo obtener los Secrets Docker Hub Token: Ir a https://hub.docker.com/ Settings → Security → New Access Token Copiar el token generado Render Deploy Hook: Crear Web Service en Render Settings → Deploy Hook Copiar la URL proporcionada 🔄 Pipeline CI/CD El pipeline se ejecuta automáticamente al hacer push a la rama main:
Test Stage: Instala dependencias y ejecuta pruebas Docker Stage: Construye y sube imagen a Docker Hub Deploy Stage: Despliega automáticamente a producción 📊 Endpoints de la API GET / - Mensaje de hola mundo con timestamp GET /health - Health check de la aplicación 🧪 Estructura de Pruebas ✓ GET / debe retornar mensaje de hola mundo ✓ GET / debe retornar timestamp ✓ GET / debe retornar versión ✓ GET /health debe retornar status OK ✓ Función saludar debe saludar correctamente 📦 Estructura del Proyecto practica-devops-cicd/ ├── .github/ │ └── workflows/ │ └── ci-cd.yml ├── app.js ├── app.test.js ├── package.json ├── jest.config.js ├── Dockerfile ├── .dockerignore ├── .gitignore └── README.md 🚀 Despliegue Manual Si prefieres desplegar manualmente:
bash
docker login