什么是webhook?
webhook是一个用Go编写的轻量级可配置工具,它允许您在服务器上轻松创建HTTP端点(钩子),您可以用它来执行配置的命令。您还可以将HTTP请求中的数据(如头部、负载或查询变量)传递给您的命令。webhook还允许您指定必须满足的规则,以触发钩子。
例如,如果您使用Github或Bitbucket,您可以使用webhook设置一个钩子,每当您向项目的主分支推送更改时,该钩子就会在您的暂存服务器上运行项目的重新部署脚本。
如果您使用Mattermost或Slack,您可以设置"传出webhook集成"或"斜杠命令"来在您的服务器上运行各种命令,然后可以使用"传入webhook集成"或适当的响应体直接向您或您的频道报告。
webhook的目标是只做它应该做的事,即:
- 接收请求,
- 解析头部、负载和查询变量,
- 检查是否满足钩子的指定规则,
- 最后,通过命令行参数或环境变量将指定的参数传递给指定的命令。
其他一切都是命令作者的责任。
不是您在找的东西?
入门
安装
从源代码构建
首先,确保您已正确设置了Go 1.14或更新版本的环境,然后运行
$ go build github.com/adnanh/webhook
以构建最新版本的webhook。
使用包管理器
Snap商店
Ubuntu
如果您使用Ubuntu linux(17.04或更高版本),可以使用sudo apt-get install webhook
安装webhook,这将安装社区打包的版本。
Debian
如果您使用Debian linux("stretch"或更高版本),可以使用sudo apt-get install webhook
安装webhook,这将安装社区打包的版本(感谢@freeekanayaka)来自https://packages.debian.org/sid/webhook
FreeBSD
如果您使用FreeBSD,可以使用pkg install webhook
安装webhook。
下载预构建二进制文件
不同架构的预构建二进制文件可在GitHub Releases获得。
配置
下一步是定义一些您希望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、端口和其他设置,如钩子热重载、详细输出等。
通过对该端点执行简单的HTTP GET或POST请求,您指定的重新部署脚本就会被执行。很整洁!
然而,这样定义的钩子可能对您的系统构成安全威胁,因为任何知道您端点的人都可以发送请求并执行您的命令。为了防止这种情况,您可以为钩子使用"trigger-rule"
属性,以指定触发钩子的确切情况。例如,您可以使用它们添加一个必须作为参数提供的密钥,以成功触发钩子。请查看钩子规则页面以获取可用规则的详细列表及其用法。
多部分表单数据
webhook提供对解析多部分表单数据的有限支持。
多部分表单数据可以包含两种类型的部分:值和文件。
所有表单_值_都会自动添加到payload
作用域中。
使用parse-parameters-as-json
设置将给定值解析为JSON。
除非满足以下标准之一,否则所有文件都会被忽略:
Content-Type
头为application/json
。- 该部分在
parse-parameters-as-json
设置中被命名。
在这两种情况下,给定的文件部分将被解析为JSON并添加到payload
映射中。
模板
当给定-template
CLI参数时,webhook可以将钩子配置文件解析为Go模板。有关模板使用的更多详细信息,请参见模板页面。
使用HTTPS
webhook 默认使用 http 提供钩子服务。如果你希望 webhook 使用 https 提供安全内容,可以在启动 webhook 时使用 -secure
标志。必须使用 -cert /path/to/cert.pem
和 -key /path/to/key.pem
标志提供包含证书和匹配私钥的文件。如果证书由证书颁发机构签名,cert 文件应该是服务器证书后跟 CA 证书的串联。
可以从命令行使用 TLS 版本和密码套件选择标志。使用 -list-cipher-suites
标志列出可用的密码套件。-tls-min-version
标志可与 -list-cipher-suites
一起使用。
CORS 头
如果你想设置 CORS 头,可以在启动 webhook 时使用 -header name=value
标志来设置适当的 CORS 头,这些头将随每个响应一起返回。
有兴趣在 Docker 容器内运行 webhook 吗?
你可以使用以下 Docker 镜像之一,或创建自己的镜像(请阅读此讨论):
- almir/webhook
- roxedus/webhook
- thecatlady/webhook
- lwlook/webhook - 此设置允许直接访问 Docker 主机,提供了一种简化高效的方式来管理 webhooks。
示例
查看钩子示例页面以获取更复杂的钩子示例。
特色 webhook 指南
- Plex 2 Telegram 由 @psyhomb 提供
- Webhook & JIRA 由 @perfecto25 提供
- 在 SCM(如 git)提交时触发 Ansible AWX 作业运行 由 @jpmens 提供
- 使用 GitHub webhooks 部署 由 @awea 提供
- 使用 Webhooks 设置自动部署和构建 由 Will Browning 提供
- 3 个简单步骤实现向 GitHub 推送时自动部署 Node.js 应用 由 Karolis Rusenas 提供
- 使用 Salt、Git 和 Webhooks 自动化静态站点部署 由 Linode 提供
- 使用 Prometheus 自动扩展 Kubernetes 上的 WebLogic 集群 由 Marina Kogan 提供
- Github Pages 和 Jekyll - LACNIC Labs 的新平台 由 Carlos Martínez Cagnazzo 提供
- 如何在 Ubuntu 上使用 Webhooks 部署 React 应用并集成 Slack 由 Arslan Ud Din Shafiq 提供
- 私有 webhooks 由 Thomas 提供
- webhooks 冒险 由 Drake 提供
- GitHub 专业技巧 由 Spencer Lyon 提供
- 小米扫地机器人 + 亚马逊按钮 = Dash 清洁 由 c0mmensal 提供
- 使用 Webhook 设置从 Github 自动部署 由 Maxim Orlov 提供
- 使用 Webhooks 的 Kick Me Now 由 Dave Cottlehuber 提供
- 视频:使用 Docker 和 adnanh/webhook 在 VPS 上部署 Gitlab CI/CD 配置 - 教程 #1 由 Yes! Let's Learn Software Engineering 提供
- 20 分钟内使用 webhooks + Nginx 设置集成自动部署 由 Anksus 提供
- 使用 Gitea、Uberspace 和 Webhook 自动重新部署你的静态博客 由 Arran 提供
- 使用 Webhook 自动更新我的 Zola 网站 由 Óscar Fernández 提供
- ...
- 想添加你自己的吗?开一个 Issue 或创建一个 PR :-)
社区贡献
查看 webhook-contrib 仓库,了解 webhook 社区贡献的与 webhook 相关的工具和帮助程序集合。
需要帮助?
支持积极开发
赞助商
DigitalOcean 是一个简单而强大的云计算平台,专为开发者设计。
BrowserStack是一种基于云的跨浏览器测试工具,它使开发人员能够在不同操作系统和移动设备的各种浏览器上测试他们的网站,而无需用户安装虚拟机、设备或模拟器。
通过成为赞助商来支持这个项目。您的logo将在此处显示,并链接到您的网站。
通过贡献
这个项目的存在要感谢所有做出贡献的人。做出贡献!
通过捐款
感谢所有的支持者!
许可证
MIT许可证
版权所有 (c) 2015 Adnan Hajdarevic adnanh@gmail.com
特此免费授予任何获得本软件副本和相关文档文件("软件")的人不受限制地处理本软件的权利,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或出售软件副本的权利,并允许向其提供本软件的人这样做,但须符合以下条件:
上述版权声明和本许可声明应包含在本软件的所有副本或实质性部分中。
本软件按"原样"提供,不提供任何明示或暗示的保证,包括但不限于对适销性、特定用途适用性和非侵权性的保证。在任何情况下,作者或版权持有人均不对任何索赔、损害或其他责任负责,无论这些追责来自合同、侵权或其它行为中,还是产生于、源于或有关于本软件以及本软件的使用或其它处置。