什么是webhook
Webhook 是一种通过 HTTP 协议实现的 API,它可以将特定事件发生时通知到一个 URL 地址,从而触发相应的操作。Webhook 可以用于各种场景,例如自动化部署、集成和处理事件、监控等。
在使用 Webhook 时,我们需要提供一个回调地址(URL),当某个事件发生时,Webhook 就会向这个地址发送 POST 请求,并将相关数据作为请求体发送过来。我们可以编写相应的脚本或程序,从请求体中解析出数据,并基于此进行相应的操作。因此,Webhook 提供了一种快速、简单、可靠的方式来实现系统之间的集成或者自动化任务。
Webhook 的优点包括:
- 简单易用:Webhook 只需提供一个 URL 即可启用,没有复杂的配置或 API 认证等流程。
- 实时性好:当事件发生时,Webhook 会立即推送通知,保证实时性和及时性。
- 可靠性高:Webhook 基于 HTTP 协议,是一种基于标准化协议的简单而可靠的方案。
Webhook 可以被广泛应用在不同的领域,如持续集成、告警通知、自动化部署、数据整合等。常见的应用场景包括:
- 持续集成:Webhook 可以触发自动化测试、编译、构建等持续集成任务。
- 告警通知:Webhook 可以将告警信息推送到指定的应用程序,从而及时通知相关人员。
- 自动化部署:Webhook 可以触发自动化部署流程,自动升级应用程序。
- 数据整合:Webhook 可以将不同来源的数据进行整合,生成报表或者分析结果。
需要注意的是,在使用 Webhook 时,需要确保目标服务器可以接收来自 Webhook 的请求,并对请求做出相应的处理。同时,为了保证安全性,需要设置相应的身份验证和权限控制机制。
Webhook 自动部署使用说明
本文档介绍了如何使用 @brewer/webhook-manager
实现在服务器中自动部署多个项目。
安装
首先需要全局安装(不全局也可以,随便你,不安装也可以,随便你) @brewer/webhook-manager
,可以在命令行中输入以下命令进行安装:
npm i @brewer/webhook-manager -g
快速开始
- 配置项目
在 config.json
文件中配置需要自动部署的项目,包括监听的端口和每个项目的名称、部署路径和执行完部署后需要执行的命令。例如:
{
"port": 3200,
"app1": {
"name": "My Project 1",
"path": "/var/www/project1",
"command": ""
},
"app2": {
"name": "My Project 2",
"path": "/var/www/project2",
"command": "cd /var/www/project2 && git pull origin main && npm i && npm run build"
}
}
为了规范和便于管理,我们建议在新建文件夹 webhookConfig
中创建 config.json
进行配置。
例如:在服务器中的目录为:/data/webhookConfig/config.json
- 启动服务
进入 webhookConfig
文件夹并运行 brewer-webhook
命令启动服务。日志将自动生成在该目录下。
- 检查服务状态
访问 URL http://your-server-url:3200/webhook/health
可以检查服务是否正常运行。如果返回 health
则表示服务正常。部署日志可以在当前目录下的 ./logs/webhook.log
中查看。
- 配置 Webhook
在代码托管平台(如 Github、Gitlab、Bitbucket)中为每个项目配置 Webhook,Webhook 地址为 http://your-server-url:3200/webhook/:project
,其中 :project
为项目名称,对应 config.json
中定义的项目名称。
- 检测 Webhook 是否设置正确
修改项目文件并 push 代码到仓库,检查 Github 中的请求和日志中的报错并解决。
到此,我们完成了一个监听多个项目的服务搭建。
deploy.sh 示例
deploy.sh
是一个 Bash 脚本,可自动执行 Web 服务器中项目的部署过程。以下是脚本功能的详细解释:
- 将 WEB_PATH 变量设置为
/var/www/project1
。 - 将当前目录更改为
WEB_PATH
。 - 将代码重置为原始/主分支的状态。
- 清除 Git 未跟踪的任何文件的目录。
- 使用
npm install
安装项目依赖项。 - 使用
npm run build
构建项目。
注意:项目需要自己先拉取到服务器中,并在 deploy.sh
中进行管理(没有deploy.sh也可以,随便你)。
Webhook 设置流程
在 Github 的某一个项目中按照以下步骤进行设置:
- 进入
Settings
->Webhooks
。 - 点击
Add webhook
。 - 配置以下参数:
Content type
->json
Payload URL
->https://yoursite.com/webhook/ + app1
(其中app1
为项目名称)Secret
-> 保持为空SSL verification
-> 若 SSL 验证失败可以暂时使用Disable (not recommended)
Just the push event.
Active
勾选
- 点击
Add webhook
按钮保存配置。
工具介绍
这是一个 Node.js Web 服务器脚本,用于侦听 Webhook 请求并触发部署脚本。 它使用 Express.js 框架处理 HTTP 请求,使用 body-parser 中间件解析 JSON 请求主体,使用 child_process 模块生成 shell 命令,使用 winston 模块进行日志记录。
该脚本读取一个 JSON 配置文件,该文件定义了不同项目的部署设置。 当收到 webhook 请求时,脚本会根据配置文件检查 URL 路径中的项目名称,如果找到匹配的配置,它会生成一个 shell 命令来执行该项目的部署脚本。 如果在配置中定义了部署后命令,它还会生成一个 shell 命令来执行它。
该脚本还在 /webhook/health
提供了一个健康端点,用于检查服务器状态。
总的来说,此脚本提供了一种使用 webhook 自动执行多个项目部署过程的简单方法。