🔄 CI/CD — Integración y Despliegue Continuo
Usamos GitHub Actions para automatizar el proceso de lint, tests, build y deploy en todos los servicios del monorepo.
Flujo general
Pipeline de PR — Lint y Tests
Cada Pull Request hacia develop o main dispara el workflow de validación:
Backend (rial-backend)
Archivo: .github/workflows/lint_and_test.yml
Trigger: push y pull_request hacia main o develop
jobs:
lint_and_build:
steps:
- Checkout
- Setup Node.js 22
- Enable Yarn Classic (1.22.22)
- Install dependencies (yarn --frozen-lockfile)
- Generate Prisma client
- TypeScript type check (tsc --noEmit)
- Compile TypeScript (yarn build)
- Run linter (yarn lint)Archivo: .github/workflows/unit-and-integration-tests.yml
Trigger: pull_request hacia develop
jobs:
test:
steps:
- Checkout + Setup Node
- Install dependencies
- Generate Prisma client
- Run Jest tests (yarn test)Frontend (rial-frontend)
Archivo: .github/workflows/lint.yml
jobs:
lint:
steps:
- Checkout
- Setup Node.js
- Install dependencies
- Run ESLint
- TypeScript type checkEl PR no puede mergearse si alguno de estos checks falla.
Pipeline de deploy a Staging
Trigger: push a la rama develop
Backend — Deploy a Staging
Archivo: .github/workflows/deploy-to-gcp-staging.yml
env:
PROJECT_ID: interfaz-464700
REGION: southamerica-east1
GAR_LOCATION: southamerica-east1-docker.pkg.dev/.../rial-backend:latest
steps: 1. Checkout
2. Auth con GCP (Service Account Key)
3. Setup gcloud CLI
4. Docker auth → Artifact Registry
5. Setup Docker Buildx (para builds más rápidos con caché)
6. Build + Push imagen Docker (con caché de GitHub Actions)
7. gcloud run deploy rial-backend-staging --image ... --region southamerica-east1Frontend — Deploy a Staging
Similar al backend pero deploya rial-frontend-staging en Cloud Run.
Pipeline de deploy a Producción
Trigger: push a la rama production
Backend — Deploy a Producción
Archivo: .github/workflows/deploy-to-gcp-prod.yml
El flujo es igual al de staging pero con las variables de producción. Incluye un paso adicional de New Relic deployment marker:
- name: Track backend production change in New Relic
uses: newrelic/deployment-marker-action@v2.6.2
with:
apiKey: ${{ secrets.NEW_RELIC_API_KEY }}
commandType: changeTrackingCreateEvent
version: ${{ github.sha }}
category: Deployment
description: "Deploy backend production from GitHub Actions"
customAttributes: '{service: "backend", environment: "production"}'Esto registra cada deploy en New Relic para correlacionar cambios de código con cambios en performance.
Configuración de concurrencia
concurrency:
group: deploy-prod-${{ github.ref }}
cancel-in-progress: trueSi se pushea dos veces seguido a production, el segundo deploy cancela automáticamente al primero para evitar deploys simultáneos.
Ramas y ambientes
| Rama | Ambiente | URL |
|---|---|---|
develop | Staging | staging.rial-ai.com |
production | Producción | rial-ai.com |
feature/* | Sin deploy automático | — |
Secretos de GitHub Actions
Los secretos se configuran en GitHub → Repository Settings → Secrets and variables. Los principales:
| Secret | Descripción |
|---|---|
SERVICE_ACCOUNT_KEY | JSON de la Service Account de GCP para autenticarse |
DATABASE_URL_PROD | URL de conexión a PostgreSQL de producción |
DATABASE_URL_PROD_DIRECT | URL directa (para migraciones Prisma) |
JWT_SECRET_PROD | Secret para firmar tokens JWT |
SUPABASE_URL_PROD | URL de Supabase producción |
SUPABASE_SERVICE_ROLE_KEY_PROD | Clave de service role de Supabase |
NEW_RELIC_LICENSE_KEY_PROD | API key de New Relic |
GMAIL_PASS_PROD | Contraseña de cuenta de notificaciones por email |
TWILIO_*_PROD | Credenciales de Twilio para WhatsApp |
Los valores de estos secretos se encuentran en secrets.rial-ai.com .
Rollback manual en Cloud Run
Si un deploy a producción tiene un problema crítico, se puede hacer rollback en segundos desde la consola de GCP:
Opción 1 — Cloud Run Console
- Ir a Cloud Run Console
- Seleccionar el servicio (
rial-backendorial-frontend) - Ir a la pestaña “Revisions”
- Encontrar la revisión anterior a la problemática
- Hacer clic en ”⋮ → Migrate traffic” y asignar 100% de tráfico a esa revisión
Opción 2 — gcloud CLI
# Listar revisiones disponibles
gcloud run revisions list \
--service=rial-backend \
--region=southamerica-east1 \
--project=interfaz-464700
# Redirigir tráfico a una revisión específica
gcloud run services update-traffic rial-backend \
--to-revisions=rial-backend-00042-xyz=100 \
--region=southamerica-east1 \
--project=interfaz-464700