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标准,因此我们的图表只显示一个问题。
页面下方还有一个图表,它结合了来自3个工具的数据。CodeSniffer是其中之一。
要查看问题所在位置,您可以单击最新构建的左侧菜单中的“checkstyle warnings”,或者单击特定构建,然后单击该特定构建的“checkstyle warnings”。
在此页面上,您可以清楚地看到问题的描述。请注意,您可以使用多个过滤器。在顶部栏中,您可以清楚地看到有多少问题是新的,有多少问题已修复。您可以单击数字以清楚地查看更改。在摘要中,您可以快速查看按优先级分类的问题。
PHP MD
MD代表Mess Detector(混乱检测器)。此工具尝试指示代码中的几个问题。这可能是潜在的错误、未使用的代码或复杂的方法。有关可用检查的完整列表,您可以查看此页面。请注意,我们并非检查每个规则。您可以在phpmd.xml文件中定义要检查的规则。
与PHP CodeSniffer一样,我们在项目视图页面上看到一个图表,该图表指示我们的混乱检测如何随着时间的推移而进展。
要找出问题所在,您可以单击左侧菜单中的“pmd warnings”以转到最新构建。如果您希望查看不同的构建,请单击一个构建,然后选择“pmd warnings”。您将到达一个类似于PHP CodeSniffer页面的页面。
在顶部,您可以再次看到有多少问题是新的,有多少问题已修复。除此之外,您还可以看到每个问题的优先级。
在详细信息页面中,您可以获得有关在何处找到问题的更多信息。有许多选项卡可用于以不同的方式提供相同的信息。例如,您可以单击“types”以了解有关每种类型的更多信息。
如您所见,“UnusedFormalParameter”是我们最大的问题。通过单击它,我们将再次看到哪些文件有未使用的参数。
PHP CPD
CPD代表Copy Paste Detector(复制粘贴检测器)。此工具将分析所有代码并查找多个重复行。如果您有很多重复行,则可能意味着您应该重写某些部分,以便在多个类之间共享逻辑。在项目视图页面上,我们将再次看到所有构建中的总体进度。
在左侧菜单中,我们可以单击“duplicate code”以获取所发现问题的概述。与之前一样,单击构建以获取有关该构建的更多信息。您会注意到概述看起来与之前的页面类似。让我们单击“details”选项卡以获取更多信息。
如您所见,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已转换为两个图像。
我建议您阅读此工具的官方文档以充分理解这两个图表。有关金字塔的更多信息,您可以查看此链接。有关抽象不稳定性图表的更多信息,您可以查看此链接。
您可以通过单击特定构建,然后在左侧菜单中选择“JDepend”来获取更多详细信息。您将获得如下概述。
此页面的解释也相当庞大而复杂,因此我将您引导至官方文档,其中对所有内容进行了解释。
PHPLOC
PHPLOC是一个快速测量项目大小的工具。它向您显示代码的总行数、静态方法的总数等。在左侧菜单中,您可以单击“plots”以获取此工具的结果。您可以使用11个图表来查找此信息。下面,您将看到一个图表的屏幕截图,该图表指示代码和注释的总行数以及方法、类、特性和函数的总数。
PHPUnit
Jenkins 中的大量统计数据是由 PHPUnit 生成的。仅在概述中,您将看到由 PHPUnit 数据生成的 3 个图表。
第一个图表指示有多少代码被测试覆盖。在本例中,为 71.1%。为了生成此覆盖率,后台使用了 xdebug。
第二个图表指示您的 CRAP 水平。CRAP 代表更改风险分析和预测。通过检查代码的复杂性以及对代码执行的测试量来计算 CRAP。如果您浏览了 PHP MD 规则,您可能已经注意到 PHP MD 也能够检查代码的复杂性,但没有考虑单元测试。请阅读此处以了解 PHP MD 如何计算您的复杂性。
最后的图表显示了有多少测试成功以及有多少测试失败。在本例中,它们都成功了。
在我们的左侧栏菜单中,我们有两个由 PHPUnit 生成的项目。第一个是 Crap。在此页面上,您可以看到几个图表的概述,这些图表指示您当前的 CRAP 水平有多高。在底部,您实际上会看到哪些方法被标记为 CRAP。您会注意到一列指示覆盖率和复杂性。
第二个菜单项是“clover HTML report”。在此页面中,您可以按目录概述有多少内容被您的单元测试覆盖。
您可以单击目录以深入了解您的源代码。如果您到达一个文件,您可以打开该文件并逐行查看有多少内容被覆盖。使用颜色,它指示哪些部分正在测试,哪些部分没有测试。将鼠标悬停在一行上会指示您的单元测试已调用该行多少次。
在本例中,我们可以清楚地看到 if 语句中的部分没有被单元测试调用。在本例中这是正确的。此方法只执行 GET 请求,而不执行 POST 请求。如果我们在单元测试中实现 POST 请求,则此 if 语句将被标记为绿色。这样,您可以轻松发现单元测试中任何缺失的部分。
PHPDox
有很多工具可以根据您的代码和注释生成文档。PHPDox 只是另一个可以为您执行此任务的工具。在左侧菜单中,您可以单击“API Documentation”以转到您的文档。PHPDox 的好处是它还包括所有其他工具的结果。
通过顶部的导航,您可以获得所有类的概述,但您也可以深入研究一个类并获得所有方法和描述的概述。您还可以查看文件的历史记录和源代码。
其他页面
除了我们在之前的文章中设置的工具外,Jenkins还会为您收集其他信息。我们安装的违规插件会创建一个额外的页面,该页面显示PHP CodeSniffer、PHP MD和PHP CPD的概述。
您还可以单击特定构建,并在左侧菜单中找到名为“changes”的菜单项。如果您转到此页面,您将看到在先前构建和此构建之间进行的所有提交的概述。如果未进行任何更改,则页面将为空白。
结论
在本文中,我们仔细研究了从所有工具获得的指标类型。您检索到的所有信息也可以在命令行上检索。Jenkins 的优势在于您可以创建图表和概述,这些图表和概述可以更好地表示问题。
在最后一部分中,我们将更换一些工具并添加一些额外的指标。我们还将研究如何分析我们的 CSS、JavaScript 和 HTML 代码。
(此处省略FAQ部分,因为FAQ部分内容与文章主体内容重复性较高,且篇幅较长,为了避免重复,此处予以省略。)
以上是与Jenkins分析PHP项目的详细内容。更多信息请关注PHP中文网其他相关文章!