配置码云的webhook,git自动更新

第二篇博客,时间跨度比较大,博客内容也跨的很大。

今天的博客是用来记录我昨天布置码云自动更新钩子时遇到的坑,或者说部署步骤。
本文部署的为PHP环境,且我是做PHP的,所以 hook 文件使用PHP写的。
所有操作默认 root 用户

一、服务器

  1. 安装 git (不会自行百度吧,直接 yum 就行)。
    • yum -y install git
    • git --version
  2. 首先将你的项目 clone 到你的服务器(这一步不会自行百度吧,emm)
    • git chone project.git
  3. 配置git免密
    • vim /etc/profile
    • 在最后一行加入
      export PATH=$PATH:/usr/local/git/bin
    • 让该配置文件立即生效
      source /etc/profile
  4. 更新 git 代码,记住账号密码
    • 进入到项目根目录(包含 .git)
    • 执行 git config --global credential.helper store
    • 执行 git pull
    • 执行完后再次执行一下 git pull
    • 确认免密配置成功
  5. 部署 hook.php 文件到项目根目录
    • cd 你的项目根目录
    • vim hook.php 应该没有重名文件,如果你项目里已经有这个文件就换个名字
    • 按 i 按 i 按 i ,一定要按 i 进入编辑模式
    • 复制下面脚本粘贴进去
    • 确认浏览器可直接访问

hook.hp

0) {

    $res = PHP_EOL."pull start --------".PHP_EOL;

    // 执行命令
    $command = "cd {$savePath} && sudo git pull";
    $res .= '命令: ' . $command . PHP_EOL;
    exec($command, $output, $return_var);
    $res .= json_encode($output) . PHP_EOL . json_encode($return_var) . PHP_EOL;

    $res_log = '-------------------------'.PHP_EOL;
    $res_log .= $content['user_name'] . ' 在' . date('Y-m-d H:i:s') . '向' . $content['repository']['name'] . '项目的' . $content['ref'] . '分支push了' . $content['total_commits_count'] . '个commit:';
    $res_log .= $res.PHP_EOL;
    $res_log .= "pull end --------".PHP_EOL;

    $logDir = $savePath  . '/../gitlogs/webhook/' . date('Ymd') . '/';
    if (!is_dir($logDir)) {
        mkdir($logDir, 0755, true);
    }
    $logFile = date('h') . '.log';

    file_put_contents($logDir . $logFile, $res_log . PHP_EOL, FILE_APPEND);//写入日志到log文件中
    die('请查看' . $logDir . $logFile . '文件');
}

die('Already up-to-date.');
?>
  1. 确认脚本可执行,需要给当前 web用户,即php执行用户添加 sudo 免密,因为脚本在执行时需要权限,sudo 哪怕没有密码也需要输入。(这一步是一个大坑,很大很大的那种)
    • 我的为centOs,别的系统需要自行查找相对应的文件(sudo 权限文件)
    • vim /etc/sudoers
    • 进入后找到 Allow root to run any commands anywhere
      权限配置
    • 将图中 nignx 换为你的 web用户即可。
    • 因为这个文件时只读文件需要 wq! 强制保存

二、码云

  1. 进入项目管理,找到webhook
    配置码云的webhook,git自动更新_第1张图片
  2. 添加 web hook
    配置码云的webhook,git自动更新_第2张图片
    配置码云的webhook,git自动更新_第3张图片
  3. 添加完成后可以点击测试,查看是否有返回值(图中最后一次请求结果)。
  4. 没有也别慌,根据脚本中的 log 文件查看返回结果
    配置码云的webhook,git自动更新_第4张图片

三、结束

  • 如果 log 出现了什么错误,可自行根据错误信息进行排查,或者留言给我。因为使用 root 用户的话, 从上到下根据顺序执行下来,因为是没有什么问题的。我之所以把这么简单的东西还要写一篇博客,是因为服务器最后一步,因为这个权限问题,我折腾了好久,写这篇博客也算是给自己提个醒!!!
  • 可能好多人看完要说一个 sudo 的权限问题,有什么好写的,那我要告诉,最开始我不知道要 sudo git pull,你可以不用 sudo 去试一下,恩。。。
  • 最后感谢您查看我的博客, 如果哪里出现了错误,或者不对的地方欢迎指出。
  • 欢迎大家留言讨论~~~

你可能感兴趣的:(git,git,git,自动更新,webhook,码云,自动更新脚本)