当前位置: 首页 > news >正文

php质量工具系列之PHPCPD

PHPCPD 用于检测重复代码,直观的说就是复制粘贴再稍微改改
该工具作者已经 停止维护

安装

composer global require --dev sebastian/phpcpd

执行

phpcpd --log-pmd phpcpd_result.xml ./app

参数介绍 --log-pmd 将结果保存在phpcpd_result.xml 中
./app 是phpcpd扫描的项目目录
–suffix 指定扫描的文件后缀,可以出现多次以便指定多个后缀
–exclude 无需扫描的路径,也可出现多次指定多个路径

结果

标明那个文件的多少行到多少行是重复的
在这里插入图片描述

Jenkins中的使用

在项目构建步骤中增加 执行shell

#执行phpcpd
if `docker exec phpfpm82 /tmp/composer/vendor/bin/phpcpd >/dev/null 2>&1`; thenecho '开始执行phpcpd'
elsedocker exec phpfpm82 composer global require --dev sebastian/phpcpd
fidocker exec phpfpm82 /bin/sh -c "cd /var/www/workspace/$JOB_NAME/ && /tmp/composer/vendor/bin/phpcpd --log-pmd reports/phpcpd_result.xml ./app"

可视化结果

jenkins插件 DRY 已经停止下载,所以没有可视化的界面可用,具体见 https://plugins.jenkins.io/dry/

看到这里了,点个赞再走吧

PHP质量工具系列

PHP/JS质量工具,安全工具,Jenkins插件 总结
TOP 6 PHP代码质量工具
PHP质量工具系列之php-depend
PHP质量工具系列之phpmd
PHP质量工具系列之phpcpd
PHP质量工具系列之phploc
PHP质量工具系列之paslm
PHP质量工具系列之phpstan
PHP质量工具系列之Owasp dependency-check
PHP质量工具系列之php_codesniffer
PHP质量工具系列之phpunit
PHP质量工具系列之xhprof
SBOM生成之CycloneDX

CI/CD之Jenkins插件使用系列

jenkins插件之Jdepend
jenkins插件之plot
jenkins插件之dependency-check
jenkins插件之Warnings
jenkins插件之xunit

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 论文中eps格式图片制作
  • 如何利用langchian调用百度大模型API
  • c++进阶——继承
  • 数据库管理工具——DBeaver简介
  • 51单片机独立按键控制LED灯,按键按一次亮,再按一次灭
  • Jira的原理及应用详解(五)
  • 基于Python+Flask框架实现的新冠疫情可视化的设计与实现
  • Linux-用户管理与软件管理
  • 14-特殊函数——静态函数、递归函数、函数指针、回调函数、内联函数、变参函数
  • 神经网络 torch.nn---Convolution Layers
  • 深入理解交叉熵损失 CrossEntropyLoss - CrossEntropyLoss
  • 深入ES6:解锁 JavaScript 类与继承的高级玩法
  • KUKA机器人中断编程详细教程1—了解中断
  • MySQL使用
  • CSS学习|css三种导入方式、基本选择器、层次选择器、结构伪类选择器、属性选择器、字体样式、文本样式
  • (三)从jvm层面了解线程的启动和停止
  • 〔开发系列〕一次关于小程序开发的深度总结
  • export和import的用法总结
  • javascript数组去重/查找/插入/删除
  • Java知识点总结(JDBC-连接步骤及CRUD)
  • JS正则表达式精简教程(JavaScript RegExp 对象)
  • log4j2输出到kafka
  • react-native 安卓真机环境搭建
  • 读懂package.json -- 依赖管理
  • 对象管理器(defineProperty)学习笔记
  • 利用DataURL技术在网页上显示图片
  • 前端存储 - localStorage
  • 浅析微信支付:申请退款、退款回调接口、查询退款
  • 十年未变!安全,谁之责?(下)
  • 数据仓库的几种建模方法
  • 推荐一个React的管理后台框架
  • 微信小程序--------语音识别(前端自己也能玩)
  • 新手搭建网站的主要流程
  • 译米田引理
  • Semaphore
  • 关于Android全面屏虚拟导航栏的适配总结
  • 进程与线程(三)——进程/线程间通信
  • ​无人机石油管道巡检方案新亮点:灵活准确又高效
  • # 日期待t_最值得等的SUV奥迪Q9:空间比MPV还大,或搭4.0T,香
  • #### golang中【堆】的使用及底层 ####
  • ()、[]、{}、(())、[[]]命令替换
  • (01)ORB-SLAM2源码无死角解析-(66) BA优化(g2o)→闭环线程:Optimizer::GlobalBundleAdjustemnt→全局优化
  • (1)svelte 教程:hello world
  • (2015)JS ES6 必知的十个 特性
  • (DFS + 剪枝)【洛谷P1731】 [NOI1999] 生日蛋糕
  • (第一天)包装对象、作用域、创建对象
  • (附源码)spring boot北京冬奥会志愿者报名系统 毕业设计 150947
  • (每日持续更新)jdk api之FileReader基础、应用、实战
  • (三)Kafka 监控之 Streams 监控(Streams Monitoring)和其他
  • (十一)c52学习之旅-动态数码管
  • (四)linux文件内容查看
  • (译)2019年前端性能优化清单 — 下篇
  • (转)PlayerPrefs在Windows下存到哪里去了?
  • (转)大型网站架构演变和知识体系
  • .NET 4.0网络开发入门之旅-- 我在“网” 中央(下)