【git钩子搭建】使用php脚本

工具

webhook实现远程服务器拉取更新内容

 

生成公钥

  • Git用户公钥

ssh-keygen -t rsa -C "[email protected]"
  
  # 然后一直回车就行
  # 生成的文件通常是 /root/.ssh/id_rsa,如果非root用户请查看提示上的路径
  • 单独的服务器用户公钥

sudo -Hu www ssh-keygen -t rsa
   
  # 服务器运行PHP的用户为www,所以Hooks文件中涉及到权限的地方都需要声明为该用户
  # 所以也就需要在Remote中加入该用户对应的公钥
  # 意思是为www用户生成公钥
  # 也是一直回车,中间会提示密钥存储位置

接下来将这两个公钥加入账户中,获取对仓库的权限

Hook文件

创建和修改目录权限:

  # 创建目录
  mkdir /mnt/wwwroot/xxxx
  # 修改目录权限
  chown -R www:www /mnt/wwwroot/xxxx

用www用户创建Hook文件,声明权限

  sudo -Hu www touch /data/wwwroot/xxxx/webhook.php

Hook文件内容

0) {

    //$res = shell_exec("cd {$path} && git fetch --all && git reset --hard origin/master ");
    //$res = shell_exec("cd {$path} && git add . && git commit -m 'commit by svn' && git pull && git push 2>&1");
    $res = shell_exec("cd {$path} && git pull origin master");

    $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:' . PHP_EOL;
    $res_log .= $res.PHP_EOL;

    file_put_contents("{$path}/log/".date('Y-m-d',time()).".txt", $res_log, FILE_APPEND);
}
?>

确保你的hook文件可以访问,例如https://test.com/hook.php ,Hook文件准备完成.

配置Remote和服务器仓库

  • 配置公钥,将之前生成的公钥文件加入到Remote仓库的SSH公钥选项中

  • 服务器仓库

  sudo -Hu www clone git@repo_address/gittest.git /自定义文件夹
  # 意思是以www用户的身份clone仓库,权限属于www用户
  • 添加WebHooks规则(本人用的阿里云,所以在阿里云操作)

在每个仓库的设置中进行设置

可以选择推送事件/标签推送事件/评论/缺陷事件/合并请求/构建事件

链接中填写外网访问服务器Hook文件的地址, 点击增加WEBHOOKS即可.

测试

在本地仓库中:

  vim test.txt
  git add .
  git commit -m "test hook"
  git push

在服务器端:

  # 查看更改是否拉取到服务器
  vim test.txt

 

你可能感兴趣的:(php)