🎨 Sysprovider Code
Sysprovider LogoWiki
🇪🇸Hosting español para ecommerce

Despliegue Automatizado con CI/CD y GitHub Actions para WordPress

Actualizado el 13 de marzo de 2026

Introducción: El salto de calidad con CI/CD en WordPress

Mantener un sitio WordPress actualizado, seguro y con nuevas funcionalidades solía ser sinónimo de procesos manuales, FTP y riesgo de errores humanos. Hoy, el despliegue automatizado con CI/CD WordPress ha transformado esta realidad. Implementar un pipeline de integración continua y despliegue continuo no solo acelera las entregas, sino que garantiza consistencia y trazabilidad. En este artículo, exploraremos cómo construir un flujo de trabajo robusto utilizando GitHub Actions, una herramienta nativa del ecosistema Git que permite orquestar pruebas, compilaciones y despliegues directamente desde el repositorio.


¿Por qué necesitas CI/CD para WordPress?

Antes de sumergirnos en la implementación, entendamos los beneficios concretos:

  • Eliminación del error humano: Cada despliegue sigue el mismo script, sin olvidos ni pasos saltados.
  • Velocidad y frecuencia: Puedes lanzar actualizaciones varias veces al día sin estrés.
  • Rollback inmediato: Al versionar el código, revertir un cambio problemático es cuestión de un git revert.
  • Pruebas automatizadas: Los plugins, temas y configuraciones se validan antes de tocar producción.
  • Colaboración eficiente: Varios desarrolladores trabajan en ramas y el pipeline unifica los cambios.

[INFO] Este enfoque es especialmente crítico en entornos headless o con plugins complejos (WooCommerce, LMS) donde un error puede costar ventas o datos.


Componentes de un pipeline CI/CD para WordPress

Un pipeline típico consta de varias etapas. En nuestro caso con GitHub Actions, cada etapa es un job dentro de un workflow YAML.

1. Repositorio y ramas

La estructura base suele incluir:

  • main o master: Código de producción.
  • develop: Integración de características.
  • Ramas de características (feature/*): Desarrollo aislado.

2. Archivos esenciales

  • wp-content/themes/mi-tema/: Tema personalizado.
  • wp-content/plugins/mi-plugin/: Plugin propio.
  • composer.json y package.json: Gestión de dependencias.
  • .github/workflows/deploy.yml: El corazón de la automatización.

3. Herramientas de integración

  • Node.js para tareas de frontend (compilar SCSS, minificar JS).
  • PHP y Composer para dependencias de backend.
  • WP-CLI para operaciones específicas de WordPress.

Construyendo el workflow con GitHub Actions

GitHub Actions se define en archivos YAML dentro de .github/workflows/. Vamos a crear uno llamado deploy-wordpress.yml que realice las siguientes tareas:

1. Disparadores (triggers)

Queremos que el pipeline se ejecute automáticamente al hacer push a main o develop, y opcionalmente en pull requests.

name: CI/CD WordPress Pipeline

on:
  push:
    branches:
      - main
      - develop
  pull_request:
    branches:
      - develop

2. Jobs de integración continua (CI)

Primero, validamos que el código no tenga errores. Incluimos linting de PHP, compilación de assets y pruebas unitarias con PHPUnit.

jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      - name: Setup PHP
        uses: shivammathur/setup-php@v2
        with:
          php-version: '8.2'
          tools: composer, wp-cli

      - name: Install dependencies
        run: composer install --no-interaction --prefer-dist

      - name: Lint PHP files
        run: vendor/bin/phpcs --standard=WordPress src/

      - name: Run PHPUnit
        run: vendor/bin/phpunit

3. Compilación de assets frontend

Si tu tema usa Sass o Webpack, este paso es obligatorio.

      - name: Setup Node.js
        uses: actions/setup-node@v4
        with:
          node-version: '20'

      - name: Install npm dependencies
        run: npm ci

      - name: Build assets
        run: npm run build

4. Despliegue continuo (CD)

Aquí viene la parte más delicada: transferir los archivos al servidor de producción. Podemos usar rsync sobre SSH, SFTP o servicios como Deployer.

[WARNING] Nunca almacenes contraseñas o claves SSH en el repositorio. Usa GitHub Secrets para variables sensibles.

  deploy:
    needs: test
    if: github.ref == 'refs/heads/main'
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      - name: Install SSH key
        uses: shimataro/ssh-key-action@v2
        with:
          key: ${{ secrets.SSH_PRIVATE_KEY }}
          known_hosts: ${{ secrets.KNOWN_HOSTS }}

      - name: Deploy via rsync
        run: |
          rsync -avz --delete --exclude='.git/' --exclude='node_modules/' \
            ./ ${{ secrets.SSH_USER }}@${{ secrets.SSH_HOST }}:/var/www/html/wp-content/themes/mi-tema/

Estrategias avanzadas para entornos WordPress complejos

Gestión de base de datos

WordPress almacena contenido en la base de datos, por lo que no debes reemplazar wp-config.php ni sobrescribir la BD en cada despliegue. En su lugar:

  • Utiliza variables de entorno para diferenciar entornos.
  • Implementa migraciones de base de datos con plugins como WP Migrate DB o scripts personalizados.

Manejo de archivos subidos (uploads)

Los directorios wp-content/uploads/ deben excluirse del rsync, ya que contienen imágenes y medios subidos por los usuarios. En su lugar, sincroniza estos archivos con un CDN o un bucket S3.

# Ejemplo de exclusión en rsync
rsync -avz --delete --exclude='.git/' --exclude='node_modules/' \
  --exclude='wp-content/uploads/' \
  ./ usuario@servidor:/ruta/wordpress/

Despliegue en múltiples entornos

Puedes crear jobs separados para staging y producción usando condicionales:

deploy-staging:
  if: github.ref == 'refs/heads/develop'
  runs-on: ubuntu-latest
  # ... configuración específica para staging

deploy-production:
  if: github.ref == 'refs/heads/main'
  runs-on: ubuntu-latest
  # ... configuración para producción

Buenas prácticas y seguridad

1. Secrets en GitHub Actions

Ve a Settings > Secrets and variables > Actions y agrega:

  • SSH_PRIVATE_KEY: Clave privada SSH del servidor.
  • KNOWN_HOSTS: Fingerprint del servidor (obtenido con ssh-keyscan).
  • SSH_USER y SSH_HOST: Credenciales de conexión.

2. Versionado de plugins y temas

Utiliza Composer para gestionar plugins de terceros y mantener un composer.lock que garantice versiones exactas.

3. Pruebas de integración con WP-CLI

Agrega un paso que verifique que el sitio responde después del despliegue:

- name: Health check
  run: |
    curl -sSf http://midominio.com/wp-admin/admin-ajax.php?action=health-check-site-status

4. Notificaciones

Configura notificaciones en Slack o correo electrónico para informar del éxito o fallo del pipeline.

- name: Notify Slack
  if: always()
  uses: slackapi/slack-github-action@v1.24.0
  with:
    payload: |
      {
        "text": "Pipeline ${{ job.status }} en ${{ github.repository }}"
      }
  env:
    SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK }}

Errores comunes y cómo evitarlos

ErrorCausaSolución
Permission denied (publickey)Clave SSH incorrecta o no cargadaVerifica secrets y formato de clave
rsync: connection unexpectedly closedFirewall bloqueando puerto 22Usa puertos alternativos o VPN
The authenticity of host can't be establishedknown_hosts no configuradoGenera con ssh-keyscan -H servidor
PHP Fatal error: Uncaught Error: Class not foundDependencias no instaladas en producciónEjecuta composer install en el servidor o despliega vendor/

[TIP] Siempre prueba el pipeline en un entorno de staging antes de aplicarlo a producción. Un fallo en producción puede dejar el sitio caído.


Conclusión: DevOps WordPress ya no es opcional

Implementar CI/CD WordPress con GitHub Actions no solo moderniza tu flujo de trabajo, sino que eleva la calidad del producto final. La integración continua atrapa errores temprano, el despliegue automatizado elimina la fricción y la trazabilidad te da control total. Si aún usas FTP o paneles de control manuales, este es el momento de migrar a un pipeline profesional.

El camino comienza con un simple archivo YAML y una clave SSH. A partir de ahí, las posibilidades son infinitas: despliegues canarios, rollbacks automáticos, integración con CDNs y mucho más. La DevOps WordPress no es una moda, es la nueva línea base para cualquier sitio que aspire a ser escalable y confiable.


¿Ya tienes tu primer workflow funcionando? Comparte tu experiencia o dudas en los comentarios. La automatización es un viaje, no un destino.

¿Necesitas ayuda?Son dos de nuestros técnicos, Agustín y Mikel, y están disponibles para resolver cualquier problema.

Hablar con ellos ahora
Agustín y Mikel