Guía9 min

CI/CD para agentes IA: GitHub Actions, Vercel, Railway y Docker

Resumen

Cómo poner un pipeline de deploy automático para un agente de IA: cuándo basta el autodeploy nativo de Vercel o Railway, cuándo necesitas GitHub Actions, cómo proteger Production con Environments, y un workflow mínimo que corre tests antes de desplegar.

GitHubVercelRailway
Pipeline de integración continua con tres etapas conectadas hacia un servidor de producción

Qué resuelve

Esta pieza se queda en la decisión práctica: qué instalar, qué riesgo agrega y cómo aplicarlo sin romper operación.

El agente ya está en producción. Cada commit a main ahora puede romperlo — o puede desplegarse solo si el pipeline está bien armado. La mayoría de builders no necesita un CI/CD elaborado: Vercel y Railway ya despliegan al push. El valor de GitHub Actions aparece cuando quieres tests, evals o un gate humano antes de Production. Esta guía te dice cuándo cada opción alcanza y te deja un workflow mínimo que no se rompe. Las fuentes oficiales fueron consultadas el 3 de septiembre de 2026.

Si aún no tienes plataforma de destino, empieza por la comparativa Vercel vs Workers vs VPS o Railway. Esta pieza cubre el cómo del pipeline, no la elección de host.

La regla de decisión

SituaciónPipeline que alcanzaPor qué
Agente en Vercel, sin testsAutodeploy nativo de VercelCada push a la rama conectada genera un Preview; main va a Production
Agente en Railway, sin testsAutodeploy nativo de RailwayUn servicio ligado a un repo de GitHub despliega al push de la rama configurada; se puede desactivar y disparar a mano
Agente en Vercel/Railway con tests o evalsGitHub Actions + autodeploy condicionadoEl test corre primero; el deploy nativo se desactiva o se dispara con un hook
Agente self-hosted en VPSGitHub Actions + SSH o docker compose remotoNo hay autodeploy nativo; tú eres el orquestador
Production crítica (dinero, clientes)GitHub Environments + aprobaciónUn revisor aprueba el job de Production antes de que corra

La mayoría de agentes de un builder individual viven en las dos primeras filas. Añadir Actions "porque sí" es complejidad sin ganancia.

Autodeploy nativo: lo que ya tienes

Vercel. El Git integration despliega Preview en cada PR y Production en la rama de producción. Un Deploy Hook es una URL POST que dispara un deploy sin commit — útil cuando tu agente genera un artefacto (eval report, índice RAG) y quieres redeployar el frontend.

Railway. Un servicio ligado a un repo despliega automáticamente al push de la rama conectada. Se desactiva con un clic en Service Settings; para disparar a mano, Command Palette → Deploy Latest Commit. Requisito: el proyecto tiene los permisos de GitHub necesarios.

Si tu flujo es "push a main = producción" y no hay tests, para aquí. El resto de la guía es para cuando eso ya no alcanza.

GitHub Actions: el workflow mínimo que sí vale

Flujo de un pipeline CI/CD para un agente IA con tests antes de producción

Cuando el agente tiene tests (unitarios, evals, un pnpm test que no es teatro), el pipeline mínimo es:

name: ci
on:
  push:
    branches: [main]
  pull_request:

jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: pnpm/action-setup@v4
      - uses: actions/setup-node@v4
        with:
          node-version: 22
          cache: pnpm
      - run: pnpm install --frozen-lockfile
      - run: pnpm test
      - run: pnpm build

El snippet usa @v4 para caber en una pantalla. En el workflow de prod, GitHub pide anclar actions al SHA completo de 40 caracteres: es la única forma que documentan como release inmutable. Un tag @v4 se puede mover. La guía de pin Docker cubre el mismo criterio para FROM y para uses:.

Nada más. Sin deploy. El autodeploy nativo de Vercel/Railway sigue siendo quien publica, y este job es el gate: si el test falla, el PR no se mergea, y Production no se toca. Para secretos del job (API keys de evals), usa secrets.NOMBREla guía de secretos cubre el resto.

Environments: el gate humano

Gate de aprobación humana antes de desplegar un agente a producción

GitHub Environments te deja proteger un job con revisores obligatorios. El patrón:

  deploy-prod:
    needs: test
    if: github.ref == 'refs/heads/main'
    environment: production
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: pnpm/action-setup@v4
      - run: pnpm dlx vercel deploy --prod --token=${{ secrets.VERCEL_TOKEN }}

El job espera a que alguien apruebe en la pestaña Environments antes de correr. Úsalo cuando un deploy malo cuesta dinero o clientes; no lo uses para un agente interno de un solo usuario — es fricción.

VPS: el caso que sí necesita Actions

En self-hosting con Docker no hay autodeploy. El workflow que sí vale:

  deploy-vps:
    needs: test
    if: github.ref == 'refs/heads/main'
    runs-on: ubuntu-latest
    steps:
      - uses: appleboy/ssh-action@v1
        with:
          host: ${{ secrets.VPS_HOST }}
          username: deploy
          key: ${{ secrets.VPS_SSH_KEY }}
          script: |
            cd /opt/mi-agente
            git pull
            docker compose up -d --build
            docker image prune -f

La llave SSH vive en GitHub Secrets, no en el repo. El usuario deploy en el VPS tiene acceso solo a /opt/mi-agente, no a root.

Errores comunes

SíntomaCausa típicaFix
Production se actualiza aunque el test falleAutodeploy nativo no espera a ActionsDesactiva autodeploy y dispara el deploy desde el job, o usa Environments
Secrets del agente aparecen en logs de Actionsecho $API_KEY o un SDK verbosoGitHub enmascara secrets.*; no imprimas el entorno
Deploy Hook de Vercel se dispara dos vecesAutodeploy + hook al mismo commitElige uno: o Git integration o hook, no ambos
Railway redeploya PRs a ProductionLa rama trigger apunta a * o a una rama equivocadaFija la rama en Service Settings
VPS deploy falla por permisosUsuario SSH es root o no tiene DockerUsuario deploy en el grupo docker, directorio propio

Checklist

  • Autodeploy nativo activo o Actions dispara el deploy, nunca los dos
  • Tests corren en cada PR
  • Production protegida con Environment si el agente atiende clientes
  • Secretos del pipeline en GitHub Secrets, no en el YAML
  • Rollback conocido: Vercel/Railway redeployan un deployment previo; en VPS es git checkout + compose up

Siguiente paso: combina este pipeline con sandboxing si el agente ejecuta código, y con secretos para las credenciales del job. El pipeline no reemplaza ninguna de las dos capas. Si aún no tienes el agente local, el curso gratuito es el punto de partida antes de cablear Actions.