¿Qué es CI/CD?
CI/CD (Integración Continua / Despliegue Continuo) automatiza el proceso de construcción, pruebas y despliegue de tu aplicación. Docker hace que los pipelines CI/CD sean consistentes y reproducibles porque el mismo contenedor se ejecuta en todas partes.
GitHub Actions: Construir y Publicar Imagen Docker
# .github/workflows/docker-build.yml
name: Construir y Publicar Imagen Docker
on:
push:
branches: [main]
pull_request:
branches: [main]
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout código
uses: actions/checkout@v4
- name: Configurar Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Login al registro
uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Construir y publicar
uses: docker/build-push-action@v5
with:
context: .
push: true
tags: ghcr.io/usuario/miapp:latest
cache-from: type=gha
cache-to: type=gha,mode=max
Dockerfile con Etapa de Pruebas
# Dockerfile multi-etapa con etapa de pruebas
FROM node:20-alpine AS deps
WORKDIR /app
COPY package*.json ./
RUN npm ci
FROM deps AS test
COPY . .
RUN npm run lint
RUN npm test
FROM deps AS builder
COPY . .
RUN npm run build
FROM node:20-alpine AS production
WORKDIR /app
COPY --from=builder /app/dist ./dist
COPY --from=deps /app/node_modules ./node_modules
CMD ["node", "dist/server.js"]
Puntos Clave
- ✅ Automatiza builds en cada push con GitHub Actions
- ✅ Ejecuta pruebas dentro de contenedores para resultados consistentes
- ✅ Usa builds multi-etapa con una etapa de pruebas para CI
- ✅ Habilita el caché de capas para acelerar builds en CI significativamente