Entornos de vista previa
Despliegue cada pull request de una aplicación Git en su propia dirección temporal, construida desde la rama de la pull request y eliminada cuando esta se cierra o se fusiona.
Cómo funcionan las vistas previas
Cuando su proveedor Git informa de que una pull request se abrió, se reabrió o recibió nuevos commits, sh0 clona la rama de la pull request, la construye como la aplicación, inicia un contenedor aparte y le asigna una dirección propia. Producción no se toca. Cuando la pull request se cierra o se fusiona, sh0 detiene el contenedor, retira la ruta y borra el registro.
sh0 no escribe nada en la pull request: ni comentarios ni comprobaciones de estado. La dirección de la vista previa aparece en la pestaña Previsualizaciones de la aplicación y con sh0 preview my-api list.
Requisitos
- Una aplicación desplegada desde un repositorio Git alojado en GitHub, GitLab o Bitbucket. Activarlas en una aplicación desplegada desde un archivo o una imagen se rechaza: ningún pull request puede llegar a ella.
- El webhook de la aplicación configurado en el proveedor (consulte Despliegue Git), con los eventos de pull request añadidos: «Pull requests» en GitHub, «Merge request events» en GitLab, eventos de pull request en Bitbucket.
- Las vistas previas activadas en la aplicación. sh0 también acepta activarlas en una aplicación que no es Git, pero nada creará nunca una vista previa en ella.
Activar las vistas previas
En el panel, abra la pestaña Previsualizaciones de la aplicación, haga clic en Habilitar entornos de vista previa y ajuste el TTL (horas) (168 horas, siete días, por defecto). Desde la CLI:
$ sh0 preview my-api enable --ttl 48
Preview environments enabled for app my-api.
TTL: 48 hours (2 days)
$ sh0 preview my-api list
No preview environments found.
$ sh0 preview my-api disable
Preview environments disabled for app my-api.Desactivarlas impide crear nuevas vistas previas. Las existentes se mantienen hasta que caducan o se eliminan, salvo que cerrar o fusionar su pull request las sigue destruyendo.
Direcciones de las vistas previas
La dirección es una única etiqueta DNS formada por el número de la pull request y el nombre de la aplicación, unidos por guiones: pr-<número>-<app>, seguida del dominio base del servidor. La pull request 12 de la aplicación my-api, en un servidor cuyo dominio base es example.com, obtiene pr-12-my-api.example.com.
En un servidor que usa el servicio de direcciones sh0.app, se añade el identificador del servidor con un guion más, dentro de la misma etiqueta, para que la dirección siga cubierta por el certificado comodín. Si el nombre ya está ocupado, sh0 añade un sufijo de cuatro caracteres; los nombres largos se acortan para respetar el límite de 63 caracteres de una etiqueta DNS. Una vista previa conserva su dirección entre commits.
Lo que una vista previa comparte con producción
Desde 1.10.3: Una vista previa ejecuta el código de un pull request que nadie ha revisado todavía, por lo que no recibe sus variables de producción. Solo recibe las variables que declare para las vistas previas, con el nombre PREVIEW_<NOMBRE> en la aplicación o el proyecto: el contenedor las ve sin el prefijo. PREVIEW_DATABASE_URL se convierte en DATABASE_URL en la vista previa, y la DATABASE_URL de producción nunca le llega.
PREVIEW_ se sigue entregando al código de cualquier pull request. Apúntela a una base de datos de pruebas y a claves de prueba, nunca a producción, y active las vistas previas solo en repositorios donde todas las personas que pueden abrir un pull request sean de confianza. Desde la 1.10.3, una vista previa también se ejecuta en su propia red: no alcanza sus aplicaciones de producción ni sus servidores de bases de datos, ni por dirección ni por nombre.internal. Dele una base de datos a la que llegue por una dirección pública.Los hooks de despliegue no se ejecutan en las vistas previas.
Duración y limpieza
- Pull request cerrada o fusionada: la vista previa se destruye de inmediato.
- TTL alcanzado: cada 5 minutos, sh0 destruye las vistas previas en ejecución cuya duración ha caducado. Se cuenta desde la creación de la vista previa y no se amplía con nuevos commits; cambiar el TTL solo afecta a las vistas previas creadas después.
- Vista previa fallida: el TTL no la limpia; elimínela desde la pestaña Previsualizaciones o con
sh0 preview my-api delete <id>. - Una aplicación puede tener como máximo 50 vistas previas; por encima de eso, una nueva pull request no obtiene vista previa hasta que se elimine alguna.