vi /etc/sudoers
NOTICE:以下环境仅适用于测试服务器,基于安全性考虑,请勿在正式服务器和开发环境使用。
前置条件
Git库:阿里云code
nginx/php-fpm 所属组和用户 :nginxuser
服务器:LNMP
1.给nginxuser 设置sudo权限
root@ms:vi souders
#添加 nginxuser ALL=(ALL:ALL) NOPASSWD:ALL
2.在项目目录下从Git库获取项目
#打开项目目录
cd /var/www/html/hooks
#创建钩子文件,单独存在于服务器与Git项目不同
mkdir hook
touch index.php
#克隆项目
git clone https://code.aliyun.com/Marhal/hooks.git
#更改用户和权限
chown -R nginxuser:nginxuser hooks/
#根据自己的情况去设置权限
chmod -R 777 hooks/
3.编写钩子文件index.php上传至服务器
<?php
$temp = file_get_contents("php://input",true);
$msg = date('Y-m-d H:i:s',time());
if(empty($temp)){
echo 'access defind';
//file_put_contents("./hooks.log", "access defind $msg"."\r\n",FILE_APPEND);
exit();
}$params = json_decode($temp,true);
//file_put_contents("./hooks.log", '参数'.json_encode($params)." $msg"."\r\n",FILE_APPEND);
//设置用户组 可以设置多个用户
$user = array('Marhal');
if(!isset($params['user_name']) && !in_array($params['user_name'],$user)){
echo 'user_name error,access defind';
//file_put_contents("./hooks.log", "user_name error,access defind $msg"."\r\n",FILE_APPEND);
exit();
}
//项目根目录
$root = "/var/www/html/hooks";//git仓库地址
$repo = "https://code.aliyun.com/Marhal/hooks.git";//执行指令
echo shell_exec("cd $root && sudo git pull $repo");echo shell_exec("sudo chown -R www-data:www-data $root");
4. 项目结构如下
5.永久设置git账户
切换至nginxuser 然后进入项目目录执行
cd /var/www/html/hooks
git config --global credential.helper store
接着继续执行
sudo git pull
按照提示系统会提示输入用户名和密码,输过这一次,以后就不用了。
6.在git库项目设置中写入自己的钩子文件路径
然后在本地修改git项目,提交后,代码会在git库和服务器同步。