Introducción: ¿Por qué necesitas CI/CD para proyectos JavaScript?
\n\nEl desarrollo de aplicaciones JavaScript modernas en Node.js requiere no solo escribir código de calidad, sino también entregarlo de manera confiable a los usuarios finales. Las pruebas, compilación e implementación manuales no solo son lentas, sino que también son propensas a errores humanos. Aquí es donde entra en juego CI/CD (Integración Continua / Despliegue Continuo), una metodología para automatizar todas las etapas del ciclo de vida del software.
\n\nCI/CD para proyectos JavaScript permite ejecutar pruebas automáticamente con cada push al repositorio, compilar la aplicación y desplegarla en un servidor o en la nube. Una de las herramientas más populares para implementar esta metodología es GitHub Actions, un sistema de automatización de flujos de trabajo integrado en la plataforma GitHub.
\n\nEn este artículo, analizaremos cómo configurar un pipeline completo de CI/CD para un proyecto JavaScript (Node.js) usando GitHub Actions: desde escribir la configuración hasta el despliegue. Aprenderás cómo acelerar el desarrollo, mejorar la calidad del código y olvidarte de las operaciones rutinarias.
\n\nParte principal: Creación de un pipeline CI/CD con GitHub Actions
\n\n1. ¿Qué es GitHub Actions y cómo funciona?
\n\nGitHub Actions es una plataforma para automatizar flujos de trabajo (workflows) que se ejecutan en respuesta a eventos en el repositorio (push, pull request, creación de issues, etc.). Un workflow es un conjunto de pasos que se ejecutan en máquinas virtuales (runners). Cada paso puede ejecutar scripts, instalar dependencias o llamar a servicios externos.
\n\nConceptos principales:
\n- \n
- Workflow — archivo de configuración YAML almacenado en la carpeta
.github/workflows/. \n - Event — desencadenante que inicia el workflow (por ejemplo,
pushopull_request). \n - Job — conjunto de pasos que se ejecutan en un mismo runner (dependencias, pruebas, compilación). \n
- Step — comando o acción individual (action). \n
Para proyectos JavaScript, usaremos el runner estándar con Ubuntu, ya que admite Node.js de forma nativa.
\n\n2. Configuración básica: Pruebas y linting
\n\nComencemos creando un workflow simple para pruebas y linting del código. Crea un archivo .github/workflows/ci.yml en la raíz de tu repositorio.
Ejemplo de configuración para un proyecto Node.js:
\n\nname: CI for Node.js\n\non:\n push:\n branches: [ main, develop ]\n pull_request:\n branches: [ main ]\n\njobs:\n test:\n runs-on: ubuntu-latest\n\n strategy:\n matrix:\n node-version: [18.x, 20.x]\n\n steps:\n - name: Checkout repository\n uses: actions/checkout@v4\n\n - name: Setup Node.js ${{ matrix.node-version }}\n uses: actions/setup-node@v4\n with:\n node-version: ${{ matrix.node-version }}\n cache: 'npm'\n\n - name: Install dependencies\n run: npm ci\n\n - name: Run linter\n run: npm run lint\n\n - name: Run tests\n run: npm test\n\nAnalicemos los puntos clave:
\n- \n
- Matrix strategy — permite ejecutar pruebas en varias versiones de Node.js (18.x y 20.x) en paralelo. \n
- actions/checkout — acción estándar para clonar el repositorio. \n
- actions/setup-node — instala la versión requerida de Node.js y habilita el almacenamiento en caché de
node_modulespara acelerar el proceso. \n - npm ci — instalación limpia de dependencias desde
package-lock.json(más rápido y confiable quenpm install). \n
Después de hacer push de este archivo al repositorio, GitHub Actions ejecutará automáticamente las pruebas. Verás el resultado en la sección "Actions" de tu repositorio.
\n\n3. Compilación y publicación de una imagen Docker
\n\nE