gin实现webhook功能
背景
之前,我写文章的时候,每次都需要 git push 之后,再到服务器上执行git pull命令,然后再执行 npm run docs:build 命令,才能更新文章,这样非常麻烦,就想着自动化这整个过程,所以就写了一个 webhook 功能,实现自动更新文章。
实现
前期准备
1. 创建一个 gitee 仓库 这里创建一个 test 仓库,点击
管理按钮,会打开仓库管理界面
2. 仓库管理页面

3. 打开 WebHooks 管理页面 点击
WebHooks按钮后,打开WebHooks 管理页面
4. WebHooks 管理页面 点击
添加 webHook按钮,打开添加 WebHooks 页面
5. 添加 WebHook 页面

6. 填写 URL 和 WebHook 密码

7. 填写 URL 和 WebHook 签名密钥

8. 项目的准备工作
创建项目目录:
mkdir webhook- 初始化 go 模块
go mod init webhook- 安装依赖:
# gin 框架
go get github.com/gin-gonic/gin
# 日志
go get gopkg.in/natefinch/lumberjack.v2
# 环境变量
go get github.com/joho/godotenv代码实现
代码仓库:
部署
go 项目部署还是挺容易的,但是考虑到后续的运维工作,直接使用宝塔面板来部署了。
打开宝塔面板,点击左侧菜单栏的
网站,打开网站管理页面后,选择Go项目,点击添加GO项目按钮
打开添加GO项目页面后,可以看到需要填写的信息

填写项目信息

注意:这里我使用的是
root用户,是因为git所属的用户也是root,一般情况下,使用www用户就行了
点击 确定 按钮后,go 项目就会自动运行了。
打开项目管理页面

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

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

查看运行状态

测试运行
测试首页

测试 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/下
ln -s /usr/local/git/bin/git /usr/local/bin/git