−25%

en Windows con pago anual, hasta el 31/10. Ver planes

EQVPS
Empezar

Sandbox para CI: ejecuciones de tests aisladas por menos de un céntimo cada una

Ejecuta los tests de código en el que no confías —un pull request de un desconocido, un parche generado— en una microVM nueva que se borra tras la ejecución. Facturación por segundo, SDK para Python y TS, y claridad sobre los límites de concurrencia.

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ónTarifaCoste aprox.
Linter + tests unitarios, 1 minsmall (0.5 vCPU, 1 GB)$0.0006
Suite completa, 3 minstandard (1 vCPU, 2 GB)$0.0033
Build + tests, 10 minplus (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.

¿Listo para desplegar? Paga en cripto, sin KYC — en línea en aproximadamente un minuto.

Desplegar →

Preguntas frecuentes

¿Por qué no ejecutar pull requests no fiables en mi runner autoalojado?

Un runner autoalojado conserva estado entre trabajos y suele guardar claves de despliegue o credenciales de la nube. Un pull request de alguien a quien no conoces puede leerlas en un solo paso. Una sandbox arranca limpia cada vez y no contiene nada más que el código bajo prueba.

¿Puede un test durar más de 55 segundos?

Sí. El límite de 55 segundos es por comando síncrono. Lanza la suite de tests como tarea en segundo plano, consulta su salida y podrá ejecutarse hasta que termine la vida de la sandbox: hasta 24 horas en una sandbox efímera.

¿Cuántas ejecuciones pueden ir en paralelo?

Hasta 20 sandboxes por cuenta, pero solo 2 comandos ejecutándose a la vez por cuenta. Para CI eso significa dos trabajos realmente simultáneos; el resto espera en cola. Si necesitas un sharding paralelo amplio, encaja mejor una flota de runners en VPS.

¿Hay Docker dentro de la sandbox?

La sandbox trae Python 3.12, Node.js 22, bash, git y curl, y las dependencias se instalan con pip o npm. Docker no forma parte de ella: si tus tests arrancan contenedores, ejecútalos en un runner en un VPS.

¿Cuánto cuesta una ejecución?

Por segundo, mínimo 60 segundos, por los vCPU y la RAM de la tarifa. Una ejecución de tres minutos en la tarifa standard (1 vCPU, 2 GB) cuesta unos $0.0033.

Comentarios

Aún no hay comentarios. Sé el primero.

Deja un comentario

Los comentarios se moderan antes de aparecer.