1 前言
本文想要达到的目地:
在gradle项目(JAVA)中集成sonarqube,将分析结果上传到sonar中,并在WEB端展现。
maven项目集成sonarqube倒是挺简单的,最近接触gradle项目,要求集成sonarqube做代码静态分析,费了一番功夫才整出来,现在此记录,以备后查。
PS: 以前接触的都是maven项目,最近新接触gradle,对sonarqube也了解不深,所以本文只讲操作不讲原理。
2 在gradle项目中启用sonarqube
就像把大象放进冰箱要经历三步一样,gradle项目中集成sonarqube做代码分析同样是三步:
1. 在build.gradle中添加配置,启动sonarqube插件;
2. 配置sonar系统认证的权限信息,以便将分析结果上传到sonar中展示;
3. 运行分析命令:gradle sonarqube;
2.1 配置build.gradle
buildscript {
repositories {
# 添加库路径,实际项目中原来此处可能还有别的库,在此位置追加。追加库的位置可能会导致项目报错(找不到某些依赖的错误),先插入到最前面不行再往后一行行移动,一个个的试,具体原因还没来得及探究
maven {url "https://plugins.gradle.org/m2/"}
}
dependencies {
# 在此位置追加以下依赖行
classpath("org.sonarsource.scanner.gradle:sonarqube-gradle-plugin:2.6-rc1")
}
}
# plugins段放置位置有要示,放在buildscript段前面会报错,放到文件最末尾也报错,紧跟buildscript放置OK,其余位置没有偿试
plugins {
# 添加插件信息
id "org.sonarqube" version "2.6-rc1"
}
# 声明插件
apply plugin: "org.sonarqube"
# 如果项目不存在嵌套的子项目,则以上配置即可
# 如果项目存在嵌套的子项目,还要添加以下配置
sonarqube {
properties {
property "sonar.sourceEncoding", "UTF-8"
}
}
subprojects {
# 在subprojects段中添加以下块内容
sonarqube {
properties {
# 如果同时存在src/main/java与src/main/test,则要按以下方式设置,如果没有单元测试用例目录test,也可以只填写src
property "sonar.sources", "src/main/java"
}
}
}
2.2 配置sonar认证权限信息
- 连接sonar的认证信息也可以在每个项目的build.gradle文件中配置,但1来是在源代码中直接包含用户名与密码不安全;2来是如果将来sonar服务器有迁移或IP变更,或是密码有修改需要每个项目去单独修改不够灵活;
- 但如果存在多个sonar服务,不同项目的分析结果需要存放到不同的sonar中,则必须在build.gradle中配置认证信息
新建文件:~/.gradle/gradle.properties,内容如下:
systemProp.sonar.host.url=http://x.x.x.x:9000
systemProp.sonar.login=username
systemProp.sonar.password=password
2.3 运行分析命令:gradle sonarqube
# 运行分析命令
gradle sonarqube
# 成功后可以登陆http://x.x.x.x:9000查看分析结果
3 与jenkins集成
jenkins + gradle + sonarqube集成,网上的教程大多是在jenkins中安装SonarQube Scanner for Jenkins插件,官方教程见此网址:
https://docs.sonarqube.org/display/SCAN/Analyzing+with+SonarQube+Scanner+for+Jenkins
此处提供另一种不采用SonarQube Scanner for Jenkins插件的方式。
步骤:
1. 不考虑sonar,先实现jenkins与gradle集成(整体较简单,不提供具体步骤);
2. 按照【在gradle项目中启用sonarqube】中的2.1与2.2配置;
3. 在settings.gradle定义rootProject.name(如果没有定义根项目名称,则多个项目在sonar中展示的项目名称都会是workspace,每次运行完成后结果会互相覆盖掉);
4. 修改jenkins job配置,原来构建运行的task为:【clean build】,修改为【clean sonarqube build】
此种方式对jenkins job修改较小,适合微服务构架中众多小项目的情况,唯一需要修改jenkins job配置的步骤4可以用脚本批量替换