TechLead
Lección 10 de 18
5 min de lectura
Docker

CI/CD con Docker y GitHub Actions

Automatiza la construcción, pruebas y despliegue de imágenes Docker con pipelines CI/CD de GitHub Actions

¿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

Continuar Aprendiendo