本地开发完毕,提交 git ,自动触发 gitee webhook,
gitee webhook对线上服务器发起请求,触发服务器上的宝塔hook,接下来宝塔请求git同步,从而把gitee最新代码通过git同步到网站。
实现了本地开发完毕,提交git,线上就自动更新的过程。
为什么使用 gitee ?主要是速度快,github (或gitlab,gitea等)也有 webhook
为什么使用 宝塔hook?使用 php 简单写两句 git clone 也可以,但是 php服务器状态不一定正常,比如有时候502需要重启,而宝塔进程相对更加稳定。
服务器配置git
一般来说,已经安装了git,查看已安装版本号:
git --version
如果没有安装:
yum install git
配置git密钥
查看是否有密钥
cd ~/.ssh
ls
cat id_rsa.pub
如果没有,生成一个:(按前一个步骤查看)
ssh-keygen -t rsa
把得到的公钥,放在 gitee 指定仓库 (管理 –> 公钥管理)中(添加一个)
添加 giteehook
在宝塔商城里 webhook ,
安装完毕后,添加一个 hook,名称随意,代码如下:
#!/bin/bash
echo ""
#输出当前时间
date --date='0 days ago' "+%Y-%m-%d %H:%M:%S"
echo "Start"
#判断宝塔WebHook参数是否存在
if [ ! -n "$1" ];
then
echo "param参数错误"
echo "End"
exit
fi
#git项目路径
gitPath="/www/wwwroot/huaz"
#git 网址
gitHttp="git@gitee.com:zhufenghua1998/huaz.git"
echo "Web站点路径:$gitPath"
#判断项目路径是否存在
if [ -d "$gitPath" ]; then
cd $gitPath
#判断是否存在git目录
if [ ! -d ".git" ]; then
echo "在该目录下克隆 git"
git clone $gitHttp gittemp
mv gittemp/.git .
rm -rf gittemp
fi
#拉取最新的项目文件
#git reset --hard origin/master
git pull
#设置目录权限
#chown -R www:www $gitPath
echo "End"
exit
else
echo "该项目路径不存在"
echo "End"
exit
fi
修改 git 路径,以及 url 两个参数。
重启一下 宝塔面板:(先切换 root )
/etc/init.d/bt restart
配置 git
git config --global user.name "用户名"
git config --global user.email "邮箱"
git config --global credential.helper store //会生成.gitconfig 的文件
cat .gitconfig //如果报错: No such file or directory,就用下一行的代码
cat ~/.gitconfig //显示内容
尝试克隆代码,到本地,检测git环境:
git clone https://gitee.com/XXX/XXX.git //clone后面是下载链接
(假设 git 已经正常。。。)
点击 宝塔 的webhook,刚才添加的一个项目。查看密钥
宝塔WebHook使用方法:
GET/POST:
http://fewfewf.com:8888/hook?access_key=xxxxxxxxxxxxxxx¶m=aaa
@param access_key string HOOK密钥
@param param string 自定义参数(在hook脚本中使用$1接收)
除了顶部的直接复制密钥外,也可以复制 url 的 access_key 参数,它们是一模一样的。
在 gitee 的 webhook (项目–> 管理 –> webhook)中,添加一个,均使用默认即可(也就是密码验证)
其中 URL 是前面宝塔的 webhook 给出的 url,最后的aaa参数,换成仓库名。
webhook密码,也就是宝塔hook的密码。
填完这两个参数,理论上已经完全ok,但实际可能有问题。
错误排查
宝塔的 webhook ,是否正常?它需要写一段代码,虽然前面已经复制粘贴了,但是会有错误。
我们点击一下测试宝塔的 webhook,如果提示:
2022-08-23 23:16:30
Start
param参数错误
End
则说明代码正常,如果仅有一个 Star,就说明文件格式出了问题。(你可能是从网页里复制过来的,所以乱码)
随意新建一个 .sh 或其他文件,然后粘贴上面的代码,接下来打开命令终端:
vim test.sh 打开文件,执行:set ff=unix设置文件为unix,然后执行:wq,保存成unix格式。
转换格式后,再打开该文件,复制转换后的代码,粘贴到宝塔的 webhook 中,看看是否正常了,如果输出 xxx 参数错误则说明文件格式 ok。
gitee的webhook是否正常?点击测试,并刷新页面,查看响应日志,
如果响应体如下,则说明正常:
{
"code": 1
}
同时,也可以查看宝塔 webhook 的调用次数,观察 gitee 的 webhook ,是否能触发 宝塔的 webhook 。
最后,列出一些正确的日志:
2022-08-23 23:17:38
Start
Web站点路径:/www/wwwroot/huaz
Already up-to-date.
End
2022-08-23 23:18:10
Start
Web站点路径:/www/wwwroot/huaz
Updating d20b2cb..1e91e3f
Fast-forward
README.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
End
如果是测试触发的,会像第一个日志,没有需要同步的文件,如果是更新推送到 gitee 从而导致自动触发更新,则像后面那个,自动同步了文件。