Los runners de CI autoalojados tienen una propiedad incómoda: lo recuerdan todo. Cachés, tokens, una clave de despliegue que alguien añadió «temporalmente» la primavera pasada. Para tus propias ramas no pasa nada. El problema empieza cuando llega un pull request de alguien de quien nunca has oído hablar, o de tu propio agente de IA, que escribió un parche que nadie ha leído todavía.
La respuesta limpia es una máquina por ejecución. Clonar, instalar, probar, tirar la máquina.
Cómo es una ejecución
Una sandbox es una microVM Firecracker que arranca en un segundo aproximadamente con Python 3.12, Node.js 22, git y curl. La salida a internet funciona, así que git clone y pip install -r requirements.txt se comportan como siempre. No hay puertos de entrada: nada puede llamar al entorno de pruebas mientras se ejecuta.
Desde un trabajo de CI, todo cabe en un script corto. Aquí está con el SDK de Python, invocable desde cualquier trabajo de CI:
import os, sys
from eqvps import Sandbox
repo, ref = os.environ["REPO_URL"], os.environ["PR_SHA"]
with Sandbox.create(tariff="standard", ttl=1800) as sb:
sb.exec(f"git clone {repo} /root/app && cd /root/app && git checkout {ref}", timeout=55)
sb.exec("cd /root/app && pip install -r requirements.txt", timeout=55)
task = sb.exec("cd /root/app && python3 -m pytest -q", background=True)
result = task.wait(on_output=lambda out, err: print(out, end=""))
sys.exit(result.exit_code or 0)
El token vive en los secretos de tu CI como EQVPS_API_KEY. Nada más de tu CI —ni claves de despliegue ni credenciales de la nube— entra en la sandbox. Cuando termina el bloque with, la sandbox se borra, también si el trabajo falló a mitad de camino.
La ejecución de los tests es una tarea en segundo plano, porque un solo comando síncrono se detiene a los 55 segundos. Una tarea en segundo plano emite su salida mientras trabaja y puede seguir hasta el TTL de la sandbox, fijado aquí en 30 minutos para que un test colgado no dispare la factura.
Los límites con los que de verdad te toparás
Hablar claro de ellos te ahorra una tarde.
Concurrencia. Una cuenta puede tener 20 sandboxes, pero solo 2 comandos se ejecutan a la vez. Para CI son dos trabajos realmente en paralelo. Diez PR que llegan juntos harán cola. Si tu pipeline reparte los tests entre 16 workers, esta no es la herramienta para el pipeline principal: déjalo en tus propios runners en un VPS y usa las sandboxes para el carril no fiable.
Sin contenedores dentro. Docker no viene en la sandbox. Los tests unitarios y de integración que necesitan un contenedor de Postgres no funcionarán tal cual; los que usan SQLite o un sustituto en memoria, sí.
Archivos. Las subidas y descargas por la API llegan hasta 5 MB por archivo. Trae el código con git dentro de la sandbox en lugar de subir un archivo comprimido.
Cuánto cuesta
Pagas los vCPU y la RAM de la tarifa por segundo, mínimo 60 segundos, desde un saldo prepago, sin suscripción.
| Ejecución | Tarifa | Coste aprox. |
|---|---|---|
| Linter + tests unitarios, 1 min | small (0.5 vCPU, 1 GB) | $0.0006 |
| Suite completa, 3 min | standard (1 vCPU, 2 GB) | $0.0033 |
| Build + tests, 10 min | plus (2 vCPU, 4 GB) | $0.022 |
Con estos precios la pregunta interesante no es el coste, sino si tus tests terminan dentro del tiempo que has fijado. Deja al TTL algo de margen sobre tu ejecución verde más lenta.
Un reparto sensato
Nuestra recomendación: mantén las ramas de confianza en tu runner rápido con caché. Pasa primero por una sandbox todo lo que no escribiste tú: forks, colaboradores externos, parches generados por agentes. Si la ejecución en la sandbox sale verde y una persona ha revisado el diff, promuévelo al pipeline de confianza.
Así tienes un carril donde importan la velocidad y la caché, y otro donde importa una máquina limpia, sin obligar a una sola herramienta a ser las dos cosas.
Empieza por la presentación de las sandboxes y la guía de conexión: las cuentas nuevas reciben $1 de tiempo de sandbox, suficiente para unos cientos de ejecuciones cortas. Todos los métodos usados arriba están en la referencia del SDK, y las reglas exactas de facturación en límites y facturación de las sandboxes.
Relacionado: sandbox para revisión de código y comprobaciones de PR y sandbox para agentes de IA.
Comentarios
Aún no hay comentarios. Sé el primero.