宝塔webhook与Gitee配置实现服务器的代码同步更新

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


其中用到一个gitee仓库,和两个宝塔管理后台。

要实现的是,本地向gitee私有仓库推送代码后,两个宝塔服务器的代码同步更新。

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

SSL证书报错

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

1.新建私有仓库

可以新建或者导入其他仓库。

由于飞云已经有一个gitLab仓库了,我就直接从其他仓库导入了。



如果导入私有项目,需要提供gitLab的账号和密码。

仓库名字,路径,更加需要来设置。

权限设置为私有。

其他的选项,根据自己的需求设置。

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

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


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

2.创建公钥

私有项目同步前,必须配置公钥,才能进行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 KeyCOPY

最后的一行内容,就是公钥。

详见:生成、添加 SSH 公钥

添加后,在终端中输入:

ssh -T git@gitee.com

添加成功后,就可以使用SSH协议对仓库进行操作了。

3.添加公钥

将终端生成的公钥,添加到gitee的项目里。

同步私有项目,必须在这里设置宝塔服务器的公钥,用于身份验证。

否则,宝塔服务器是没有权限,拉取私有仓库的代码的。

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



4.添加宝塔WebHook脚本

在宝塔的应用商店下载并安装宝塔WebHook 2.3

添加一个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/wanbo"

#git 网址

gitHttp="git@gitee.com:wanbo/wanbotest.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

---------------------------------------------------------------------------------------------------------------


添加完成后,查看密匙

其中的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证书。


5.同步内容为空

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

解决这些问题之后,就可以愉快的进行开发了


7. 身份验证

如果遇到无法同步代码的情况,还有一个操作。

在宝塔终端里,配置git身份

git config --global user.name "gitee用户名"

git config --global user.email "gitee注册邮箱"

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,125评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,293评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,054评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,077评论 1 291
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,096评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,062评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,988评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,817评论 0 273
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,266评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,486评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,646评论 1 347
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,375评论 5 342
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,974评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,621评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,796评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,642评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,538评论 2 352

推荐阅读更多精彩内容