基于Github的Webhook的自动部署

226 阅读5分钟

什么是webhook

Webhook 是一种通过 HTTP 协议实现的 API,它可以将特定事件发生时通知到一个 URL 地址,从而触发相应的操作。Webhook 可以用于各种场景,例如自动化部署、集成和处理事件、监控等。

在使用 Webhook 时,我们需要提供一个回调地址(URL),当某个事件发生时,Webhook 就会向这个地址发送 POST 请求,并将相关数据作为请求体发送过来。我们可以编写相应的脚本或程序,从请求体中解析出数据,并基于此进行相应的操作。因此,Webhook 提供了一种快速、简单、可靠的方式来实现系统之间的集成或者自动化任务。

Webhook 的优点包括:

  1. 简单易用:Webhook 只需提供一个 URL 即可启用,没有复杂的配置或 API 认证等流程。
  2. 实时性好:当事件发生时,Webhook 会立即推送通知,保证实时性和及时性。
  3. 可靠性高:Webhook 基于 HTTP 协议,是一种基于标准化协议的简单而可靠的方案。

Webhook 可以被广泛应用在不同的领域,如持续集成、告警通知、自动化部署、数据整合等。常见的应用场景包括:

  • 持续集成:Webhook 可以触发自动化测试、编译、构建等持续集成任务。
  • 告警通知:Webhook 可以将告警信息推送到指定的应用程序,从而及时通知相关人员。
  • 自动化部署:Webhook 可以触发自动化部署流程,自动升级应用程序。
  • 数据整合:Webhook 可以将不同来源的数据进行整合,生成报表或者分析结果。

需要注意的是,在使用 Webhook 时,需要确保目标服务器可以接收来自 Webhook 的请求,并对请求做出相应的处理。同时,为了保证安全性,需要设置相应的身份验证和权限控制机制。

Webhook 自动部署使用说明

本文档介绍了如何使用 @brewer/webhook-manager 实现在服务器中自动部署多个项目。

安装

首先需要全局安装(不全局也可以,随便你,不安装也可以,随便你) @brewer/webhook-manager,可以在命令行中输入以下命令进行安装:

npm i @brewer/webhook-manager -g

快速开始

  1. 配置项目

在 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

  1. 启动服务

进入 webhookConfig 文件夹并运行 brewer-webhook 命令启动服务。日志将自动生成在该目录下。

API示例

  1. 检查服务状态

访问 URL http://your-server-url:3200/webhook/health 可以检查服务是否正常运行。如果返回 health 则表示服务正常。部署日志可以在当前目录下的 ./logs/webhook.log 中查看。

  1. 配置 Webhook

在代码托管平台(如 Github、Gitlab、Bitbucket)中为每个项目配置 Webhook,Webhook 地址为 http://your-server-url:3200/webhook/:project,其中 :project 为项目名称,对应 config.json 中定义的项目名称。

  1. 检测 Webhook 是否设置正确

修改项目文件并 push 代码到仓库,检查 Github 中的请求和日志中的报错并解决。

到此,我们完成了一个监听多个项目的服务搭建。

deploy.sh 示例

deploy.sh 是一个 Bash 脚本,可自动执行 Web 服务器中项目的部署过程。以下是脚本功能的详细解释:

  1. 将 WEB_PATH 变量设置为 /var/www/project1
  2. 将当前目录更改为 WEB_PATH
  3. 将代码重置为原始/主分支的状态。
  4. 清除 Git 未跟踪的任何文件的目录。
  5. 使用 npm install 安装项目依赖项。
  6. 使用 npm run build 构建项目。

注意:项目需要自己先拉取到服务器中,并在 deploy.sh 中进行管理(没有deploy.sh也可以,随便你)。

Webhook 设置流程

在 Github 的某一个项目中按照以下步骤进行设置:

  1. 进入 Settings -> Webhooks
  2. 点击 Add webhook
  3. 配置以下参数:
  • Content type -> json
  • Payload URL -> https://yoursite.com/webhook/ + app1 (其中 app1 为项目名称)
  • Secret -> 保持为空
  • SSL verification -> 若 SSL 验证失败可以暂时使用 Disable (not recommended)
  • Just the push event.
  • Active 勾选
  1. 点击 Add webhook 按钮保存配置。

工具介绍

这是一个 Node.js Web 服务器脚本,用于侦听 Webhook 请求并触发部署脚本。 它使用 Express.js 框架处理 HTTP 请求,使用 body-parser 中间件解析 JSON 请求主体,使用 child_process 模块生成 shell 命令,使用 winston 模块进行日志记录。

该脚本读取一个 JSON 配置文件,该文件定义了不同项目的部署设置。 当收到 webhook 请求时,脚本会根据配置文件检查 URL 路径中的项目名称,如果找到匹配的配置,它会生成一个 shell 命令来执行该项目的部署脚本。 如果在配置中定义了部署后命令,它还会生成一个 shell 命令来执行它。

该脚本还在 /webhook/health 提供了一个健康端点,用于检查服务器状态。

总的来说,此脚本提供了一种使用 webhook 自动执行多个项目部署过程的简单方法。


工具地址:github.com/beerui/webh…