目的:不用每次代码git提交以后,再去服务器pull一次。
比设置定时任务的好处是:不用一直请求,而是push时触发
具体步骤:
1. 码云上建库
2. 服务器上git配置
2.1安装git
2.1.1、yum install curl-devel expat-devel gettext-devel \
openssl-devel zlib-devel
安装必备库
2.1.2、yum -y install git-core
安装git核心版
2.1.3、git --version
查看是否安装成功
2.2 配置git
2.2.1、git config --global user.name "xxx"
2.2.2、git config --global user.email
xxx@xxx.com
2.3. 切换到要存放项目是目录
cd /home/wwwroot
2.4. 克隆代码
2.4.1、git clone git@gitee.com:xxx/xxx.git mytest.xxx.com-test
ps: 地址分为HTTPS和SSH,如果用SSH需要生成公钥,然后添加到码云的公钥列表里
默认创建的项目文件夹是码云上的项目名称,需要修改要在地址后面加一个空格和要自定义的名字
git clone git@gitee.com:xxx/xxx.git mytest.xxx.com
2.4.2、生成公钥
ssh-keygen -t rsa -C "xxx@xxx.cn"
执行完命令会输入存放公钥的文件夹,如:/root/.ssh/
3. 参考链接
Gitee码云通过WebHooks实现自动同步代码部署
4. 问题解决
PHP shell_exec或exec执行权限问题
设置让php能够以root权限来执行exec() 或者 shell_exec()
将 PHP 的执行用户加到 sudo 免密输入的列表中
主要还是权限的问题,最好用 sudo git pull
修改配置以后需要重启 php-fpm 或 Nginx
chmod -R 777 /home/cookiex/abc
其他参考
PHP shell_exec或exec执行权限问题
实际上执行的命令:
cd /home/wwwroot/mytest.xxx.com/ && git pull
重启Nginx
service nginx start
重启PHP-fpm
kill -USR2 `cat /usr/local/php/var/run/php-fpm.pid`
或
service php-fpm restart
如果遇到手动执行git pull 报错 Please, commit your changes or stash them before you can merge
使用这个命令
git reset --hard
git pull
解决问题的思路和思考:
PHP代码执行不成功,手动通过xshell执行命令,看是否提示错误
如果没有错误,查看是否用户权限问题,PHP执行默认www用户或别的,xshell是root用户
写日志错误,文件夹没有权限
shell_exec函数执行错误, 修改PHP配置文件,默认是禁用此类函数
多查资料多尝试多比较多总结多思考,量变引发质变
参考代码: