Jenkins 2.x实践指南
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

5 代码质量

5.1 静态代码分析

静态代码分析是指在不运行程序的前提下,对源代码进行分析或检查,范围包括代码风格、可能出现的空指针、代码块大小、重复的代码等。

没有通过编译,静态代码分析就没有意义。所以在整个pipeline中,静态代码分析通常被安排在编译阶段之后。非编译型语言就另当别论了。

5.1.1 代码规范检查

写代码时大括号该不该换行?对于这样的问题,很容易在团队里引发“战争”。在笔者看来,像该不该换行这类代码风格的优缺点问题,不是关键问题。关键问题在于整个团队甚至整个公司所有人是否采用同一套规范。

2017年阿里巴巴发布了《阿里巴巴Java开发手册》(https://github.com/alibaba/p3c),在行业内引起了不小的轰动。《阿里巴巴Java开发手册》(下文以p3c简称)内容包括:命名风格、常量定义等。有了阿里巴巴的“光环”,公司内所有人就“代码规范”达成共识,变得更容易了。至于p3c里的规范是否真的是最好的,这是相对次要的一个问题。

但是新的问题来了,如何实施?安排一个人定期review团队成员的代码是否符合规范?这样做明显不够“DevOps”。

解决这个问题的正确思路是让机器来对规范的实施进行检查。我们的构建工具、专业的代码分析器不就是干这件事的吗?

所以,代码规范检查的方案是使用构建工具或代码分析器进行代码规范检查,如果不通过,pipeline就中止。

接下来,我们讨论具体的实施方法。

5.1.2 使用PMD进行代码规范检查

PMD(https://pmd.github.io/)是一款可扩展的静态代码分析器,它不仅可以对代码风格进行检查,还可以检查设计、多线程、性能等方面的问题。

Maven的PMD插件(https://pmd.github.io/)使我们能在Maven上使用PMD。

使用步骤如下:

(1)在Maven项目的pom.xml中加入PMD插件。

maven-pmd-plugin插件并不会自动使用p3c-pmd,需要在引入dependencies部分手动加入p3c-pmd依赖,然后在rulesets属性中引入p3c的规则。

(2)安装Jenkins PMD插件(https://pmd.github.io/)。

Jenkins PMD插件的作用是将PMD报告呈现在任务详情页中。

(3)在Jenkinsfile中加入pmd步骤。

执行完成后,可以在任务详情页看到PMD报告的链接,如图5-1所示。

图5-1 PMD报告在构建任务页面中的链接

单击链接进入报告页面,可以看到更详细的信息,如图5-2所示。

图5-2 PMD报告详情

5.1.3 各静态代码分析器之间的区别

目前每种语言基本上都有自己的静态代码分析器,比如Java语言,除PMD外,还有Check-style、FindBugs等。但是没有一款能“大一统”,实现对所有语言、所有场景的支持。

另外,同一种语言下的不同分析器,它们在功能上既有区别,又有重叠,读者需要根据自己团队的情况进行选择。但是不论选择哪款分析器,所有进行静态代码分析的地方都必须统一分析规则。比如我们决定使用阿里巴巴的开发规范,那么Maven插件、IDE插件以及后面说到的SonarQube都必须使用;否则,分析结果可能会不一致,进而影响分析结果的可信度。