
Webhook es una herramienta configurable ligera escrita en GO, que le permite crear fácilmente los puntos finales HTTP (ganchos) en su servidor, que puede usar para ejecutar comandos configurados. También puede pasar datos de la solicitud HTTP (como encabezados, variables de carga útil o consulta) a sus comandos. Webhook también le permite especificar reglas que deben ser satisfechas para que se active el gancho.
Por ejemplo, si está utilizando GitHub o Bitbucket, puede usar Webhook para configurar un gancho que ejecute un script de redploy para su proyecto en su servidor de puesta en escena, cada vez que presiona los cambios en la rama maestra de su proyecto.
Si usa materia más o holgura, puede configurar una "integración de webhook saliente" o "comando de corte" para ejecutar varios comandos en su servidor, que luego pueden informar directamente a usted o sus canales utilizando las "integraciones de webhook entrantes", o el cuerpo de respuesta apropiado.
Webhook tiene como objetivo hacer nada más de lo que debería hacer, y eso es:
Todo lo demás es responsabilidad del autor del comando.
| Scriptable Webhook Gateway para ejecutar de forma segura sus compilaciones, implementos y secuencias de proxy de forma segura en sus servidores. | Una puerta de enlace para el evento para ingerir, verificar, cola, transformar, filtrar, inspeccionar, monitorear y reproducir webhooks. |
Para comenzar, primero asegúrese de configurar correctamente su entorno GO 1.21 o más nuevo y luego ejecute
$ go build github.com/adnanh/webhookPara construir la última versión del webhook.
Si está utilizando Ubuntu Linux (17.04 o posterior), puede instalar Webhook usando sudo apt-get install webhook que instalará la versión empaquetada de la comunidad.
Si está utilizando Debian Linux ("estirarse" o posterior), puede instalar Webhook usando sudo apt-get install webhook que instalará la versión empaquetada de la comunidad (gracias @Freeekanayaka) desde https://packages.debian.org/sid/webhook
Si está utilizando FreeBSD, puede instalar Webhook usando pkg install webhook .
Los binarios previos a la construcción de diferentes arquitecturas están disponibles en los lanzamientos de GitHub.
El siguiente paso es definir algunos ganchos que desea que sirva webhook. Webhook admite archivos de configuración JSON o YAML, pero nos centraremos principalmente en JSON en el siguiente ejemplo. Comience creando un archivo vacío llamado hooks.json . Este archivo contendrá una variedad de ganchos al que servirá el webhook. Verifique la página de definición de gancho para ver la descripción detallada de qué propiedades puede contener un gancho y cómo usarlas.
Definamos un gancho simple llamado redeploy-webhook que ejecutará un script de redploy ubicado en /var/scripts/redeploy.sh . Asegúrese de que su guión de bash tenga #!/bin/sh shebang en la parte superior.
Nuestro archivo de hooks.json ahora se verá así:
[
{
"id" : " redeploy-webhook " ,
"execute-command" : " /var/scripts/redeploy.sh " ,
"command-working-directory" : " /var/webhook "
}
] Nota: Si prefiere YAML, el archivo hooks.yaml equivalente.
- id : redeploy-webhook
execute-command : " /var/scripts/redeploy.sh "
command-working-directory : " /var/webhook "Ahora puede ejecutar webhook usando
$ /path/to/webhook -hooks hooks.json -verboseSe iniciará en el puerto predeterminado 9000 y le proporcionará un punto final HTTP
http://yourserver:9000/hooks/redeploy-webhookVerifique la página de parámetros de webhook para ver cómo anular el IP, el puerto y otras configuraciones, como Hook HotReload, salida detallada, etc., al comenzar el webhook.
Al realizar una simple solicitud de Get o Post HTTP a ese punto final, su script de redploy especificado se ejecutaría. ¡Limpio!
Sin embargo, Hook definido así podría representar una amenaza de seguridad para su sistema, porque cualquiera que conozca su punto final, puede enviar una solicitud y ejecutar su comando. Para evitar eso, puede usar la propiedad de "trigger-rule" para su gancho, para especificar las circunstancias exactas bajo las cuales se activaría el gancho. Por ejemplo, puede usarlos para agregar un secreto que debe suministrar como parámetro para activar con éxito el gancho. Consulte la página de reglas de gancho para obtener una lista detallada de las reglas disponibles y su uso.
Webhook proporciona un soporte limitado el análisis de los datos de formulario multipart. Los datos de formulario multipart pueden contener dos tipos de piezas: valores y archivos. Todos los valores de formulario se agregan automáticamente al alcance de la payload . Use la configuración de parse-parameters-as-json para analizar un valor dado como JSON. Todos los archivos se ignoran a menos que coincidan con uno de los siguientes criterios:
Content-Type es application/json .parse-parameters-as-json . En cualquier caso, la parte del archivo dado se analizará como JSON y se agregará al mapa payload .
Webhook puede analizar el archivo de configuración de gancho como plantilla GO cuando se le da el parámetro CLI -template . Consulte la página Plantillas para obtener más detalles sobre el uso de plantillas.
Webhook de forma predeterminada sirve ganchos con HTTP. Si desea que Webhook sirva contenido seguro con HTTPS, puede usar el indicador -secure al comenzar Webhook. Los archivos que contienen un certificado y una clave privada coincidente para el servidor deben proporcionarse utilizando las banderas -cert /path/to/cert.pem y -key /path/to/key.pem . Si el certificado está firmado por una autoridad de certificado, el archivo CERT debe ser la concatenación del certificado del servidor seguido del certificado de CA.
La versión TLS y los indicadores de selección de suite de cifrado están disponibles desde la línea de comando. Para enumerar las suites de cifrado disponibles, use el indicador -list-cipher-suites . El indicador -tls-min-version se puede usar con -list-cipher-suites .
Webhook puede ejecutarse detrás de un "proxy inverso": otro servidor de orientación en la web, como Apache Httpd o Nginx que acepta solicitudes de los clientes y las reenvía a [Webhook] [H]. Puede hacer que Webhook escuche en un puerto TCP regular o en un socket de dominio UNIX (con el indicador -socket ), luego configure su proxy para enviar solicitudes de un nombre de host específico o subpatación sobre ese puerto o socket a Webhook.
Tenga en cuenta que cuando se ejecuta en este modo, la regla de activación de ip-whitelist no funcionará como se esperaba, ya que verificará la dirección del proxy , no el cliente . Las restricciones de IP del cliente deberán aplicarse dentro del proxy, antes de que decida reenviar la solicitud a Webhook.
Si desea establecer los encabezados CORS, puede usar el indicador -header name=value al iniciar el webhook para establecer los encabezados CORS apropiados que se devolverán con cada respuesta.
systemdEn las plataformas que usan Systemd, Webhook admite el mecanismo de activación del socket . Si Webhook detecta que se ha lanzado desde un socket administrado por SystemD, lo usará automáticamente en lugar de abrir su propio puerto de escucha. Consulte la página Systemd para obtener detalles completos.
Puede usar una de las siguientes imágenes de Docker o crear las suyas (lea esta discusión):
Visite la página de ejemplos de gancho para ver ejemplos más complejos de ganchos.
Consulte el repositorio de Webhook-Contrib para ver una colección de herramientas y ayudantes relacionados con Webhook que ha sido aportado por la comunidad de Webhook.
Vea los problemas existentes para ver si alguien más también tenía el mismo problema o abrir uno nuevo.
DigitalOcean es una plataforma de computación en la nube simple y robusta, diseñada para desarrolladores.
Browserstack es una herramienta de prueba de navegador cruzado basada en la nube que permite a los desarrolladores probar sus sitios web en varios navegadores en diferentes sistemas operativos y dispositivos móviles, sin exigir a los usuarios que instalen máquinas virtuales, dispositivos o emuladores.
Apoye este proyecto al convertirse en patrocinador. Su logotipo aparecerá aquí con un enlace a su sitio web.
Este proyecto existe gracias a todas las personas que contribuyen. ¡Contribuir!.
¡Gracias a todos nuestros patrocinadores!
La licencia del MIT (MIT)
Copyright (c) 2015 Adnan Hajdarevic [email protected]
El permiso se otorga, de forma gratuita, a cualquier persona que obtenga una copia de este software y archivos de documentación asociados (el "software"), para tratar en el software sin restricción, incluidos los derechos de los derechos de usar, copiar, modificar, fusionar, publicar, distribuir, sublicense y/o vender copias del software, y para permitir que las personas a quienes se les proporciona el software para hacer, sujeto a las siguientes condiciones: las siguientes condiciones: las siguientes condiciones: las siguientes condiciones:
El aviso de derechos de autor anterior y este aviso de permiso se incluirán en todas las copias o porciones sustanciales del software.
El software se proporciona "tal cual", sin garantía de ningún tipo, expresa o implícita, incluidas, entre otros, las garantías de comerciabilidad, idoneidad para un propósito particular y no infracción. En ningún caso los autores o titulares de derechos de autor serán responsables de cualquier reclamo, daños u otra responsabilidad, ya sea en una acción de contrato, agravio o de otra manera, que surge, de o en relación con el software o el uso u otros tratos en el software.