Introducción a CI/CD y GitHub Actions para JavaScript
El desarrollo moderno de aplicaciones JavaScript en Node.js requiere no solo código de calidad, sino también un proceso confiable para entregarlo a los usuarios. CI/CD (Integración Continua / Despliegue Continuo) es un conjunto de prácticas que permite automatizar la compilación, las pruebas y el despliegue del código. Una de las herramientas más populares para implementar CI/CD es GitHub Actions, un sistema de automatización de flujo de trabajo integrado en la plataforma GitHub.
En este artículo, analizaremos en detalle cómo configurar CI/CD para un proyecto JavaScript (Node.js) usando GitHub Actions. Aprenderá a crear pipelines, ejecutar pruebas, realizar linting, compilar el proyecto y desplegarlo automáticamente en un servidor o en un hosting en la nube. El material será útil tanto para desarrolladores principiantes como para ingenieros experimentados que deseen optimizar el proceso de desarrollo.
Fundamentos de GitHub Actions: estructura y sintaxis
GitHub Actions funciona con archivos YAML que se almacenan en el directorio .github/workflows de su repositorio. Cada uno de estos archivos define uno o varios workflows, que se ejecutan según eventos específicos: push, pull request, creación de un release, etc.
La estructura básica de un workflow incluye:
- name — nombre del pipeline;
- on — evento que desencadena la ejecución;
- jobs — conjunto de tareas que se ejecutan de forma secuencial o paralela;
- steps — pasos dentro de cada tarea (comandos, acciones).
Veamos un ejemplo mínimo para un proyecto Node.js:
name: Node.js CI
on: push: branches: [ main ] pull_request: branches: [ main ]
jobs: build: runs-on: ubuntu-latest
steps: - uses: actions/checkout@v4 - name: Setup Node.js uses: actions/setup-node@v4 with: node-version: '20' - run: npm ci - run: npm testEn este ejemplo, usamos acciones integradas: actions/checkout para clonar el repositorio y actions/setup-node para instalar la versión necesaria de Node.js. El comando npm ci instala las dependencias estrictamente según package-lock.json, y npm test ejecuta las pruebas.
Configuración de pruebas y linting
Un pipeline de CI/CD de calidad para un proyecto JavaScript debe incluir la verificación del código según los estándares y las pruebas automáticas. Veamos un ejemplo avanzado con herramientas populares: ESLint para linting, Jest para pruebas y Prettier para formateo.
Agreguemos las dependencias necesarias al proyecto:
npm install --save-dev eslint jest prettier eslint-config-prettierCreemos un archivo de configuración .eslintrc.json:
{ "env": { "node": true, "es2021": true, "jest": true }, "extends": ["eslint:recommended", "prettier"], "parserOptions": { "ecmaVersion": "latest", "sourceType": "module" }, "rules": { "no-console": "warn", "semi": ["error", "always"] }}Ahora actualicemos el archivo del workflow:
name: Lint and Test
on: push: branches: [ main, develop ] pull_request: branches: [ main ]
jobs: quality: runs-on: ubuntu-latest
steps: - uses: actions/checkout@v4 - uses: actions/setup-node@v4 with: node-version: '20' cache: 'npm'
- name: Install dependencies run: npm ci
- name: Run linter run: npx eslint .
- name: Check formatting run: npx prettier --check .
- name: Run tests run: npm test
- name: Upload test coverage