DEV Community

🚀 CI/CD Testing Tools Comparison: GitHub Actions vs GitLab CI vs Jenkins (With Real Examples!)

📋 Introducción

Las herramientas de testing automatizado son fundamentales en el desarrollo moderno. Este artículo compara las principales plataformas CI/CD con ejemplos prácticos y código real.


🔧 Herramientas Analizadas

1️⃣ GitHub Actions

¿Qué es? Plataforma CI/CD nativa de GitHub

✨ Características Principales:

  • Integración nativa con repositorios GitHub
  • Marketplace con miles de actions predefinidas
  • Matrix builds para múltiples entornos
  • 2,000 minutos gratis/mes

💻 Ejemplo Real:

# .github/workflows/test.yml
name: Run Tests

on:
  push:
    branches: [ main, develop ]
  pull_request:
    branches: [ main ]

jobs:
  test:
    runs-on: ubuntu-latest

    strategy:
      matrix:
        node-version: [16.x, 18.x, 20.x]

    steps:
    - uses: actions/checkout@v3

    - name: Setup Node.js ${{ matrix.node-version }}
      uses: actions/setup-node@v3
      with:
        node-version: ${{ matrix.node-version }}
        cache: 'npm'

    - name: Install dependencies
      run: npm ci

    - name: Run tests
      run: npm test -- --coverage

    - name: Upload coverage
      uses: codecov/codecov-action@v3
Enter fullscreen mode Exit fullscreen mode

🎯 Mejor Para: Proyectos en GitHub que necesitan integración simple y rápida


2️⃣ GitLab CI/CD

¿Qué es? Plataforma DevOps completa con CI/CD integrado

✨ Características Principales:

  • Plataforma todo-en-uno
  • Auto DevOps para configuración automática
  • Container registry incluido
  • Visualización potente de pipelines

💻 Ejemplo Real:

# .gitlab-ci.yml
stages:
  - build
  - test
  - deploy

variables:
  POSTGRES_DB: test_db

build:
  stage: build
  image: node:18
  script:
    - npm install
  artifacts:
    paths:
      - node_modules/
    expire_in: 1 hour

unit_tests:
  stage: test
  image: node:18
  dependencies:
    - build
  script:
    - npm run test:unit
  coverage: '/Lines\s*:\s*(\d+\.\d+)%/'
  artifacts:
    reports:
      junit: junit.xml
      coverage_report:
        coverage_format: cobertura
        path: coverage/cobertura-coverage.xml

integration_tests:
  stage: test
  image: node:18
  services:
    - postgres:14
  script:
    - npm run test:integration
  only:
    - merge_requests
    - main
Enter fullscreen mode Exit fullscreen mode

🎯 Mejor Para: Equipos que usan GitLab y necesitan una solución DevOps completa


3️⃣ Jenkins

¿Qué es? Servidor de automatización open-source con máxima customización

✨ Características Principales:

  • 1800+ plugins disponibles
  • Auto-hospedado con control total
  • Builds distribuidos
  • Comunidad masiva

💻 Ejemplo Real:

// Jenkinsfile
pipeline {
    agent any

    tools {
        nodejs 'NodeJS-18'
    }

    environment {
        CI = 'true'
    }

    stages {
        stage('Checkout') {
            steps {
                checkout scm
            }
        }

        stage('Install') {
            steps {
                sh 'npm ci'
            }
        }

        stage('Test') {
            steps {
                sh 'npm test -- --ci'
            }
            post {
                always {
                    junit 'test-results/junit.xml'
                }
            }
        }

        stage('Coverage') {
            steps {
                sh 'npm run test:coverage'
            }
            post {
                always {
                    publishCoverage adapters: [
                        coberturaAdapter('coverage/cobertura-coverage.xml')
                    ]
                }
            }
        }
    }

    post {
        failure {
            emailext (
                subject: "Build Failed: ${env.JOB_NAME}",
                body: "Check: ${env.BUILD_URL}",
                to: "${env.CHANGE_AUTHOR_EMAIL}"
            )
        }
    }
}
Enter fullscreen mode Exit fullscreen mode

🎯 Mejor Para: Empresas que necesitan customización extrema e infraestructura propia


4️⃣ CircleCI

¿Qué es? Plataforma cloud reconocida por su velocidad

✨ Características Principales:

  • Builds súper rápidos
  • Caching inteligente
  • Soporte Docker nativo
  • Analytics poderosos

💻 Ejemplo Real:

# .circleci/config.yml
version: 2.1

orbs:
  node: circleci/node@5.1.0

executors:
  node-executor:
    docker:
      - image: cimg/node:18.17

jobs:
  test:
    executor: node-executor
    parallelism: 4
    steps:
      - checkout
      - restore_cache:
          keys:
            - v1-deps-{{ checksum "package-lock.json" }}
      - run:
          name: Install
          command: npm ci
      - save_cache:
          paths:
            - node_modules
          key: v1-deps-{{ checksum "package-lock.json" }}
      - run:
          name: Run tests
          command: |
            FILES=$(circleci tests glob "src/**/*.test.js" | \
                    circleci tests split --split-by=timings)
            npm test -- $FILES --coverage
      - store_test_results:
          path: test-results

workflows:
  test-workflow:
    jobs:
      - test
Enter fullscreen mode Exit fullscreen mode

🎯 Mejor Para: Teams que priorizan velocidad y ejecución paralela


5️⃣ Travis CI

¿Qué es? CI/CD clásico, popular en open-source

✨ Características Principales:

  • Configuración YAML simple
  • Gratis para proyectos open-source
  • Multi-lenguaje
  • Build matrix

💻 Ejemplo Real:

# .travis.yml
language: node_js

node_js:
  - '16'
  - '18'
  - '20'

services:
  - postgresql

env:
  global:
    - DATABASE_URL=postgresql://postgres@localhost/test_db
  matrix:
    - TEST_SUITE=unit
    - TEST_SUITE=integration

cache:
  directories:
    - node_modules

before_script:
  - psql -c 'create database test_db;' -U postgres

script:
  - npm run lint
  - |
    if [ "$TEST_SUITE" = "unit" ]; then
      npm run test:unit -- --coverage
    else
      npm run test:integration
    fi

after_success:
  - npm run coverage:upload

notifications:
  email:
    on_success: change
    on_failure: always
Enter fullscreen mode Exit fullscreen mode

🎯 Mejor Para: Proyectos open-source y equipos que buscan simplicidad

💡 Best Practices

1. 🔺 Pirámide de Testing

  • Más tests unitarios
  • Menos tests de integración
  • Mínimos tests E2E

2. ⚡ Optimización

  • Cachear dependencias
  • Ejecutar en paralelo
  • Fail fast cuando sea posible

3. 📈 Cobertura

  • Monitorear tendencias
  • Apuntar a 80%+ en crítico
  • No sacrificar calidad por %

4. 🔒 Seguridad

  • Usar secrets para credenciales
  • Escanear dependencias
  • Actualizar regularmente

🎬 Repositorio de Ejemplo

He creado un repositorio completo con ejemplos funcionales:

📦 Repo: github.com/your-user/ci-cd-testing-comparison

Incluye:

  • ✅ API Node.js con Express
  • ✅ Tests unitarios (Jest)
  • ✅ Tests de integración (Supertest)
  • ✅ Tests E2E (Playwright)
  • ✅ Configuraciones para todas las plataformas
  • ✅ Docker setup
  • ✅ Documentación completa

🎯 ¿Cuál Elegir?

Elige GitHub Actions si:

  • Ya usas GitHub
  • Quieres setup rápido
  • Necesitas gran ecosistema

Elige GitLab CI/CD si:

  • Quieres plataforma todo-en-uno
  • Necesitas self-hosting
  • Buscas DevOps completo

Elige Jenkins si:

  • Necesitas control total
  • Tienes infraestructura propia
  • Requieres customización extrema

Elige CircleCI si:

  • Velocidad es prioridad
  • Necesitas paralelismo avanzado
  • Quieres analytics detallados

Elige Travis CI si:

  • Proyecto open-source
  • Buscas simplicidad máxima
  • Configuración mínima

🚀 Conclusión

No existe una solución única para todos. La elección depende de tu stack, equipo, presupuesto y necesidades específicas. Todas estas herramientas son excelentes cuando se usan correctamente.

Pro tip: Empieza simple, itera y optimiza según tus necesidades reales.


📚 Recursos Adicionales


🏷️ Tags: #DevOps #CICD #Testing #Automation #GitHubActions #GitLab #Jenkins #CircleCI #TravisCI #QualityAssurance

👤 Autor: [Diego Fernando Castillo Mamani] | 📅 Fecha: Noviembre 2024

Top comments (1)

Collapse
 
joan_cristianmedinaquis profile image
JOAN CRISTIAN MEDINA QUISPE

Solo un pequeño detalle: creo que se te pasó actualizar el link del repositorio al final (dice your-user), avísanos cuando esté listo para echarle un ojo. También, sería interesante ver en el futuro una tabla comparativa de los "Free Tiers" de cada uno, ya que suele ser decisivo para proyectos personales.