Webhooks de despliegue
Ejecuta el plan de pruebas de un proyecto cuando tu propio CI, Railway o Coolify termina un despliegue.
Un webhook de despliegue es una URL que inicia ejecuciones. Cualquier herramienta capaz de enviar una petición HTTP cuando termina un despliegue puede llamarla: tu propio CI, Railway o Coolify. Cada webhook de despliegue pertenece a un proyecto y ejecuta uno de sus planes de pruebas en uno de sus entornos, contra la URL desplegada cuando el despliegue la envía.
Úsalo para hostings que no tienen una integración propia con Autonomy. Para Vercel, Netlify y Expo EAS, usa sus integraciones.
Crear un webhook de despliegue
Solo propietarios y administradores.
- Abre Organization → Integrations → Deploy webhooks.
- En New deploy webhook, rellena:
- Name: por ejemplo "Railway · Staging".
- Project: el proyecto cuyas pruebas se ejecutan.
- Environment: las ejecuciones usan sus valores e inicios de sesión, y su URL cuando el despliegue no envía ninguna (Railway no la envía).
- Test plan: lo que se ejecuta en cada despliegue. Con None, los despliegues se registran pero no se ejecuta nada.
- Pulsa Create deploy webhook.
- Copia la URL y el Secret en ese momento. "Copy these now — the secret isn't shown again."
Cada webhook de despliegue tiene su propia URL y su propio secreto. Guárdalos en el almacén de secretos de tu herramienta, nunca en un repositorio.
Para cambiar el secreto, pulsa Replace secret: Autonomy muestra uno nuevo una sola vez, y el anterior deja de funcionar al instante. Para detener un webhook de despliegue, pulsa Remove.
Autenticar la petición
Autonomy acepta tres formas de demostrar que una petición viene de ti. Si una petición lleva más de una, todas deben coincidir. Un secreto incorrecto, o una URL que no corresponde a ningún webhook de despliegue, recibe 401 Unauthorized.
| Emisor | Cómo enviar el secreto |
|---|---|
| Tu propio CI | Firma el cuerpo bruto de la petición con HMAC-SHA256, usando el secreto como clave, y envía X-Autonomy-Signature: sha256=<hex digest>. |
| Railway | Añade la cabecera Authorization: Bearer <secret>. |
| Coolify | Coolify no puede enviar cabeceras: usa la URL con ?token=<secret> añadido. |
Firmar es la opción más segura. Un secreto en la URL puede acabar en los logs, así que usa ?token= solo con herramientas que no puedan enviar cabeceras.
Tu propio CI
Envía un cuerpo JSON cuando termine un despliegue:
| Campo | Obligatorio | Significado |
|---|---|---|
id | Sí | El ID de tu despliegue. Cada despliegue y estado se ejecuta una sola vez. |
status | Sí | ready (o success, succeeded) inicia las ejecuciones. building, failed, error, canceled y cancelled solo se registran. |
url | No | La URL desplegada. Las ejecuciones la prueban en lugar de la URL web del entorno. Debe ser una dirección HTTPS pública. |
branch | No | La rama que se desplegó. |
commit | No | El SHA del commit. |
pullRequest | No | El número de la pull request. |
context | No | preview, production o branch. |
body=$(jq -nc \
--arg id "$DEPLOY_ID" \
--arg url "$PREVIEW_URL" \
--arg branch "$BRANCH" \
--arg commit "$COMMIT_SHA" \
'{id: $id, status: "ready", url: $url, branch: $branch, commit: $commit, context: "preview"}')
signature=$(printf '%s' "$body" \
| openssl dgst -sha256 -hmac "$AUTONOMY_DEPLOY_WEBHOOK_SECRET" \
| sed 's/^.* //')
curl -fsS -X POST "$AUTONOMY_DEPLOY_WEBHOOK_URL" \
-H "Content-Type: application/json" \
-H "X-Autonomy-Signature: sha256=$signature" \
--data "$body"Firma exactamente los bytes que envías. Si vuelves a codificar el JSON después de firmarlo, el cuerpo cambia y la firma deja de coincidir.
Railway
- En tu proyecto de Railway, añade un webhook y pega la URL del webhook de despliegue.
- Añade la cabecera
Authorization: Bearer <secret>.
Railway envía eventos de despliegue. Un despliegue correcto inicia las ejecuciones; los despliegues fallidos, caídos o eliminados solo se registran. Railway no envía la URL desplegada, así que las ejecuciones prueban el entorno del webhook de despliegue. Todos los entornos de Railway que envían a esa URL se ejecutan contra ese único entorno, así que envía solo los despliegues del entorno de Railway que le corresponde.
Coolify
En los ajustes de notificaciones por webhook de Coolify, pega la URL del webhook de despliegue con ?token=<secret> al final.
Un evento deployment_success inicia las ejecuciones contra la dirección desplegada, o contra la dirección de previsualización en un despliegue de pull request. deployment_failed solo se registra, y el resto de eventos de Coolify se ignoran.
Qué pasa en cada despliegue
- Un despliegue listo inicia el plan de pruebas en el entorno, contra la URL desplegada cuando el despliegue la envió.
- Cada despliegue se ejecuta una sola vez. Una petición repetida para el mismo despliegue y estado no inicia una segunda ejecución.
- No se ejecuta nada si el proyecto o el entorno están archivados, o si el plan de pruebas está archivado o ya no pertenece al proyecto.
- Las ejecuciones aparecen en la página Runs del proyecto como cualquier otra ejecución y envían las notificaciones que hayas configurado.
Un webhook de despliegue no publica un check de GitHub. Para tener un check en cada pull request, consulta Pruebas de pull requests.
Solución de problemas
La petición recibe 401
El secreto no coincide o la URL es incorrecta. Comprueba que copiaste la URL entera, que la firma se calcula sobre exactamente el cuerpo que envías y que el secreto no se ha sustituido desde entonces. Si tienes dudas, pulsa Replace secret y actualiza tu herramienta.
La petición se acepta pero no se inicia ninguna ejecución
Comprueba que el webhook de despliegue tiene un Test plan, que status indica que el despliegue está listo y que ni el proyecto, ni el entorno ni el plan de pruebas están archivados. La fila del webhook de despliegue muestra cuándo recibió el último despliegue.
Las ejecuciones probaron la dirección equivocada
Sin un url, las ejecuciones usan la URL web del entorno. Envía url en el cuerpo, o apunta el entorno a la dirección correcta.
¿No lo encontraste?