Skip to content

gin实现webhook功能

背景

之前,我写文章的时候,每次都需要 git push 之后,再到服务器上执行git pull命令,然后再执行 npm run docs:build 命令,才能更新文章,这样非常麻烦,就想着自动化这整个过程,所以就写了一个 webhook 功能,实现自动更新文章。

实现

前期准备

  • 1. 创建一个 gitee 仓库 这里创建一个 test 仓库,点击 管理 按钮,会打开仓库管理界面 创建一个gitee仓库

  • 2. 仓库管理页面仓库管理页面

  • 3. 打开 WebHooks 管理页面 点击 WebHooks 按钮后,打开 WebHooks 管理 页面 点击WebHooks按钮

  • 4. WebHooks 管理页面 点击 添加 webHook 按钮,打开添加 WebHooks 页面 添加 webHooks

  • 5. 添加 WebHook 页面添加WebHook页面

  • 6. 填写 URL 和 WebHook 密码填写URL和WebHook密码

  • 7. 填写 URL 和 WebHook 签名密钥填写URL和WebHook签名密钥

  • 8. 项目的准备工作

  • 创建项目目录:

shell
mkdir webhook
  • 初始化 go 模块
shell
go mod init webhook
  • 安装依赖:
shell
# gin 框架
go get github.com/gin-gonic/gin
# 日志
go get gopkg.in/natefinch/lumberjack.v2
# 环境变量
go get github.com/joho/godotenv

代码实现

代码仓库:

github

gitee

部署

go 项目部署还是挺容易的,但是考虑到后续的运维工作,直接使用宝塔面板来部署了。

  • 打开宝塔面板,点击左侧菜单栏的 网站,打开网站管理页面后,选择 Go项目,点击 添加GO项目按钮 打开宝塔面板

  • 打开添加GO项目页面后,可以看到需要填写的信息 添加GO项目页面

  • 填写项目信息 填写项目信息

注意:这里我使用的是 root 用户,是因为 git 所属的用户也是 root ,一般情况下,使用 www 用户就行了

点击 确定 按钮后,go 项目就会自动运行了。

  • 打开项目管理页面 打开项目管理页面

  • GO 项目管理页面 GO项目管理页面 点击左侧的 SSL 选项,配置 SSL证书

  • SSL证书配置页面 SSL证书配置页面

选择 Let's Encrypt 选项,勾选 全选,然后点击 申请证书 按钮,稍等一段时间,证书就会申请下来了

  • 保存证书 保存证书

  • 查看运行状态 查看运行状态

测试运行

测试首页

测试运行

测试 webhook

测试webhook

  • 点击查看 webhook 结果 查看webhook结果

  • 查看 webhook 结果 查看webhook结果

可能的问题

我之前在旧服务器部署 webhook 服务时,正常运行,但是我换成新服务器的时候,运行的时候报错了:执行shell命令失败,失败原因: sh: git: command not found

排查后,发现是 os.Environ() 没有加载 git 的路径,git 的路径是/use/local/git/bin/git,os.Environ() 没有加载 /use/local/git/bin/, 加载的路径中有/usr/local/bin/,所以可以创建一个软链接到/usr/local/bin/下

shell
ln -s /usr/local/git/bin/git /usr/local/bin/git