目录

如何使用 Github webhook 配合宝塔 webhook 自动化部署

如果你提交版本后需要手动进入服务器 shell 去 git pull ,那么本文或许对你有些帮助。

一、关于 webhook

为了让你直观的了解到 webhook 能做什么,我例举了两个比较常见的应用场景:

  • 你在 Github 上开源了一个项目,你希望在 git push 提交新版本到 Github 后,部署了宝塔面板的服务器能自动执行 git pull 命令,从 Github 拉取最新版本代码。

  • 你在 gitee 或自建的 gogs (一款开源 git server )上托管代码,你希望在 git push 提交新版本到远程仓库后,服务器能自动执行 git pull 命令,从远程仓库拉取最新版本的代码,并重启服务。

实际上,你可以把它看做一种事件触发器。当满足某种特定条件时,执行一系列特定操作。其中,一方是事件发起者,另一方是事件接收者。

以第一个例子来解释,Github 接收到 push 后,发起一个 HTTP(S) 请求,响应者接收到请求后执行特定命令或业务逻辑。Github 是事件发起者,部署了宝塔面板的服务器是事件执行者。

二、配置宝塔面板 webhook

我的博客部署在腾讯云的服务器上,因为博客框架用的是 hugo ,所以生成的站点源码就是纯静态网页。(之所以不直接白嫖 Github pages 服务,是因为百度 spider 被 Github ban 了)。

所以我希望在写完文章后 push 给 Github 后,部署了宝塔面板的腾讯云服务器能 cd 到博客源码目录下执行 git pull 命令,这样就可以从 Github 拉取最新的版本覆盖服务器上当前的版本了,因为是静态资源,所以无需重启什么服务,git pull 完成后即更新完毕。

1)安装宝塔 WebHook 插件

去软件商店可以找到这玩意儿

/post_images/image-20210818095736324.png

2)添加 WebHook

/post_images/image-20210818094731947.png

3)配置执行命令

cd /www/wwwroot/sugarlesss.github.io;
git pull;

/post_images/image-20210818095444177.png

配置完成后,就可以看到一条 webhook 规则了。

/post_images/image-20210818095456515.png

4)获取 webhook url

点击查看秘钥,蓝色选中的部分就是宝塔面板提供的 webhook url ,当链接被访问时,就会执行我们上一步配置的命令,自动 git pull 了。

/post_images/image-20210818095604028.png

三、配置 Github webhook

还是以我的博客仓库为例,在仓库的 Settings -> Webhooks 页面右上角 add webhook 。

/post_images/image-20210818095053784.png

将宝塔提供的 webhook url 填入此处的 Payload URL,并将下方的 Content type 修改为 application/json ,否则 Github 请求此 URL 时,宝塔会返回 403 错误。

/post_images/image-20210818095149901.png

注意事项

  • 在服务器上生成一对 SSH 秘钥,将公钥配置到你的 Github 账号后,服务器就可以使用 git pull 命令拉取最新版本,不需要输入账号密码了。
  • 如果在配置 Github webhook 时,Content type 你忘记修改为 application/json ,宝塔会返回 403 错误,你配置的一系列自定义命令就无法执行了。

REF

https://www.cnblogs.com/blibli/p/11331509.html