欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

服务器配置码云代码提交自动更新-入门级

程序员文章站 2022-06-11 10:07:27
...

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 "[email protected]" 
	
	//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:[email protected]/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.':[email protected]/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安装