Inicio > Cursos > Docker & Kubernetes > CI con GitHub Actions
Docker & KubernetesCI/CD y DeployLección 11 de 12

CI con GitHub Actions

GitHub Actions automatiza tu pipeline: cada push ejecuta tests, linters y construye tu imagen Docker. Si todo pasa, la imagen esta lista para deploy.

Conceptos: • Workflow: archivo YAML que define el pipeline (.github/workflows/) • Trigger: evento que lo dispara (push, pull_request, schedule) • Job: grupo de pasos que corren en un runner virtual • Step: un comando o accion individual • Action: modulo reutilizable (ej: actions/checkout, docker/build-push-action) • Secret: variable encriptada (passwords, API keys)

# .github/workflows/ci.yml
name: CI Pipeline

on:
  push:
    branches: [main]
  pull_request:
    branches: [main]

jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      - name: Setup Node.js
        uses: actions/setup-node@v4
        with:
          node-version: 20
          cache: npm

      - name: Instalar dependencias
        run: npm ci

      - name: Lint
        run: npm run lint

      - name: Tests
        run: npm test

  build-image:
    needs: test  # solo si tests pasan
    runs-on: ubuntu-latest
    if: github.ref == 'refs/heads/main'  # solo en main
    steps:
      - uses: actions/checkout@v4

      - name: Login a Docker Hub
        uses: docker/login-action@v3
        with:
          username: ${{ secrets.DOCKER_USER }}
          password: ${{ secrets.DOCKER_TOKEN }}

      - name: Build y Push
        uses: docker/build-push-action@v5
        with:
          push: true
          tags: |
            miuser/mi-app:latest
            miuser/mi-app:${{ github.sha }}
# Pipeline con cache y matrix (probar multiples versiones)
name: CI Matrix

on: [push, pull_request]

jobs:
  test:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        node-version: [18, 20, 22]
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-node@v4
        with:
          node-version: ${{ matrix.node-version }}
          cache: npm
      - run: npm ci
      - run: npm test

  docker:
    needs: test
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      - name: Set up Docker Buildx
        uses: docker/setup-buildx-action@v3

      - name: Build con cache
        uses: docker/build-push-action@v5
        with:
          push: false
          load: true
          tags: mi-app:test
          cache-from: type=gha
          cache-to: type=gha,mode=max

      - name: Test de la imagen
        run: |
          docker run -d -p 3000:3000 --name test mi-app:test
          sleep 5
          curl -f http://localhost:3000/health
          docker stop test
ConsejoSiempre usa cache en tus pipelines. cache: npm en setup-node y cache-from: type=gha en Docker reducen el tiempo de CI de minutos a segundos.
← Auto Scaling y GitOpsDeploy Continuo y Rollback →

Practica esta lección

Resuelve los ejercicios del curso de Docker & Kubernetes en la app, gratis y con corrección automática.

Empezar a practicar