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.
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