
Webhook是用GO编写的轻巧配置工具,它使您可以轻松地在服务器上创建HTTP端点(钩),您可以使用它来执行已配置的命令。您还可以将数据从HTTP请求(例如标题,有效负载或查询变量)传递给您的命令。 Webhook还允许您指定必须满足的规则才能触发钩子。
例如,如果您使用的是github或bitbucket,则可以使用Webhook设置一个挂钩,该挂钩在登台服务器上为您的项目运行重新部脚本时,只要您推动项目的主分支更改。
如果您使用最重要的或Slack,则可以设置“传出的Webhook Integration”或“ slash命令”在服务器上运行各种命令,然后可以使用“输入的Webhook集成”或适当的响应主体直接向您或您的频道报告。
Webhook的目的是做什么,而不是应该做的,也就是说:
其他一切都是命令作者的责任。
| 脚本可在服务器上安全运行自定义构建,部署和代理脚本的脚本可安全的网关。 | 可靠地摄入,验证,队列,变换,过滤,检查,监视和重播Webhooks的事件网关。 |
要开始
$ go build github.com/adnanh/webhook构建最新版本的Webhook。
如果您使用的是Ubuntu Linux(17.04或更高版本),则可以使用sudo apt-get install webhook该Webhook将安装社区打包版本。
如果您使用的是Debian Linux(“ strenth”或更高版本),则可以使用sudo apt-get install webhook安装Webhook安装Webhook,该Webhook将从https://packages.debian.org/sid/webhook/webhook中安装社区打包版本(感谢@freeekanayaka)
如果您使用的是FreeBSD,则可以使用pkg install webhook 。
GitHub版本可在GitHub版本中获得用于不同体系结构的预建二维。
下一步是定义您希望Webhook使用的一些钩子。 Webhook支持JSON或YAML配置文件,但我们将主要关注以下示例中的JSON。首先创建一个名为hooks.json的空文件。该文件将包含Webhook将使用的一系列挂钩。检查挂钩定义页面以查看钩子可以包含的属性以及如何使用它们的详细说明。
让我们定义一个名为redeploy-webhook的简单钩子,它将在/var/scripts/redeploy.sh中运行一个重部脚本。确保您的bash脚本在顶部具有#!/bin/sh shebang。
我们的hooks.json文件现在看起来像这样:
[
{
"id" : " redeploy-webhook " ,
"execute-command" : " /var/scripts/redeploy.sh " ,
"command-working-directory" : " /var/webhook "
}
]注意:如果您喜欢yaml,则等效hooks.yaml文件将是:
- id : redeploy-webhook
execute-command : " /var/scripts/redeploy.sh "
command-working-directory : " /var/webhook "您现在可以使用Webhook使用
$ /path/to/webhook -hooks hooks.json -verbose它将在默认端口9000上启动,并为您提供一个HTTP端点
http://yourserver:9000/hooks/redeploy-webhook检查Webhook参数页面,以查看如何在启动Webhook时覆盖IP,端口和其他设置,例如Hook Hotrelod,冗长输出等。
通过执行简单的HTTP获取或发布到该端点的请求,将执行您指定的重新部脚本。整洁的!
但是,挂钩定义可能会对您的系统构成安全威胁,因为任何了解您的端点的人都可以发送请求并执行您的命令。为了防止这种情况,您可以将"trigger-rule"属性用于钩子,以指定触发钩子的确切情况。例如,您可以使用它们添加一个秘密,必须作为参数提供,以成功触发钩子。请查看“挂钩规则”页面,以获取可用规则及其使用的详细列表。
Webhook提供有限的支持多部分表单数据的解析。多部分形式数据可以包含两种类型的零件:值和文件。所有表单值将自动添加到payload范围中。使用parse-parameters-as-json设置来解析给定值作为JSON。除非匹配以下标准之一,否则所有文件都将被忽略:
Content-Type标头是application/json 。parse-parameters-as-json设置中命名。无论哪种情况,给定的文件零件都将被解析为JSON并添加到payload图中。
当给出-template CLI参数时,Webhook可以将挂钩配置文件解析为GO模板。有关模板使用情况的更多详细信息,请参见“模板”页面。
默认情况下,Webhook使用HTTP提供钩子。如果您希望Webhook使用HTTPS提供安全的内容,则可以在启动Webhook时使用-secure标志。必须使用-cert /path/to/cert.pem和-key /path/to/key.pem flags提供包含证书和匹配服务器的专用密钥的文件。如果证书由证书授权签署,则证书文件应为服务器证书的串联,然后是CA的证书。
TLS版本和密码套件选择标志可从命令行获得。要列出可用的密码套件,请使用-list-cipher-suites标志。 -tls-min-version标志可以与-list-cipher-suites一起使用。
Webhook可以在“反向代理”的后面运行,这是另一家面向Web的服务器,例如Apache HTTPD或NGINX,该服务器接受客户的请求并将其转发到[Webhook] [H] [H]。您可以让Webhook在常规的TCP端口或Unix域套接字(带有-socket标志)上侦听,然后配置代理以向Webhook发送该端口或套接字上的特定主机名或子路径的请求。
请注意,在此模式下运行时, ip-whitelist触发规则将无法正常工作,因为它将检查代理的地址,而不是客户端的地址。客户IP限制将需要在代理中执行,然后才能将请求转发到Webhook。
如果要设置CORS标头,则可以在启动Webhook时使用-header name=value flag,以设置每个响应中将返回的适当的CORS标头。
systemd下运行在使用SystemD的平台上,Webhook支持套接字激活机制。如果Webhook检测到它是从系统管理的套接字启动的,它将自动使用它,而不是打开自己的听力端口。有关完整的详细信息,请参见SystemD页面。
您可以使用以下Docker映像之一,也可以创建自己的图像(请阅读此讨论):
查看钩子示例页面以获取更复杂的钩子示例。
有关与Webhook社区贡献有关的Webhook-Contrib存储库,请参阅Webhook-Contrib存储库。
查看现有的问题,以查看其他人是否也遇到相同的问题,或者打开一个新问题。
Digitalocean是一个为开发人员设计的简单且强大的云计算平台。
Browserstack是一种基于云的跨浏览器测试工具,它使开发人员能够在不同操作系统和移动设备上的各种浏览器上测试其网站,而无需用户安装虚拟机,设备或模拟器。
通过成为赞助商来支持这个项目。您的徽标将在此处显示您网站的链接。
由于所有贡献的人,该项目的存在。贡献!。
感谢我们所有的支持者!
麻省理工学院许可证(MIT)
版权(c)2015 adnan hajdarevic [email protected]
特此免费授予获得此软件副本和相关文档文件副本(“软件”)的任何人,以无限制处理该软件,包括无限制的使用权,复制,复制,修改,合并,合并,发布,分发,分发,分发,订婚,和/或允许软件的副本,并允许对以下条件提供以下条件,以下是以下条件。
上述版权通知和此许可通知应包含在软件的所有副本或大量部分中。
该软件是“原样”提供的,没有任何形式的明示或暗示保证,包括但不限于适销性,特定目的的适用性和非侵权的保证。在任何情况下,作者或版权持有人都不应对任何索赔,损害赔偿或其他责任责任,无论是在合同,侵权的诉讼中还是其他责任,是由软件,使用或与软件中的使用或其他交易有关的。