PHP代码质量保障
团队人员水平参差不齐,编码风格百花齐放,需要一套基础的方案,统一基本的代码风格,确保基础的代码质量。
方案只能做基础的代码检查,并不能替代code review
无论如何其实还是用Jenkins+git webhook靠谱点
代码质量基础要求
- 编码风格遵循PSR2
- 绝对不可出现语法错误
- 良好的封装,减少重复代码和耦合
- 保持扩展性的同时具有具有良好的性能
方案原理
- GIT 本地 commit hook 机制,在提交的时执行任务
- 不依赖持续集成
自检流程变更
graph LR
本地--git commit-->GrumPHP
GrumPHP{GrumPHP}--成功-->测试环境
GrumPHP--失败-->本地
测试环境--发布流程-->正式环境
基础的知识储备
- [x] PHP
- [x] Composer
- [x] Git
- [x] PSR2 标准
环境依赖
依赖名称 | Composer | 备注 |
---|---|---|
GrumPHP | composer require phpro/grumphp-shim --dev | 此工具在集成项目运行,Git Commit Hook工具,Commit时执行Task |
PHPCPD | composer global require sebastian/phpcpd | PHP重复代码检测 |
PHPCS | composer global require squizlabs/php_codesniffer | PHP代码风格检测 |
PHPSTAN | composer global require phpstan/phpstan | PHP代码静态分析 |
PHPMD | composer global require phpmd/phpmd | PHP代码质量检测 |
配置
项目根目录创建YAML格式配置文件
grumphp.yml
grumphp: tasks: phpcs: standard: ['PSR2'] triggered_by: ['php','PHP'] # phpmd: # whitelist_patterns: [] # exclude: [] # report_format: text # ruleset: ['cleancode', 'codesize', 'naming','design','unusedcode'] # triggered_by: ['php'] phpstan: autoload_file: ~ configuration: ~ level: 5 force_patterns: [] ignore_patterns: [] triggered_by: ['php'] memory_limit: "-1" phpcpd: directory: ['.'] exclude: ['vendor','runtime'] names_exclude: [] regexps_exclude: [] fuzzy: false min_lines: 5 min_tokens: 70 triggered_by: ['php']
几个Task 说明
- PHPSTROM 配置
结果演示
- 'git commit -m "test"'
质量校验失败
其他扩展
- Task加入单元测试
- GitLab + Jenkins + 代码检测