背景

在公司开发的时候,每次不管svn还是git提交代码的时候都会对代码进行简单的自动检测。检查不了代码逻辑,但是最起码能保证整体的编码格式保持一致。

代码审核与自动构建过程

大体流程如下图

自动检查机 python 自动检测代码_自动检查机 python

 

工作流程

自动检查机 python 自动检测代码_php_02

审核流程

自动检查机 python 自动检测代码_svn_03

 

 

实践部分

PHP_CodeSniffer的安装 参考资料

pear install PHP_CodeSniffer

我直接使用了pear方式安装,简单方便很多。使用pear安装的扩展库基本上默认在php的安装目录下,比如我的:/opt/php-7.1.9/lib/php/PHP/CodeSniffer。大家可以参考下自己的安装目录。
命令行直接使用PHP_CodeSniffer如下:

phpcs test.php

设置PHP_CodeSniffer的代码规范格式。

# /opt/php-7.1.9/lib/php/PHP/CodeSniffer/src/Standards 
# 这个目录下列出了所有可以设置的格式(PSR1,PSR2,PSR12,Zend,Squiz等)
phpcs --config-set default_standard Zend

svn/git安装

这里不展开描述了,由于我在虚拟机上安装也花了一些时间,都是参考网上的资料。

将PHP_CodeSniffer集成到git/svn中
每部署一个svn项目,都会对应的配置文件,其中有个hooks文件夹,其中有pre-commit,在这个文件中加上phpcs 的命令就好了。
git的原理是一样的,都是有个hooks的文件夹,其中都有pre-commit。
差别: svn是在commit的过程中进行的自动检测,git是在git push的时候进行检测操作的。猜想应该自动代码检测肯定是集成在工程代码所在的服务端是最好的。svn commit的时候就直接访问的远程主机。但是git commit的时候是将代码保存在本地分支,只有git push的时候才是提交到远程主机,所以git就是在git push的时候进行的自动检测操作。

 

 

centos下安装PHP_CodeSniffer并配置svn钩子实现svn代码提交时进行代码规范检查

PHP_CodeSniffer:这是php的一个代码规范检查的工具, 这里是用它来实现, 在svn提交代码前, 自动进行代码规范检查, 只有检查通过, 才能正式提交

1. 安装 pear

因为 PHP_CodeSniffer 是 pear中的一个包, 需要先安装 pear
yum install php56w-pear

2. 安装 PHP_CodeSniffer, 直接使用pear命令安装

pear install PHP_CodeSniffer

3. 配置svn 钩子 pre-commit

在svn服务端的仓库目录下有个hooks目录,关于hook目录下的文件说明, 可参考: http://www.sgzhang.com/article/37.html 这里, 我们的需求是svn提交之前,使用PHP_CodeSniffer进行代码规范检查,
所以只需要修改 post-commit , 该文件是svn提交代码前会调用的脚本, 如果该脚本 exit code 大于0, svn服务器会停止提交代码, 并返回错误信息至svn客户端

这里有两种情况,

1) 如果 hooks 目录下已经有 pre-commit 文件, 只需要在 pre-commit 文件的 exit 0 之前 添加一行代码即可:

  1. /usr/bin/scripts/phpcs-svn-pre-commit --standard=PEAR --tab-width=4 "$REPOS" -t "$TXN" 1>&2 || exit 1

2) 如果hooks目录下还没有 pre-commit 文件, 需要先新建一个, 并且要把权限修改为可执行, 命令如下:

  1. touch pre-commit;
  2. chmod +x pre-commit;

然后把下面代码完整地复制到 pre-commit 文件:

  1. #!/bin/sh
  2. REPOS="$1"
  3. TXN="$2"
  4. /usr/bin/scripts/phpcs-svn-pre-commit --standard=PEAR --tab-width=4 "$REPOS" -t "$TXN" 1>&2 || exit 1
  5. exit 0