CI/CD con GitHub Actions desde cero: guia completa
CI/CD es una de las practicas mas importantes en el mundo DevOps. GitHub Actions te permite automatizar todo tu pipeline de integracion y despliegue directamente desde tu repositorio, sin necesidad de herramientas externas. En este post te explico como funciona desde cero con ejemplos reales. Consulta la documentacion oficial de GitHub Actions para mas detalle.
Que es CI/CD y por que usarlo
CI/CD son las siglas de Continuous Integration y Continuous Deployment. Con CI, cada vez que subes codigo se ejecutan automaticamente los tests y el linting. Con CD, si el CI pasa, el codigo se despliega automaticamente al entorno correspondiente.
Conceptos clave de GitHub Actions CI/CD
- Workflow: el archivo YAML que define el pipeline completo.
- Event: lo que dispara el workflow (push, pull_request, schedule).
- Job: un conjunto de steps que se ejecutan en el mismo runner.
- Step: una tarea individual dentro de un job.
- Action: un bloque reutilizable del Marketplace.
- Runner: la maquina donde se ejecuta el job.
Tu primer workflow de CI/CD con GitHub Actions
Crea el archivo .github/workflows/hola-mundo.yml en tu repositorio:
name: Mi primer workflow
on:
push:
branches: [ main ]
jobs:
hola-mundo:
runs-on: ubuntu-latest
steps:
- name: Checkout del codigo
uses: actions/checkout@v4
- name: Decir hola
run: echo Hola desde GitHub Actions
CI para Node.js con GitHub Actions
name: CI - Node.js
on:
push:
branches: [ main, develop ]
pull_request:
branches: [ main ]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 20
cache: npm
- run: npm ci
- run: npm run lint
- run: npm test
Pipeline CI/CD completo con Docker
Este es el workflow mas completo: construye la imagen Docker, ejecuta los tests y despliega si todo pasa:
name: CI/CD - Build y Deploy
on:
push:
branches: [ main ]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 20
cache: npm
- run: npm ci
- run: npm test
build:
needs: test
runs-on: ubuntu-latest
permissions:
contents: read
packages: write
steps:
- uses: actions/checkout@v4
- name: Login en GitHub Container Registry
uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Build y push de la imagen
uses: docker/build-push-action@v5
with:
context: .
push: true
tags: ghcr.io/${{ github.repository }}:main
deploy:
needs: build
runs-on: ubuntu-latest
steps:
- name: Deploy via SSH
uses: appleboy/ssh-action@v1
with:
host: ${{ secrets.SERVER_HOST }}
username: ${{ secrets.SERVER_USER }}
key: ${{ secrets.SSH_PRIVATE_KEY }}
script: |
docker pull ghcr.io/${{ github.repository }}:main
docker stop mi-app || true
docker rm mi-app || true
docker run -d --name mi-app -p 3000:3000 ghcr.io/${{ github.repository }}:main
Secretos en GitHub Actions
Nunca pongas credenciales en el workflow. Añadelos en Settings del repo, luego Secrets and variables, luego Actions:
steps:
- name: Deploy
env:
DATABASE_URL: ${{ secrets.DATABASE_URL }}
API_KEY: ${{ secrets.API_KEY }}
run: ./deploy.sh
Actions mas utiles del Marketplace
| Action | Para que sirve |
|---|---|
| actions/checkout@v4 | Clona el repositorio |
| actions/setup-node@v4 | Instala Node.js |
| docker/build-push-action@v5 | Build y push Docker |
| azure/login@v2 | Login en Azure |
| google-github-actions/auth@v2 | Autenticacion en GCP |
| appleboy/ssh-action@v1 | Comandos via SSH |
| actions/cache@v4 | Cachear dependencias |
Conclusion
GitHub Actions es una de las herramientas mas potentes del ecosistema DevOps. Lo mejor es que esta integrado en GitHub sin servidores adicionales. Con los ejemplos de este post tienes todo lo necesario para montar tu primer pipeline de CI/CD.
En el proximo post veremos GitHub Actions vs GitLab CI: comparativa completa 2026. Si quieres profundizar en contenedores, revisa el post de Docker Compose completo. Tienes preguntas sobre GitHub Actions? Dejame un comentario.
