linux+nginx+gitee配置自动拉取gitee的推送

前提:
linux
php (gitee.php)
nginx 运行用户为 www

步骤一在码云上创建一个仓库,保存仓库地址
https://gitee.com/XXXX/XXXX.git

步骤二:git clone用户到服务器,将项目目录的所有者授权给www.www用户组

git clone  https://gitee.com/XXXX/XXXX.git 你的项目目录
chown -R www.www 你的项目目录

步骤三:配置credential helper,是的服务器不用一直输入账号密码进行git 操作
1、先cd到当前用户目录: cd ~
2、然后创建.git-credentials文件: vi .git-credentials
3、写入如下数据,注意,用户名和密码填上自已的:https://用户名:密码@gitee.com
4、运行如下命令: git config --global credential.helper store
5、查看~/.gitconfig,会发现多一项:
[credential]
helper = store
6、注意这里只是配置的当前用户,我php-fpm运行的用户是www(大家或许会跟我不同),所以我们需要为www也配置.git-credentials
我们把.gitconfig和.git-credentials复制到/home/www下,并设置所属用户和组为www

cp ~/.gitconfig /home/www/
cp ~/.git-credentials /home/www/
cd /home/www
chown www.www .gitconfig
chown www.www .git-credentials

步骤四:服务器上配置用户相关权限,本次以nginx为例(默认web用户是www用户)
1、默认情况下,www用户是禁止登陆的,暂时更改一下www的登录权限
vi /etc/passwd
将www用户的登录权限改掉: …/sbin/nologin >>>>> …/bin/bash
2、切换www用户身份登录,进入到步骤二的项目目录,先用git pull 拉取一下仓库代码,首次需要输入用户密码登录,之后就不用再次输入了
3、再次切换到root,将www用户还原成禁止登陆状态,即还原步骤四的第1步

步骤五:在服务器上部署拉取脚本,该脚本一定要能外网访问

<?php
/**
 * Created by PhpStorm.
 * User: Administrator
 * Date: 2020/4/26
 * Time: 10:35
 */

//本地路径
$local = '你的项目目录';
//仓库地址
$remote = 'https://gitee.com/XXXX/XXXX.gitt';

//密码
$password = '123456';//码云webhooks的密码

//获取请求参数
$request = file_get_contents('php://input');
if (empty($request)) {
    die('request is empty');
}

//验证密码是否正确
$data = json_decode($request, true);
if ($data['password'] != $password) {
    die('password is error');
}

//echo shell_exec("cd {$local} && git pull {$remote} 2>&1");
$res_log = PHP_EOL . "pull start --------" . PHP_EOL;

$shell = "cd {$local} && git pull {$remote} 2>&1";
exec($shell,$output,$res);
//$res = shell_exec($shell);
$result = $res?'成功':'失败';
if ($data['ref'] == 'refs/heads/master' && $data['total_commits_count'] > 0) {
    $res_log .= $data['user_name'] . ' 在' . date('Y-m-d H:i:s') . '向' . $data['repository']['name'] . '项目的' . $data['ref'] . '分支push了' . $data['total_commits_count'] . '个commit:';
}
$res_log .= date('Y-m-d H:i:s',time()).':';
$res_log .= $result . PHP_EOL;
$res_log .= "pull end --------" . PHP_EOL;

file_put_contents("git-webhook_log.txt", $res_log, FILE_APPEND);//写入日志到log文件中
die('done ' . date('Y-m-d H:i:s', time()));

步骤六:在码云项目里面,添加webhooks
在这里插入图片描述

步骤七:配置完可以尝试在码云上测试一下webhooks,看提示shell_exec或者exec函数是否被禁用,如被禁用则要开启

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值