1.服务器配置码云
地址:
2.创建文件夹
cd /data/XXX/xxx #项目运行的目录
mkdir xxxx //创建文件夹 xxxx 代表文件夹名称随便起
3.执行git命令下载代码
cd xxxx #上一步创建的文件夹
//1.配置码云用户名
git config --global user.name "XXX" #自己的码云名称
//2. 配置码云邮箱
git config --global user.email "XXX@qq.com"
//3.对当前目录进行初始化。输入:
git init
//4.链接为的项目链接
git remote add origin https://gitee.com/xxx/xxx.git
// https://github.com/a2547/admin.git
//5.码云代码更新到本地
git pull origin master
配置码云hook
网上都有教程,自己百度一下怎么配置码云的hook吧~~~
php代码
在项目根目录创建hook.php文件,或者你可以把它封装成方法调用
<?php
//git webhook 自动部署脚本
$git = "/usr/local/git/bin/git"; //默认是用git全局变量,有的环境可能要指明具体安装路径
$branch = ""; //指定pull分支,为空就是默认分支
$savePath = "/data/wwwroot/tp6/"; //网站根目录,初次克隆确保目录为空 最好先给777权限做测试用
$gitSSHPath = "https://name:password@gitee.com/xxx/xxx.git";//代码仓库SSH地址 name 码云账号 password 码云登录密码
$password = "xxx"; //在GITEE设置的密码
$is_test = false;//测试模式,无需密码:true打开,平时false关闭
$isCloned = true;//设置是否已经Clone到本地,true:已经clone,直接pull,false:先clone.
$logPath = "/data/wwwlogs"; // 项目存放物理路径,改为你的地址
//生成日志
$logDir = $logPath . '/webhook/' . date('Ymd') . '/';
//这块需要做错文件相关权限 我直接给$logPath 777 权限了
if (!is_dir($logDir)) {
mkdir($logDir, 0755, true);
}
$logName = date('h') . '.log';
$logName = $logDir.$logName;
//如果已经clone过,则直接拉去代码
if ($isCloned) {
$requestBody = file_get_contents("php://input");
if (empty($requestBody) && empty($is_test)) {
die('send fail');
}
//解析码云发过来的JSON信息
$content = json_decode($requestBody, true);
$name = $content['project']['owner']['login']; //获取到的用户名
$email = $content['project']['owner']['email'];
//若是主分支且提交数大于0
//密码要正确
if ($content['password'] == $password ) {
if ($content['total_commits_count'] > 0 || !empty($is_test)) {
if ($content['ref'] == "refs/heads/$branch" || !$branch || !empty($is_test)) {
$git = '/usr/local/git/bin/git'; // 后台运行不能直接用git 必须更上全路径
$branch = 'https://'.$name.':password@gitee.com/xxxx/xxx.git master';
$res_log = "[ PULL START ]" . PHP_EOL;
$res_log .= shell_exec("cd /data/wwwroot/tp6") . PHP_EOL;
$cmd = "$git pull $branch 2>&1";
$res_log .= '操作时间:'.date('Y-m-d H:i:s') . PHP_EOL;
$res_log .= '用户名:'.$name ." 邮箱:".$email . PHP_EOL;
$res_log .= '向' . $content['repository']['name'] .
'项目的' . $content['ref'] . '分支pull了' .
$content['total_commits_count'] . '个commit:' . PHP_EOL;
$res_log .= $cmd . PHP_EOL;
$res_log .= "错误提示". shell_exec($cmd) . PHP_EOL;
$res_log .= "[ PULL END ]" . PHP_EOL;
$res_log .= PHP_EOL . PHP_EOL;
file_put_contents($logName , $res_log, FILE_APPEND);//写入日志
echo 'ork';
}
}
} else {
file_put_contents($logName, '密码错误!', FILE_APPEND);
echo '密码错误!!!!';
}
} else {
$res = "[ CLONE START ]" . PHP_EOL;
$res .= shell_exec("$git clone $gitSSHPath $savePath") . PHP_EOL;
$res .= "[ CLONE END ]" . PHP_EOL;
file_put_contents($logName, $res, FILE_APPEND);//写入日志
}
码云WebHook通知服务器拉取代码:
关键函数:shell_exec
注意:开放shell_exec这个php函数是非常危险的,因此切记不要在生产环境开放这个函数,更加不能用root权限去执行php。
建议将以下代码放到一个单独配置的测试用网站环境,除log日志文件以外,此环境下所有文件禁止www用户的写入和修改。
说明:我用的是root账号直接配置的,没有配置www用户,有兴趣的童鞋可以自己去找找资料
借鉴地址:
腾讯云文库centos git安装