聊聊代码质量的保证措施
Posted 点融黑帮
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了聊聊代码质量的保证措施相关的知识,希望对你有一定的参考价值。
01
质量标准
1. 新增代码不能存在Minor及更严重级别的Issue
2. 已经存在的Major及更严重级别的Issue必须被修复
3. 新曾代码测试覆盖率不能低于项目规定阈值
4. 单元测试必须全部通过
5. 遵循统一的代码风格
02
质量检测工具
1. 静态代码检测:Checkstyle,Alibaba Coding Guidelines(基于PMD),Findbugs,SonarQube
a.Checkstyle、Findbugs使用项目预定义的规则文件,文件目录为${ProjectRoot}/codestyle/checkstyle/
b.Alibaba Coding Guidelines使用 IDE插件自带规则,gradle使用的版本是 1.3.0
c.SonarQube使用的 QualityProfile是 FindBugs + FB-Contrib
2. 基于Jacoco的单元测试覆盖率统计
3. 基于Junit的单元测试
4. 代码格式化工具
5. 符合Restful URL的规则检查(TODO)
6. 基于Jdepend的开发架构规范,尤其是各 module,package之间的依赖关系(TODO)
03
实时方案
1.开发者本地 IDE集成:
开发者在代码提交到git之前,应该在本地执行以下步骤,保证代码提交之前满足质量标准。
a. 安装插件Checkstyle,Alibaba Coding Guidelines(基于 PMD),Findbugs,SonarLint
b. 为Checkstyle,Findbugs插件指定规则文件,在项目代码的codestyle/checkstyle目录下预设了
该项目的规则文件和使用说明,以Intellij IDEA checkstyle举例
c.代码格式化使用IDE自带的formater(code style)功能,在项目代码的codestyle/formatting目录下预设了该项目的代码格式化规则文件
d.Checkstyle(View->Tool Windows->Checkstyle), Checkstyle相关信息和按钮显示在左下部分"Checkstyle scan"窗口。FindBug、SonarLint使用方式类似
e. Alibaba Coding Guidelines(Tool->Alibaba Coding Guidelines->Alibaba Coding Guidelines Analyze),相关信息和按钮显示在左下部分 "Inspection Result..."窗口,该插件的分析范围是选中的文件或者项目
f. 代码格式化,使用 IDE提供的快捷键或者菜单进行多个或者单个文件的格式化。例如:在IDEA上,可以通过快捷键 Ctrl+Alt+L,或者菜单 Code->Reformat Code格式化代码
g. 如果开发者需在IDE环境下获得完整静态代码检测XML或html报告,可以运行gradle build命令,并在 ${ProjectRoot}/build/reports/目录找到相应报告文件
2.自动化的代码质量保证和反馈
下图为点融持续交付的流程图,目前实现了从“本地IDE开发”到“合入Develop分支”部分(Restful检查和质检中心Portal除外)。
a. 实现原理
i.Bitbucket的 Parameterized Builds for Jenkins Hooks可以在 Bitbucket发生预定义操作时触发Jenkins构建,例如用户发起 pull request时
ii.Bitbucket提供了 Restful API,用于更新 pull request的状态,包括 Pipeline2构建结果、SonarQube分析结果、SonarQube Comment
iii.Jenkins的基于 Groovy的 Pepeline2提供了丰富的功能,包括构建、报告分析、API调用等
iv.SonarQube的 Stash插件可以调用 Bitbucket提供了 Restful API,将 SonarQube分析结果、
SonarQube Comment同步到 Bitbucket
b. 配置
i.项目代码
1.Gradle checkstyle、findbugs、jacoco、pmd、jdepend、sonarqube插件和规则文件:
ii.Bitbucket(项目级别的设置)
1. 代码不能直接提交到主干。否则,自动化流程将会因为代码直接提交到主干而失效
2. 设置 pull requests,要求满足以下三个条件才能 merge代码:
(1)pull request至少被一个人审(SonarQube算一个,所以这里是2个审核者)
(2)并且要修复所有SonarQube报告的Task
(3)构建必须成功
3. 设置Jenkins Hooks(Settings -> Hooks -> Parameterized BUilds for Jenkins)
Build Parameters详细列表:
NOCACHE=False
REPOSITORY=$REPOSITORY
PROJECT=$PROJECT
PRID=$PRID
BRANCH=$BRANCH
注意:Job Name 一定要和 Jenkins Job 名称保持一致,请参考关于 Jenkins 的配置示例
iii.Jenkins
1. 创建 Pipeline Job,例如:在 Sunday的 dev目录下创建 Job adminconsoleRefactorPipeline,该任务的Job Name为:Sunday/job/dev/job/adminconsoleRefactorPipeline(填到 BitBucket的 Job Name)
2. Pipeline配置从 git读取
iv.SonarQube
1. SonarQube需要依赖 mysql,SonarQube和 MySQL都可以使用 Docker安装。SonarQube要使用Stash插件,还需要以官方 SonarQube容器为基础进行扩展SonarQube 和 Mysql Docker的使用,请参考:https://hub.docker.com/_/sonarqube/
https://hub.docker.com/r/_/mysql/
Stash插件介绍和源代码,请参考:https://github.com/AmadeusITGroup/sonar-stash
2. 集成 Stash插件到自定义 Sonar Docker镜像的 Dockerfile(手动构建了 stash插件)
3. 运行 SonarQube后,使用 Admin帐号登录,设置 Stash插件,使 SonarQube可以调用 BitBucket的API,更新 Pull Request的 Preview Report和 Comment
4.Jacoco覆盖率报告和Unit Testing报告收集设置
5. 安装插件Checkstyle、Findbugs、PMD插件,获得自定义Quality Profile和更多预定义Quality Profile的功能
6. 创建新的SonarQube项目(),生成一个唯一标识项目的Key,这个Key将和项目代码中的Gradle SonarQube插件配置关联
7. Quality Profile和 Quality Gate的设置,根据质量标准进行设置SonarQube详细配置
c. 演示效果
i.提交 pull request,自动触发 Jenkins构建,BitBucket状态为正在构建
ii.构建完成之后,BitBucket的 PullRequest能看到 SonarQube Preview的报告和 Comment
iii.Jenkins显示构建的 UnitTest、CheckStyle、PMD和 Stage View等构建报告
iv.如果是执行 SonarQube的 publish模式,SonarQube会生产质量报告(这一步在部署的时候执行,pull request的时候只执行 SonarQube的 preview模式,不生成如下报告)
12
往期精彩
·
·
·
·
以上是关于聊聊代码质量的保证措施的主要内容,如果未能解决你的问题,请参考以下文章