Project Icon

webhook

Go语言编写的轻量级HTTP端点创建工具

webhook是一个Go语言开发的轻量级工具,用于在服务器上创建HTTP端点执行指定命令。它能从HTTP请求传递数据,设置触发规则,适用于代码托管平台的自动部署和通讯工具的命令执行。webhook专注于请求处理、数据解析、规则检查和命令执行,为开发者提供灵活的webhook配置方案。

什么是webhook? 构建状态

Webhook

webhook是一个用Go编写的轻量级可配置工具,它允许您在服务器上轻松创建HTTP端点(钩子),您可以用它来执行配置的命令。您还可以将HTTP请求中的数据(如头部、负载或查询变量)传递给您的命令。webhook还允许您指定必须满足的规则,以触发钩子。

例如,如果您使用Github或Bitbucket,您可以使用webhook设置一个钩子,每当您向项目的主分支推送更改时,该钩子就会在您的暂存服务器上运行项目的重新部署脚本。

如果您使用Mattermost或Slack,您可以设置"传出webhook集成"或"斜杠命令"来在您的服务器上运行各种命令,然后可以使用"传入webhook集成"或适当的响应体直接向您或您的频道报告。

webhook的目标是只做它应该做的事,即:

  1. 接收请求,
  2. 解析头部、负载和查询变量,
  3. 检查是否满足钩子的指定规则,
  4. 最后,通过命令行参数或环境变量将指定的参数传递给指定的命令。

其他一切都是命令作者的责任。

不是您在找的东西?

hookdoohookdeck
可脚本化的webhook网关,安全地在您的服务器上运行自定义构建、部署和代理脚本。无需来回排查,即可检查、监控和重放webhook。

入门

安装

从源代码构建

首先,确保您已正确设置了Go 1.14或更新版本的环境,然后运行

$ go build github.com/adnanh/webhook

以构建最新版本的webhook

使用包管理器

Snap商店

从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/shshebang。

我们的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。 除非满足以下标准之一,否则所有文件都会被忽略:

  1. Content-Type头为application/json
  2. 该部分在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 镜像之一,或创建自己的镜像(请阅读此讨论):

示例

查看钩子示例页面以获取更复杂的钩子示例。

特色 webhook 指南

社区贡献

查看 webhook-contrib 仓库,了解 webhook 社区贡献的与 webhook 相关的工具和帮助程序集合。

需要帮助?

查看现有问题,看看是否有人遇到了相同的问题,或提出新问题

支持积极开发

赞助商

DigitalOcean

DigitalOcean 是一个简单而强大的云计算平台,专为开发者设计。

BrowserStack

BrowserStack是一种基于云的跨浏览器测试工具,它使开发人员能够在不同操作系统和移动设备的各种浏览器上测试他们的网站,而无需用户安装虚拟机、设备或模拟器。


通过成为赞助商来支持这个项目。您的logo将在此处显示,并链接到您的网站。

通过贡献

这个项目的存在要感谢所有做出贡献的人。做出贡献!

通过捐款


感谢所有的支持者!

许可证

MIT许可证

版权所有 (c) 2015 Adnan Hajdarevic adnanh@gmail.com

特此免费授予任何获得本软件副本和相关文档文件("软件")的人不受限制地处理本软件的权利,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或出售软件副本的权利,并允许向其提供本软件的人这样做,但须符合以下条件:

上述版权声明和本许可声明应包含在本软件的所有副本或实质性部分中。

本软件按"原样"提供,不提供任何明示或暗示的保证,包括但不限于对适销性、特定用途适用性和非侵权性的保证。在任何情况下,作者或版权持有人均不对任何索赔、损害或其他责任负责,无论这些追责来自合同、侵权或其它行为中,还是产生于、源于或有关于本软件以及本软件的使用或其它处置。

项目侧边栏1项目侧边栏2
推荐项目
Project Cover

豆包MarsCode

豆包 MarsCode 是一款革命性的编程助手,通过AI技术提供代码补全、单测生成、代码解释和智能问答等功能,支持100+编程语言,与主流编辑器无缝集成,显著提升开发效率和代码质量。

Project Cover

AI写歌

Suno AI是一个革命性的AI音乐创作平台,能在短短30秒内帮助用户创作出一首完整的歌曲。无论是寻找创作灵感还是需要快速制作音乐,Suno AI都是音乐爱好者和专业人士的理想选择。

Project Cover

有言AI

有言平台提供一站式AIGC视频创作解决方案,通过智能技术简化视频制作流程。无论是企业宣传还是个人分享,有言都能帮助用户快速、轻松地制作出专业级别的视频内容。

Project Cover

Kimi

Kimi AI助手提供多语言对话支持,能够阅读和理解用户上传的文件内容,解析网页信息,并结合搜索结果为用户提供详尽的答案。无论是日常咨询还是专业问题,Kimi都能以友好、专业的方式提供帮助。

Project Cover

阿里绘蛙

绘蛙是阿里巴巴集团推出的革命性AI电商营销平台。利用尖端人工智能技术,为商家提供一键生成商品图和营销文案的服务,显著提升内容创作效率和营销效果。适用于淘宝、天猫等电商平台,让商品第一时间被种草。

Project Cover

吐司

探索Tensor.Art平台的独特AI模型,免费访问各种图像生成与AI训练工具,从Stable Diffusion等基础模型开始,轻松实现创新图像生成。体验前沿的AI技术,推动个人和企业的创新发展。

Project Cover

SubCat字幕猫

SubCat字幕猫APP是一款创新的视频播放器,它将改变您观看视频的方式!SubCat结合了先进的人工智能技术,为您提供即时视频字幕翻译,无论是本地视频还是网络流媒体,让您轻松享受各种语言的内容。

Project Cover

美间AI

美间AI创意设计平台,利用前沿AI技术,为设计师和营销人员提供一站式设计解决方案。从智能海报到3D效果图,再到文案生成,美间让创意设计更简单、更高效。

Project Cover

AIWritePaper论文写作

AIWritePaper论文写作是一站式AI论文写作辅助工具,简化了选题、文献检索至论文撰写的整个过程。通过简单设定,平台可快速生成高质量论文大纲和全文,配合图表、参考文献等一应俱全,同时提供开题报告和答辩PPT等增值服务,保障数据安全,有效提升写作效率和论文质量。

投诉举报邮箱: service@vectorlightyear.com
@2024 懂AI·鲁ICP备2024100362号-6·鲁公网安备37021002001498号