首页 后端开发 php教程 与Jenkins分析PHP项目

与Jenkins分析PHP项目

Feb 19, 2025 am 11:41 AM

Jenkins:PHP项目的持续集成与交付利器

Jenkins,这款开源自动化服务器,在PHP项目的持续集成和持续交付中扮演着关键角色,它能够实时检测和解决bug,并持续反馈代码质量改进建议。

Jenkins与PHP工具集成的强大功能

Jenkins与众多PHP项目工具兼容,包括PHP CodeSniffer、PHP MD、PHP CPD、PHP Depend、PHPLOC、PHPUnit和PHPDox等,每个工具都提供独特的代码分析见解和指标。Jenkins的优势在于它能够生成图表和概览,比命令行检索更有效地呈现问题,从而更轻松地识别和解决代码中的问题。

除了已设置的工具外,Jenkins还会收集其他信息,例如PHP CodeSniffer、PHP MD和PHP CPD违规情况的概述,以及显示每次构建之间所有提交的“更改”概述。

Jenkins结果解读:项目视图和构建视图

Jenkins的结果来自不同的工具,并将放置在Jenkins GUI的不同位置。我们将浏览两个不同的页面。首先是项目视图页面,其顶部显示项目名称。在此页面上,您可以获得项目的总体概述,并可以轻松比较多个构建。您可以通过从默认概述页面单击项目来访问此页面。除了项目视图页面外,我们还有构建视图页面。您可以通过单击侧边栏中的构建编号来导航到此页面。在这里,您可以查看有关此特定构建的各种详细信息。

本文将逐步介绍每个工具及其报告内容。最后,我们还将查看Jenkins为我们收集的一些额外详细信息。由于我们多次构建相同的项目,因此我们的图表中将显示直线。在实际项目中,图表会波动。

PHP CodeSniffer

CodeSniffer是一个工具,用于检查您的代码是否符合通用规则集或您自己的自定义规则集。在本例中,我们配置了希望根据PSR2测试我们的工具。我们在build.xml文件中定义了这一点。

<arg value="--standard=PSR2" />
登录后复制

在概述页面上,您将看到一个名为“Checkstyle Trend”的图表。此图表表示每次构建中PSR2问题的数量。在我们的代码中,我们几乎完全符合PSR2标准,因此我们的图表只显示一个问题。

Analyzing a PHP Project with Jenkins

页面下方还有一个图表,它结合了来自3个工具的数据。CodeSniffer是其中之一。

要查看问题所在位置,您可以单击最新构建的左侧菜单中的“checkstyle warnings”,或者单击特定构建,然后单击该特定构建的“checkstyle warnings”。

Analyzing a PHP Project with Jenkins

在此页面上,您可以清楚地看到问题的描述。请注意,您可以使用多个过滤器。在顶部栏中,您可以清楚地看到有多少问题是新的,有多少问题已修复。您可以单击数字以清楚地查看更改。在摘要中,您可以快速查看按优先级分类的问题。

PHP MD

MD代表Mess Detector(混乱检测器)。此工具尝试指示代码中的几个问题。这可能是潜在的错误、未使用的代码或复杂的方法。有关可用检查的完整列表,您可以查看此页面。请注意,我们并非检查每个规则。您可以在phpmd.xml文件中定义要检查的规则。

与PHP CodeSniffer一样,我们在项目视图页面上看到一个图表,该图表指示我们的混乱检测如何随着时间的推移而进展。

Analyzing a PHP Project with Jenkins

要找出问题所在,您可以单击左侧菜单中的“pmd warnings”以转到最新构建。如果您希望查看不同的构建,请单击一个构建,然后选择“pmd warnings”。您将到达一个类似于PHP CodeSniffer页面的页面。

Analyzing a PHP Project with Jenkins

在顶部,您可以再次看到有多少问题是新的,有多少问题已修复。除此之外,您还可以看到每个问题的优先级。

在详细信息页面中,您可以获得有关在何处找到问题的更多信息。有许多选项卡可用于以不同的方式提供相同的信息。例如,您可以单击“types”以了解有关每种类型的更多信息。

Analyzing a PHP Project with Jenkins

如您所见,“UnusedFormalParameter”是我们最大的问题。通过单击它,我们将再次看到哪些文件有未使用的参数。

PHP CPD

CPD代表Copy Paste Detector(复制粘贴检测器)。此工具将分析所有代码并查找多个重复行。如果您有很多重复行,则可能意味着您应该重写某些部分,以便在多个类之间共享逻辑。在项目视图页面上,我们将再次看到所有构建中的总体进度。

Analyzing a PHP Project with Jenkins

在左侧菜单中,我们可以单击“duplicate code”以获取所发现问题的概述。与之前一样,单击构建以获取有关该构建的更多信息。您会注意到概述看起来与之前的页面类似。让我们单击“details”选项卡以获取更多信息。

Analyzing a PHP Project with Jenkins

如您所见,CompanyFilter类中有58行也位于UserFilter和TimeCategoryFilter类中。根据此数据,您可以决定需要某种处理所有3个类的大部分内容的BaseFilter或实现服务。解决方案取决于您的情况,PHP CPD 只告诉您它在哪里发现了问题。

PHP Depend

PHP Depend可能是最难理解的指标。PHP Depend对您的代码库执行静态代码分析。它生成2个图像和一个概述页面。您可能注意到,在项目视图页面的顶部,有一些HTML应该显示图像。

图像未显示的事实意味着您必须切换Jenkins配置中的开关。转到“manage jenkins”,然后转到“Configure Global Security”。有一个选择框,您可以使用它来配置“markup formatter”。将其设置为“Safe HTML”并保存您的设置。如果您现在返回到项目视图页面,您会注意到HTML已转换为两个图像。

Analyzing a PHP Project with Jenkins

我建议您阅读此工具的官方文档以充分理解这两个图表。有关金字塔的更多信息,您可以查看此链接。有关抽象不稳定性图表的更多信息,您可以查看此链接。

您可以通过单击特定构建,然后在左侧菜单中选择“JDepend”来获取更多详细信息。您将获得如下概述。

Analyzing a PHP Project with Jenkins

此页面的解释也相当庞大而复杂,因此我将您引导至官方文档,其中对所有内容进行了解释。

PHPLOC

PHPLOC是一个快速测量项目大小的工具。它向您显示代码的总行数、静态方法的总数等。在左侧菜单中,您可以单击“plots”以获取此工具的结果。您可以使用11个图表来查找此信息。下面,您将看到一个图表的屏幕截图,该图表指示代码和注释的总行数以及方法、类、特性和函数的总数。

Analyzing a PHP Project with Jenkins

Analyzing a PHP Project with Jenkins

PHPUnit

Jenkins 中的大量统计数据是由 PHPUnit 生成的。仅在概述中,您将看到由 PHPUnit 数据生成的 3 个图表。

Analyzing a PHP Project with Jenkins

第一个图表指示有多少代码被测试覆盖。在本例中,为 71.1%。为了生成此覆盖率,后台使用了 xdebug。

第二个图表指示您的 CRAP 水平。CRAP 代表更改风险分析和预测。通过检查代码的复杂性以及对代码执行的测试量来计算 CRAP。如果您浏览了 PHP MD 规则,您可能已经注意到 PHP MD 也能够检查代码的复杂性,但没有考虑单元测试。请阅读此处以了解 PHP MD 如何计算您的复杂性。

最后的图表显示了有多少测试成功以及有多少测试失败。在本例中,它们都成功了。

在我们的左侧栏菜单中,我们有两个由 PHPUnit 生成的项目。第一个是 Crap。在此页面上,您可以看到几个图表的概述,这些图表指示您当前的 CRAP 水平有多高。在底部,您实际上会看到哪些方法被标记为 CRAP。您会注意到一列指示覆盖率和复杂性。

第二个菜单项是“clover HTML report”。在此页面中,您可以按目录概述有多少内容被您的单元测试覆盖。

Analyzing a PHP Project with Jenkins

您可以单击目录以深入了解您的源代码。如果您到达一个文件,您可以打开该文件并逐行查看有多少内容被覆盖。使用颜色,它指示哪些部分正在测试,哪些部分没有测试。将鼠标悬停在一行上会指示您的单元测试已调用该行多少次。

Analyzing a PHP Project with Jenkins

在本例中,我们可以清楚地看到 if 语句中的部分没有被单元测试调用。在本例中这是正确的。此方法只执行 GET 请求,而不执行 POST 请求。如果我们在单元测试中实现 POST 请求,则此 if 语句将被标记为绿色。这样,您可以轻松发现单元测试中任何缺失的部分。

PHPDox

有很多工具可以根据您的代码和注释生成文档。PHPDox 只是另一个可以为您执行此任务的工具。在左侧菜单中,您可以单击“API Documentation”以转到您的文档。PHPDox 的好处是它还包括所有其他工具的结果。

Analyzing a PHP Project with Jenkins

通过顶部的导航,您可以获得所有类的概述,但您也可以深入研究一个类并获得所有方法和描述的概述。您还可以查看文件的历史记录和源代码。

Analyzing a PHP Project with Jenkins

其他页面

除了我们在之前的文章中设置的工具外,Jenkins还会为您收集其他信息。我们安装的违规插件会创建一个额外的页面,该页面显示PHP CodeSniffer、PHP MD和PHP CPD的概述。

您还可以单击特定构建,并在左侧菜单中找到名为“changes”的菜单项。如果您转到此页面,您将看到在先前构建和此构建之间进行的所有提交的概述。如果未进行任何更改,则页面将为空白。

Analyzing a PHP Project with Jenkins

结论

在本文中,我们仔细研究了从所有工具获得的指标类型。您检索到的所有信息也可以在命令行上检索。Jenkins 的优势在于您可以创建图表和概述,这些图表和概述可以更好地表示问题。

在最后一部分中,我们将更换一些工具并添加一些额外的指标。我们还将研究如何分析我们的 CSS、JavaScript 和 HTML 代码。

(此处省略FAQ部分,因为FAQ部分内容与文章主体内容重复性较高,且篇幅较长,为了避免重复,此处予以省略。)

以上是与Jenkins分析PHP项目的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

在PHP API中说明JSON Web令牌(JWT)及其用例。 在PHP API中说明JSON Web令牌(JWT)及其用例。 Apr 05, 2025 am 12:04 AM

JWT是一种基于JSON的开放标准,用于在各方之间安全地传输信息,主要用于身份验证和信息交换。1.JWT由Header、Payload和Signature三部分组成。2.JWT的工作原理包括生成JWT、验证JWT和解析Payload三个步骤。3.在PHP中使用JWT进行身份验证时,可以生成和验证JWT,并在高级用法中包含用户角色和权限信息。4.常见错误包括签名验证失败、令牌过期和Payload过大,调试技巧包括使用调试工具和日志记录。5.性能优化和最佳实践包括使用合适的签名算法、合理设置有效期、

会话如何劫持工作,如何在PHP中减轻它? 会话如何劫持工作,如何在PHP中减轻它? Apr 06, 2025 am 12:02 AM

会话劫持可以通过以下步骤实现:1.获取会话ID,2.使用会话ID,3.保持会话活跃。在PHP中防范会话劫持的方法包括:1.使用session_regenerate_id()函数重新生成会话ID,2.通过数据库存储会话数据,3.确保所有会话数据通过HTTPS传输。

描述扎实的原则及其如何应用于PHP的开发。 描述扎实的原则及其如何应用于PHP的开发。 Apr 03, 2025 am 12:04 AM

SOLID原则在PHP开发中的应用包括:1.单一职责原则(SRP):每个类只负责一个功能。2.开闭原则(OCP):通过扩展而非修改实现变化。3.里氏替换原则(LSP):子类可替换基类而不影响程序正确性。4.接口隔离原则(ISP):使用细粒度接口避免依赖不使用的方法。5.依赖倒置原则(DIP):高低层次模块都依赖于抽象,通过依赖注入实现。

在PHPStorm中如何进行CLI模式的调试? 在PHPStorm中如何进行CLI模式的调试? Apr 01, 2025 pm 02:57 PM

在PHPStorm中如何进行CLI模式的调试?在使用PHPStorm进行开发时,有时我们需要在命令行界面(CLI)模式下调试PHP�...

框架安全功能:防止漏洞。 框架安全功能:防止漏洞。 Mar 28, 2025 pm 05:11 PM

文章讨论了框架中的基本安全功能,以防止漏洞,包括输入验证,身份验证和常规更新。

如何在系统重启后自动设置unixsocket的权限? 如何在系统重启后自动设置unixsocket的权限? Mar 31, 2025 pm 11:54 PM

如何在系统重启后自动设置unixsocket的权限每次系统重启后,我们都需要执行以下命令来修改unixsocket的权限:sudo...

解释PHP中的晚期静态绑定(静态::)。 解释PHP中的晚期静态绑定(静态::)。 Apr 03, 2025 am 12:04 AM

静态绑定(static::)在PHP中实现晚期静态绑定(LSB),允许在静态上下文中引用调用类而非定义类。1)解析过程在运行时进行,2)在继承关系中向上查找调用类,3)可能带来性能开销。

See all articles