美文网首页
码云gitee利用PHP脚本拉取实现自动部署(可用于生产环境)

码云gitee利用PHP脚本拉取实现自动部署(可用于生产环境)

作者: 科科分享 | 来源:发表于2018-07-19 00:23 被阅读0次

服务器环境

*PHP 5.4
*Nginx 1.8.0
*GIT version 2.9.4(#git --version)

一、添加 Web Hooks

我的码云 -> 点击相应项目A -> 管理-> WebHooks 设置 -> 添加;具体填写内容如下图所示


WebHooks 设置

二、准备PHP脚本(必须保证浏览器可访问)

不多说,直接帖码。修改好自定义选项,上传服务器后到gitee后台点击测试验证是否通过。

<?php
/**
 * 自动更新钩子
 * 修改验证码及项目路径即可使用,
 * 修改项如下:
 * 1、您的自定义密码
 * 2、/home/wwwroot/app您的项目A路径
 * [冲浪蜗牛](https://www.jianshu.com/u/4913fc14f7fb)
 **/

// 接收码云POST过来的信息
$json = $GLOBALS['HTTP_RAW_POST_DATA'];
$data = json_decode($json, true);

// 打开网站目录下的hooks.log文件 需要在服务器上创建 并给写权限
$fs = fopen('./../../logs/webhooks_pull.log', 'a');
fwrite($fs, '================ Update Start ===============' . PHP_EOL . PHP_EOL);
// 自定义密码 用于验证 与码云后台设置保持一致
$access_token = '您的自定义密码';
$client_token = $data['password'];

// 请求ip
$client_ip = $_SERVER['REMOTE_ADDR'];
// 把请求的IP和时间写进log
fwrite($fs, 'Request on [' . date("Y-m-d H:i:s") . '] from [' . $client_ip . ']' . PHP_EOL);

// 验证token 有错就写进日志并退出
if ($client_token !== $access_token) {
    echo "error 403";
    fwrite($fs, "Invalid token [{$client_token}]" . PHP_EOL);
    $fs and fclose($fs);
    exit(0);
}

// 如果有需要 可以打开下面,把传送过来的信息写进log 可用于调试,测试成功后注释即可
// fwrite($fs, 'Data: ' . print_r($data, true) . PHP_EOL); 

// 执行shell命令并把返回信息写进日志
exec('cd /home/wwwroot/app; git pull 2<&1; chown -R www:www /home/wwwroot/app/*;', $output);
fwrite($fs, 'Info:' . print_r($output, true) . PHP_EOL);
fwrite($fs, PHP_EOL . '================ Update End ===============' . PHP_EOL . PHP_EOL);
$fs and fclose($fs);

// 调试时打开
// echo json_encode($output);

三、服务器的设置 (重要)

如果没有给777权限,pull时会报各种权限错误(除非你对用户及用户组权限设置的很到位并可以解决站点www用户组权限的冲突),当然也可以将项目A中的.git目录权限都设置为777,如下命令是我当前使用的具体操作。

// 为了相对安全,我这里针对需要777权限的目录进行设置
cd 项目A/.git
# cd .git
chmod -R 777 FETCH_HEAD
chmod -R 777 ./objects
chmod -R 777 ./refs
chmod -R 777 ./logs

注意: 是.git目录

因为PHP脚本涉及到shell命令执行所有需要php开启exec命令权限
php.ini:


开启exec权限,删除红框中的内容保存后重启php服务即可

四、可以认真写代码了

执行push的会触发WebHooks,同时推送消息给项目A中WebHooks 设置的请求地址,最后完成服务器的git pull。

git status
# git pull
git push

如果还没有本地初始化项目,可以根据 码云gitee本地初始化项目基本设置 这篇进行操作。
至此完成码云gitee自动部署。
如在操作过程中遇到问题,欢迎留言。

相关文章

网友评论

      本文标题:码云gitee利用PHP脚本拉取实现自动部署(可用于生产环境)

      本文链接:https://www.haomeiwen.com/subject/awzapftx.html