git钩子对代码进行检测 - youngperson/study-100 GitHub Wiki

gitlab后台的设置

把检测代码的工具部署在服务器中去,暴露收集数据的钩子URL
在需要检测代码的项目中,设置钩子
说明:在钩子代码所在的服务器会去拉取需要检测的项目分支
         项目的代码可以在任何的服务器上,钩子代码在钩子服务器上会去拉取待检测项目代码
选择好Git触发钩子地址被执行的事件(勾选全部事件)
钩子的URL http://121.40.175.176:8699/hook/collect.php

1、环境要求

一般我们在一台测试服务器上对代码进行检测
安装lnmp、Redis、phpcs

1-1、phpcs安装

用来帮助我们检测Git提交的代码有无问题
curl -OL https://squizlabs.github.io/PHP_CodeSniffer/phpcs.phar
mv phpcs.phar /usr/local/bin/phpcs
chmod a+x  /usr/local/bin/phpcs

2、疑难杂症

2-1、怎么在代码中获取到Git提交时的数据

在gitlab后台设置好钩子的URL地址(确保这个地址能被访问到)
代码中通过输入流的方式获取到 $input = file_get_contents('php://input');
为了看下输入流的数据,我们打个日志 file_put_contents('/tmp/hook.log', $input, 8);
可以看到钩子被触发后,传递过来是数据是个json字符串(注意下不同的git版本json串可能不一样)

2-2、拿到json数据后怎么分析出问题

利用php -l进行语法检测 + 开源工具phpcs对代码质量进行检测
[参考代码](https://github.com/youngperson/study-100/tree/master/experiment/gitHook "参考代码")

2-3、分析出错误的结果怎么处理

把错误提取出来后利用邮件、短信、第三方聊天机器人等发送出来给相关的某些人

2-4、PHP处理不能一直常驻内存

我们代码是PHP,会用PHP对数据进行分析
每次在检测数据之前把之前的进程先kill掉