PHPMD PHP Mess Detector
它是PHP Depend的一个衍生项目,用于测量的原始指标。
PHPMD所做的是,扫描项目中可能出现的问题如:
- 可能的bug
- 次优码
- 过于复杂的表达式
- 未使用的参数、方法、属性
PHPMD是一个成熟的项目,它提供了一组不同的预定义规则
安装
composer global require --dev phpmd/phpmd
使用
phpmd app/ xml ./phpmd.xml --report-file ./reports/phpmd_result.xml --ignore-errors-on-exit --ignore-violations-on-exit
参数介绍:
格式固定为phpmd 被扫描目录 输出格式 规则集文件或规则名称(多个规则名称以逗号分隔)
后面的参数全部是option
–report-file 结果输出文件地址
–ignore-errors-on-exit phpmd发生错误时也以0码退出脚本
–ignore-violations-on-exit phpmd扫描出问题时也以0码退出脚本 主要用在自动构建的场景终止,避免打断整个项目的执行
–suffixes “php,phtml” 有效源代码文件扩展名,多个以逗号隔开
–exclude 需要忽略的目录,多个以逗号隔开
自定义规则集
复制以下内容,保存为phpmd.xml到项目,phpmd第三个参数即可使用此配置
<?xml version="1.0"?>
<ruleset name="Custom Ruleset">
<description>Custom rules for PHPMD</description>
<rule ref="rulesets/cleancode.xml">
<exclude name="StaticAccess"/>
<exclude name="ElseExpression"/>
</rule>
<rule ref="rulesets/codesize.xml"/>
<rule ref="rulesets/controversial.xml">
<exclude name="Superglobals"/>
</rule>
<rule ref="rulesets/design.xml"/>
<rule ref="rulesets/naming.xml">
<exclude name="ShortMethodName"/>
<exclude name="ShortVariable"/>
</rule>
<rule ref="rulesets/unusedcode.xml"/>
</ruleset>
结果查看
此图是利用jenkins中的插件warnings可视化的
Jenkins中的应用
构建步骤新增执行shell
#执行phpmd
if `docker exec phpfpm82 /tmp/composer/vendor/bin/phpmd >/dev/null 2>&1`; then
echo '开始执行pdepend'
else
docker exec phpfpm82 composer global require --dev phpmd/phpmd
fi
docker exec phpfpm82 /bin/sh -c "cd /var/www/workspace/$JOB_NAME/ && /tmp/composer/vendor/bin/phpmd app/ xml ./phpmd.xml --report-file ./reports/phpmd_result.xml --ignore-errors-on-exit --ignore-violations-on-exit"
输出可视化报告
查看jenkins插件之Warnings的 phpmd一章
PHP质量工具系列
TOP 6 PHP代码质量工具
php质量工具系列之PHPCPD
PHP质量工具系列之phpunit
PHP质量工具系列之xhprof
PHP质量工具系列之php_CodeSniffer
php质量工具系列之 Owasp Dependency-Check
php质量工具系列之PHPStan
php质量工具系列之paslm
php质量工具系列之phploc
SBOM生成之CycloneDX
CI/CD之Jenkins插件使用系列
jenkins插件之xunit
jenkins插件之Warnings
jenkins插件之dependency-check
jenkins插件之plot