Conceptos básicos de CI/CD
10 ejemplos para estructurar CI (validación de pull request) y CD (despliegue de lanzamiento) para servicios Node.js 24 TypeScript - 7 básicos y 3 intermedios.
Busca en todas las páginas de la documentación
10 ejemplos para estructurar CI (validación de pull request) y CD (despliegue de lanzamiento) para servicios Node.js 24 TypeScript - 7 básicos y 3 intermedios.
mkdir node-service && cd node-service
npm init -y
npm pkg set type=module
npm install express@5
npm install -D typescript@5.6 vitest eslint @types/nodePara detalles específicos de GitHub Actions, consulta GitHub Actions para Node y Quality Gates.
PR abierto / push
-> instalar (npm ci)
-> lint
-> typecheck
-> prueba unitaria
-> (opcional) prueba de integración
-> bloquear fusión si algún paso falla
Etiquetar / fusionar a main
-> instalar + probar (repetir puertas)
-> construir (tsc / docker build)
-> escanear imagen / auditar
-> push de artefacto (registro / zip S3)
-> desplegar staging
-> prueba de humo en staging
-> desplegar producción (aprobación manual o progresiva)
package.json{
"scripts": {
"lint": "eslint src",
"typecheck": "tsc --noEmit",
"test": "vitest run",
"build": "tsc -p tsconfig.json",
"audit:ci": "npm audit --audit-level=high"
}
}tsc --noEmit detecta errores de tipo sin emitir archivospackage.json# .github/workflows/ci.yml
name: CI
on:
pull_request:
push:
branches: [main]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: "24"
cache: npm
- run: npm ci
- run: npm run lint
- run: npm run typecheck
- run: npm run testcache: npm acelera las instalaciones cuando el lockfile no ha cambiadopull_request y push a mainsteps:
- run: npm ci
- run: npm run lint # segundos
- run: npm run typecheck # segundos
- run: npm run test # minutos
- run: npm run build # después de que pasen las pruebas| Entorno | Disparador | Propósito |
|---|---|---|
ci | Cada PR | Solo validación |
staging | Fusionar a main | Integración pre-producción |
production | Etiqueta o flujo de trabajo aprobado | Tráfico de clientes |
- name: Build and push image
run: |
IMAGE=ghcr.io/acme/api:${{ github.sha }}
docker build -t "$IMAGE" .
docker push "$IMAGE"github.sha, no solo :latest# .github/workflows/reusable-node-ci.yml
on:
workflow_call:
inputs:
node-version:
required: false
type: string
default: "24"
jobs:
ci:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: ${{ inputs.node-version }}
cache: npm
- run: npm ci
- run: npm run lint && npm run typecheck && npm run test# .github/workflows/ci.yml
jobs:
call-ci:
uses: ./.github/workflows/reusable-node-ci.yml# .github/workflows/release.yml
name: Release
on:
push:
tags: ["v*.*.*"]
jobs:
deploy-staging:
runs-on: ubuntu-latest
environment: staging
steps:
- uses: actions/checkout@v4
- run: npm ci && npm test && npm run build
- run: ./scripts/deploy.sh staging ${{ github.sha }}
deploy-production:
needs: deploy-staging
runs-on: ubuntu-latest
environment: production
steps:
- run: ./scripts/deploy.sh production ${{ github.sha }}environment de GitHub añade revisores requeridos para producción- name: Validate commit messages on PR
uses: wagoid/commitlint-github-action@v6Entornos de vista previa opcionales por PR - Entornos de Vista Previa. Por defecto: solo validar, desplegar al fusionar.
Sí. Vuelve a ejecutar las puertas en main para detectar desviaciones de fusión. Algunos equipos confían solo en PR; volver a ejecutar en main es más seguro.
Pipeline de lanzamiento después de las pruebas, o pipeline de PR solo para cambios en Dockerfile con puerta de escaneo. Nunca omitas las pruebas antes de subir la imagen.
Filtros de ruta: paths: ['services/api/**'] activan solo los flujos de trabajo afectados. Usa Turborepo o Nx para la detección de afectados.
CI construye el artefacto zip; CD ejecuta aws lambda update-function-code con el mismo objeto S3 nombrado con SHA.
Secretos de GitHub Actions y OIDC a AWS. No hay claves de AWS de larga duración en el repositorio. Consulta Administradores de Secretos.
Versiones de la pila: Esta página fue escrita para Node.js 24.18.0 (LTS Activo), npm 10+, TypeScript 5.6+, Express 5, Fastify 5 y NestJS 11.
Revisado por Chris St. John·Última actualización: 19 jul 2026