使用宝塔面板的WebHook同步gitee远程仓库里的git代码

前言

这篇文章,来讲述如何使用宝塔的webhook拉取gitee仓库的代码。
其中用到了一个gitee仓库,和两个宝塔管理后台。
要实现的是,本地向gitee私有仓库推送代码后,两个宝塔服务器的代码同步更新。

实现的过程中,踩了几个坑:

  • SSL证书报错
  • hook请求返回成功,但是宝塔上的目标文件夹,并没有同步到任何文件

新建私有仓库

可以新建或者导入其他仓库。
由于飞云已经有一个gitLab仓库了,我就直接从其他仓库导入了。
如果导入私有项目,需要提供gitLab的账号和密码。

仓库名字,路径,更加需要来设置。
权限设置为私有。
其他的选项,根据自己的需求设置。

file

如果是导入项目,创建完成后要等待几分钟,clone远程仓库的内容。

clone完毕后,就可以看到仓库里的文件,已经同步到这个新仓库了。

file

接下来,我们要实现的功能,就是更新这个仓库的代码,同步推送到多个宝塔服务器里。

创建公钥

私有项目同步前,必须配置公钥,才能进行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的项目里。
同步私有项目,必须在这里设置宝塔服务器的公钥,用于身份验证。
否则,宝塔服务器是没有权限,拉取私有仓库的代码的。

同步公有项目,则不需要设置公钥。

file

添加宝塔WebHook脚本

在宝塔的应用商店下载并安装宝塔WebHook 2.3
添加一个HOOK脚本

file

添加完成后,查看密匙
其中的http地址,就是hook钩子的请求网址。

file

添加git仓库同步钩子

Url地址,填写宝塔webhook脚本的http地址
webhook密码,填写宝塔webhook脚本的密匙

file

由于有两个宝塔服务器,我这里创建了两个HOOK钩子。
这两个钩子,分别指向两个宝塔服务器。
当前仓库的代码有推送之后,HOOK钩子会自动向这两个宝塔服务器的指定目录,推送仓库的全部代码。

注意,推送后,会覆盖宝塔服务器指定目录下的内容!

file

钩子创建完成后,点击测试,如果返回code:1,说明钩子设置正确。

先去查看宝塔的HOOK脚本运行日志。

file

再去宝塔的指定目录,查看文件是否同步成功。

遇到的问题

SSL报错

gitlab Hook execution failed: SSL_connect returned=1 errno=0

这个问题比较难搞。百度也搜不到有效的答案。
而我这里两台宝塔服务器,一个可以成功推送,一个就报这个错误。
当时无解。
后来偶然间得到一个提示,说是SSL证书配置错误。
于是看了一下宝塔服务器的SSL证书。
发现面板设置里,开启了SSL访问,但是实际上并没有配置证书。

尝试将面板SSL关闭,修改git中HOOK地址的https,改为http
再测试推送,竟然不再报错!
说明问题就出在,宝塔面板没有配置SSL证书。

file

同步内容为空

HOOK钩子执行了,但是宝塔的文件目录里,并没有同步到文件。
百度还是无解。自己解决。
逐行检查HOOK脚本,发现远程git仓库的地址,可能配置错了。
将仓库的http地址,改为ssh地址,问题得到解决。

原来,私有项目的hook脚本,仓库地址一定要使用ssh地址。

file

此外,为了得到更多的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
将仓库的代码,手动克隆一次,检查是否能克隆成功。

1. 官方交流QQ群,添加多个不批。建议使用安卓手机或电脑申请。
飞云脚本圈: 586333520飞云脚本圈
Auto.js学习交流③群:286635606
Auto.js学习交流②群:712194666(满员)
IOS免越狱自动化测试群:691997586
2. 盗版,破解有损他人权益和违法作为,请各位会员支持正版。
3. 本站部分资源来源于用户上传和网络搜集,如有侵权请提供版权证明并联系站长删除。
4.如未特别申明,本站的技术性文章均为原创,未经授权,禁止转载/搬运等侵权行为。
5.全站所有付费服务均为虚拟商品,购买后自动发货。售出后概不接受任何理由的退、换。注册即为接受此条款。
6.如果站内内容侵犯了您的权益,请联系站长删除。
飞云脚本 » 使用宝塔面板的WebHook同步gitee远程仓库里的git代码

企业级大数据智能营销管理系统

了解详情