emmmm,这其实是一个很简单的一件事情,但是有很多坑,记录一下
先大概讲一下原理吧,就是每次您 push 代码后,都会给远程 HTTP URL 发送一个 POST 请求 更多说明 »
然后在宝塔这边执行你写的shell脚本,执行 git pull 的操作,好的,话不多说,开整
1、首先你需要在宝塔的软件商店里下载Webhook,说明也说的很清楚了,可设置回调脚本
这个作用很多,不仅限于自动拉取仓库代码。。。其他的自己去发掘吧。
2、安装好之后,点击添加,然后就可以写名称和脚本了
3、这里我写的是git pull 的脚本,至于写其他的我就不赘述了,操作都一样,只不过脚本不同而已
#!/bin/bash
echo ""
#输出当前时间
date --date='0 days ago' "+%Y-%m-%d %H:%M:%S"
echo "-------开始-------"
#判断宝塔WebHook参数是否存在
if [ ! -n "$1" ];
then
echo "param参数错误"
echo "End"
exit
fi
#服务器 git 项目路径
gitPath="/www/wwwroot/$1"
#码云项目 git 网址
gitHttp="[email protected]:XXXXX/$1.git" echo "路径:$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 clean -f
git pull origin master
echo "拉取完成"
#执行npm
#执行编译
#npm run build
#设置目录权限
chown -R www:www $gitPath
echo "-------结束--------"
exit
else
echo "该项目路径不存在"
echo "End"
exit
fi
这里可以先不用放在webhook里,可以单独执行一下脚本试试,至于为什么,我们等下再说。
4、现在设置好了,我们点击查看密匙
5、使用方法已经说的很清楚了,param=test,为什么这样写,因为脚本里我们使用了变量$1,你可以在脚本里把地址写死,这样这个param的值就随便你写了
但是请求的时候还是需要带上这个参数,因为我们脚本里判断了参数是否存在
#请求的地址
http://你面板的地址(端口号也需要带上)/hook?access_key=这里填写你的密匙,直接复制过来¶m=这里带上参数,参数是你项目的名称
6、然后我们跳到码云,找到你的仓库,点击管理,然后找到WebHooks
7、添加WebHook,url就填写宝塔里那个链接,密码可以不用写,这里我就选择Push事件,如果有特殊需求就自己看着办吧
8、添加好之后你就可以点击测试,如果链接正常,请求成功的话会返回这样
9、返回宝塔,查看Webhook日志,如果跟下图一样,那就没毛病。本地 git push 服务器执行脚本自动拉取,然后你就可以愉快的写代码了。
10、上面说到了不配置,单独执行一下脚本试试,原因是我昨天搞的时候一切正常,拉也能拉下来,但是版本不对
始终只能拉到一个固定的版本,git pull 在本地终端里面执行就可以拉取新的 但在宝塔脚本里面,总是本地执行后的那次,永远不变。
始终没有找到解决办法,无奈最后只能放弃这个方法。。。,今天不死心,又来搞,在大佬的指导下单独执行了脚本,发现由于没有配置好账号密码,每次pull的时候
都需要输入账号密码,所以才会拉取失败,但是昨天搞的时候我是配置了的呀,不然也不会一直拉到同一个版本的代码呀,很奇怪
有大佬知道是什么原因的话欢迎留言学习交流。
12、执行命令,说通俗一点就是记住账号密码。。。,这里需要注意的是你执行完命令之后需要输入一次帐号密码,这样之后的操作就不用输入了
而不是执行完就不用输入了
git config --global credential.helper store
13、单独执行脚本没有问题的话,就可以照上面的步骤配置WebHook了,然后你就可以本地push试试效果了。