一、在服务器中安装GIT服务  这个参考之前安装方法,宝塔环境也是一样子安装的

二、安装WebHook

宝塔 WebHook 代码自动更新到阿里服务器上_服务器

三、添加脚本  (先添加再编辑,窗口大一些好操作)

宝塔 WebHook 代码自动更新到阿里服务器上_初始化_02

3.1  能用代码,服务器所有GIT都适用

#!/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/$1"
#git 网址
gitHttp="https://gitee.com/rizadon/$1.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

例子:创建xxx.com网站

宝塔 WebHook 代码自动更新到阿里服务器上_git_03

宝塔 WebHook 代码自动更新到阿里服务器上_git_04

宝塔 WebHook 代码自动更新到阿里服务器上_服务器_05

WebHook网址:​​http://100.200.200.400:3009/hook?access_key=3XvIsjw24z1TuzJONtHvfohN9yrshaCLsyrg5A1eAjqNwosx&param=xxx​

网站名称对应:xxx.com

宝塔 WebHook 代码自动更新到阿里服务器上_初始化_06

码云仓库网址也要对应:https://gitee.com/fdsf451/xxx.git

宝塔 WebHook 代码自动更新到阿里服务器上_初始化_07

四、在码云上添加WebHook网址

宝塔 WebHook 代码自动更新到阿里服务器上_初始化_08

把上面宝塔中的WebHook 网址复制过来

宝塔 WebHook 代码自动更新到阿里服务器上_初始化_09

宝塔 WebHook 代码自动更新到阿里服务器上_git_10

五、WebHook 一对一代码更新  不用带param参数

WebHook网址:​​http://100.200.200.400:3009/hook?access_key=3XvIsjw24z1TuzJONtHvfohN9yrshaCLsyrg5A1eAjqNwosx​

宝塔 WebHook 代码自动更新到阿里服务器上_初始化_11

六、在码云上部署公钥

进入具体项目仓库

宝塔 WebHook 代码自动更新到阿里服务器上_初始化_12

宝塔 WebHook 代码自动更新到阿里服务器上_初始化_13

把宝塔中生成SSH复制过来

如果其它仓库已经使用过SSH,在这里启用就行

宝塔 WebHook 代码自动更新到阿里服务器上_服务器_14

七、测试代码拉新

 代码没有更新,宝塔WebHook日志显示  但是代码没有更新到,发现在需要在码云上合拼两次阿里服务器才更新到,就是说要更2次

宝塔 WebHook 代码自动更新到阿里服务器上_初始化_15

代码改进:加多一句代码

git fetch --all #先删除再拉,不然需要拉二次才到更新到

宝塔 WebHook 代码自动更新到阿里服务器上_git_16

八、简单代码实现-测试代码拉新

 在宝塔 webhook填写代码

宝塔 WebHook 代码自动更新到阿里服务器上_初始化_17

// cd 你的网站路径 && git pull 你的码云地址 refs/heads/你的分支 2>&1
cd /www/wwwroot/cms.xxx.com && git pull git@gitee.com:xxx/applist.git refs/heads/develop 2>&1

宝塔 WebHook 代码自动更新到阿里服务器上_服务器_18

7.1 在码云合拼代码

宝塔 WebHook 代码自动更新到阿里服务器上_git_19

说明成功了。宝塔WebHook日志显示  但是代码没有更新到

宝塔 WebHook 代码自动更新到阿里服务器上_初始化_15

用命令查看下原因:

//先进入网站根目录
cd /www/wwwroot/cms.xxxx.com
//然拉下
git pull git@gitee.com:xxx/applist.git refs/heads/develop 2>&1

初始化
git init

宝塔 WebHook 代码自动更新到阿里服务器上_服务器_21

发现错误:fatal: not a git repository (or any of the parent directories): .git (致命:不是git存储库(或任何父目录):.git)

说明不是GIT仓库,需要初始化下

git init

再合拼更新发现还是没有更新代码,查看宝塔WebHook日志显示

From gitee.com:xxxx/applist
* branch develop -> FETCH_HEAD
error: The following untracked working tree files would be overwritten by merge:
.htaccess
Please move or remove them before you merge.
Aborting
From gitee.com:xxx/applist
* branch develop -> FETCH_HEAD
error: The following untracked working tree files would be overwritten by merge:
.htaccess
Please move or remove them before you merge.
Aborting

发现错误:error: The following untracked working tree files would be overwritten by merge (错误:合并将覆盖以下未跟踪的工作树文件:.htaccess访问)

原因:是宝塔创建网站的时候,会自动生成四个文件,但是初始化GIT仓库是需要是空白一片,不能任何文件的,

宝塔 WebHook 代码自动更新到阿里服务器上_git_22

把回到网站根目录把文件全部删除后更合拼更新,发现在OK。搞定收工。

如果上面的不行,你再查下面的这些原因:

宝塔webhook 执行后返回{"code": 1},说明执行异常了,请检查命令是否正常。一般来说原因是:

1、路径错误
2、git 仓库的地址异常、没有 pull 权限
3、远程 git 仓库被强制回滚

八、简单代码实现

参考:宝塔git+webhooks实现代码同步更新