1. 打开宝塔面板=>软件管理=>下载WebHook
2.点击设置=>添加Hook
3.Shell脚本
#!/bin/bash
#输出当前时间
date --date='0 days ago' "%Y-%m-%d %H:%M:%S"
echo "=====开始====="
#判断宝塔WebHook参数是否存在
if [ ! -n "$1" ];
then
echo "param参数错误"
echo "End"
exit
fi
echo "$1"
#git项目路径
gitPath="/www/wwwroot/$1"
#git 网址
gitHttp="https://e.coding.net/q-huan/$1.git"
echo "站点路径:$gitPath"
#切换指定用户来执行命令
su - webmaster <<EOF
#判断项目路径是否存在
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 fetch --all
git reset --hard origin/master
# git reset --hard
git pull origin master
echo "拉取完成"
echo "当前执行用户"
id
rm -rf composer.lock
composer install
#设置目录权限
sudo chown -R webmaster:www $gitPath
echo "=====结束====="
exit
else
echo "该项目路径不存在"
echo "End"
exit
fi
EOF
此处需要注意:WebHook是以
root
用户来执行的,在拉取代码(git pull
)时遇到问题:拉取的不是最新代码,而是手动
拉取的最后一次提交代码;原因:权限问题
解决方法 指定具有拉取权限的用户来执行:
👇👇👇👇👇👇👇👇
su - webmaster <<EOF
该用户需要执行的代码
EOF
👉 注:上述脚本中使用了sudo chown -R webmaster:www $gitPath
命令,需要先设置 chown
命令被当前用户使用sudo
执行时不用输入密码.
#编辑 /etc/sudoers 文件
[root@izbp1jbm ~]# vim /etc/sudoers
webmaster ALL=(ALL) NOPASSWD:/usr/bin/supervisorctl,/usr/bin/rsync,/usr/bin/chmod,/usr/bin/chown
4.宝塔WebHook的使用方法
https://宝塔面板域名/hook?access_key={上图中的密码}¶m=$1 #$1是项目名称 如:mskj-test
5.进入Coding=>打开要部署的项目=>项目设置=>开发者选项=>WebHook=>新增WebHook
上图中
URL
为宝塔中获取的WebHook链接;https://宝塔面板域名/hook?access_key={上图中的密钥}¶m=$1
6.测试
- 推送代码可看到发送记录:
- 查看WebHook的日志:
👌,自动部署已完成