前言
这篇文章,来讲述如何使用宝塔的webhook拉取gitee仓库的代码。
其中用到了一个gitee仓库,和两个宝塔管理后台。
要实现的是,本地向gitee私有仓库推送代码后,两个宝塔服务器的代码同步更新。
实现的过程中,踩了几个坑:
- SSL证书报错
- hook请求返回成功,但是宝塔上的目标文件夹,并没有同步到任何文件
新建私有仓库
可以新建或者导入其他仓库。
由于飞云已经有一个gitLab仓库了,我就直接从其他仓库导入了。
如果导入私有项目,需要提供gitLab的账号和密码。
仓库名字,路径,更加需要来设置。
权限设置为私有。
其他的选项,根据自己的需求设置。
如果是导入项目,创建完成后要等待几分钟,clone远程仓库的内容。
clone完毕后,就可以看到仓库里的文件,已经同步到这个新仓库了。
接下来,我们要实现的功能,就是更新这个仓库的代码,同步推送到多个宝塔服务器里。
创建公钥
私有项目同步前,必须配置公钥,才能进行Hook推送。公开项目,则无需配置
在宝塔服务器的终端里,查看密匙
cd ~/.ssh
ls
生成公钥,后面引号的内容,可以自定义。仅用作标识
建议加上服务器的标识,用于区分是哪个服务器或者哪个项目的
ssh-keygen -t ed25519 -C "Gitee SSH Key"
生成的过程中,要确认输入y,按3次回车
然后就会生成一个SHA256的KEY。
列出全部的KEY:
ls ~/.ssh/
查看刚生成的KEY:
cat ~/.ssh/id_ed25519.pub
日志:
The key fingerprint is:
SHA256:VWYCw1eEX5tU9PGn9yaomyE8UkoHWmaARbTTiywUE Gitee SSH Key
The key's randomart image is:
+--[ED25519 256]--+
|+E++o.+.o..+* +o|
|o=o..= ...o= o +|
|.+o.. o ... o o+|
|.. . . . o..|
| . S . .|
| . = . ..|
| o + . . . o|
| . o + o |
| +. |
+----[SHA256]-----+
[root@VM-0-4-centos ~]# ls ~/.ssh/
authorized_keys id_ed25519 id_ed25519.pub id_rsa id_rsa.pub known_hosts
[root@VM-0-4-centos ~]# cat ~/.ssh/id_ed25519.pub
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIBuQ6xE+1Ckd6TOS7Cyr7DKCGGZ243RLJL Gitee SSH Key
最后的一行内容,就是公钥。
详见:生成、添加 SSH 公钥
添加后,在终端中输入:
ssh -T git@gitee.com
添加成功后,就可以使用SSH协议对仓库进行操作了。
添加公钥
将终端生成的公钥,添加到gitee的项目里。
同步私有项目,必须在这里设置宝塔服务器的公钥,用于身份验证。
否则,宝塔服务器是没有权限,拉取私有仓库的代码的。
同步公有项目,则不需要设置公钥。
添加宝塔WebHook脚本
在宝塔的应用商店下载并安装宝塔WebHook 2.3
添加一个HOOK脚本
添加完成后,查看密匙
其中的http地址,就是hook钩子的请求网址。
添加git仓库同步钩子
Url地址,填写宝塔webhook脚本的http地址
webhook密码,填写宝塔webhook脚本的密匙
由于有两个宝塔服务器,我这里创建了两个HOOK钩子。
这两个钩子,分别指向两个宝塔服务器。
当前仓库的代码有推送之后,HOOK钩子会自动向这两个宝塔服务器的指定目录,推送仓库的全部代码。
注意,推送后,会覆盖宝塔服务器指定目录下的内容!
钩子创建完成后,点击测试,如果返回code:1
,说明钩子设置正确。
先去查看宝塔的HOOK脚本运行日志。
再去宝塔的指定目录,查看文件是否同步成功。
遇到的问题
SSL报错
gitlab Hook execution failed: SSL_connect returned=1 errno=0
这个问题比较难搞。百度也搜不到有效的答案。
而我这里两台宝塔服务器,一个可以成功推送,一个就报这个错误。
当时无解。
后来偶然间得到一个提示,说是SSL证书配置错误。
于是看了一下宝塔服务器的SSL证书。
发现面板设置里,开启了SSL访问,但是实际上并没有配置证书。
尝试将面板SSL关闭,修改git中HOOK地址的https,改为http
再测试推送,竟然不再报错!
说明问题就出在,宝塔面板没有配置SSL证书。
同步内容为空
HOOK钩子执行了,但是宝塔的文件目录里,并没有同步到文件。
百度还是无解。自己解决。
逐行检查HOOK脚本,发现远程git仓库的地址,可能配置错了。
将仓库的http地址,改为ssh地址,问题得到解决。
原来,私有项目的hook脚本,仓库地址一定要使用ssh地址。
此外,为了得到更多的HOOK信息,我还对HOOK脚本做了进一步的优化。
首次克隆git配置文件之后,通过判断文件夹是否存在,来判断同步是成功还是失败:
# 检查是否克隆成功
if [ ! -d ".git" ]; then
echo "克隆git配置失败!请检查远程仓库地址是否正确!"
echo "-------------End-------------"
exit
fi
另外,仓库内容拉取完毕之后,再判断是否pull成功:
# 判断是否pull成功
if [ $? == 0 ];then
echo "pull success"
else
echo "pull fail"
fi
解决这些问题之后,就可以愉快的进行开发了。
身份验证
如果遇到无法同步代码的情况,还有一个操作。
在宝塔终端里,配置git身份
git config --global user.name "gitee用户名"
git config --global user.email "gitee注册邮箱"
配置完成后,进入欲同步的目录,然后执行git clone
将仓库的代码,手动克隆一次,检查是否能克隆成功。
飞云脚本圈: 586333520
Auto.js学习交流③群:286635606
Auto.js学习交流②群:712194666(满员)
IOS免越狱自动化测试群:691997586
2. 盗版,破解有损他人权益和违法作为,请各位会员支持正版。
3. 本站部分资源来源于用户上传和网络搜集,如有侵权请提供版权证明并联系站长删除。
4.如未特别申明,本站的技术性文章均为原创,未经授权,禁止转载/搬运等侵权行为。
5.全站所有付费服务均为虚拟商品,购买后自动发货。售出后概不接受任何理由的退、换。注册即为接受此条款。
6.如果站内内容侵犯了您的权益,请联系站长删除。
飞云脚本 » 使用宝塔面板的WebHook同步gitee远程仓库里的git代码