PHP 增量代码规范 PHPCS 通过极狐 GitLab CI 平滑落地
代码越写越规范是优秀开发者成长的必经之路,但很多人放弃了老项目,因为太不规范了,所有人停下来一起修复也要很久,而且一次改动太多难以确保可靠性。 可以借助 git diff 把本次修改的代码挑出来,实现增量扫描,但配置起来太繁琐。 有的人在持续集成里配置了规范扫描工具,报错之后需要在成千上万行的 log 里查找,降低了研发效率,最终也没能推广。 本文以 PHP 项目配置 PHPCS 扫描工具为例,讲解消灭这些问题的办法:
- 将代码规范问题显示在「合并请求页面」,大幅度提高研发效率
- 增量代码规范报告,让老项目越来越干净
PHP code sniffer(PHPCS) 是业界知名的开源扫描工具,可扫描 PSR12 等代码规范。 在项目中引入插件,并执行全量扫描:
$ composer require --dev squizlabs/php_codesniffer
$ ./vendor/bin/phpcs --standard=PSR12 app/ tests/
FILE: app/Console/Kernel.php
-------------------------------------------------------------------------------
FOUND 2 ERRORS AFFECTING 1 LINE
-------------------------------------------------------------------------------
28 | ERROR | [x] Expected at least 1 space before "."; 0 found
28 | ERROR | [x] Expected at least 1 space after "."; 0 found
-------------------------------------------------------------------------------
FILE: tests/Unit/ExampleTest.php
-------------------------------------------------------------------------------
FOUND 1 ERROR AFFECTING 1 LINE
-------------------------------------------------------------------------------
14 | ERROR | Method name "ExampleTest::test_that_true_is_true" is not in
| | camel caps format
-------------------------------------------------------------------------------
在极狐 GitLab 持续集成中执行强制扫描:
$ vi .gitlab-ci.yml
phpcs:
script:
- ./vendor/bin/phpcs --standard=PSR12 app/ tests/
当扫描工具报错,持续集成退出,想看代码规范问题,需要到 log 中查找,降低了开发效率,很多持续集成产品只做到了这一步,而极狐 GitLab 可以更进一步——采集「代码质量报告」。
在项目中引入 micheh/phpcs-gitlab,它会将 phpcs 报告转换成极狐 GitLab 标准格式,在 CI 中进行采集。
$ composer require --dev micheh/phpcs-gitlab
$ vi .gitlab-ci.yml
phpcs:
script: vendor/bin/phpcs --report=full --report-\Micheh\PhpCodeSniffer\Report\Gitlab=gl-code-quality-report.json --standard=PSR12 app/ tests/
artifacts:
reports:
codequality: gl-code-quality-report.json
可以看到在开发人员频繁使用的「合并请求」页面,直接显示了「代码规范问题」,供开发人员自助修复以及提醒评审的同事注意,提高了研发效率。
老项目第一次配置代码规范可能会出现很多错误,没关系,先将规范合并进入主干,下次修改代码发起合并请求时,极狐 GitLab 将展示「增量代码质量报告」,而无需任何复杂设置,如上图所示:代码质量在某几个位置下降了,而不是一共有多少问题。
关注【极狐GitLab】获取更多 DevOps 行业最佳实践。