其他博文连接
- Ubuntu Server 16.04LTS 搭建GitLab服务器
- ubuntu server 16.04 使用docker搭建jenkins和sonarqube
- Gitlab配置Gitlab-Runner实现简单的CI/CD
- Gitlab CI集成sonarqube实现静态代码检查
- gitlab CI中单元测试与集成测试的研究与实践
- GitLab持续集成持续部署(CI&CD)
文章目录
Gitlab CI集成sonarqube实现静态代码检查
配置说明
Gitlab
- 系统:Ubuntu 16.04 Server
- 内存:4G
- IP:192.168.23.100
- Dokcer Version : 18.09.0
Gitlab Runner
- 系统:Ubuntu 16.04 Server
- 内存:4G
- IP:192.168.23.102
- Dokcer Version : 18.09.0
Sonarqube
- 系统:Ubuntu 16.04 Server
- 内存:4G
- IP:192.168.23.101
- Dokcer Version : 18.09.0
Sonarqube搭建
创建一个简单的SpringBoot应用
SpringBoot应用的创建过程不描述了,可以直接看代码。
配置sonarqube
- 引入gradle依赖
这里加入一个新的.gradle文件sonarqube.gradle
作为sonarqube的相关配置,如下图所示
// file coding UTF-8
// 拆分 sonarqube,目前来看 sonarqube必须用jdk8,而我们的项目却使用的jdk7,甚至jdk6
// 使用方法:
// gradle test
// gradle -b sonarqube.gradle sonarqube
buildscript {
repositories {
mavenCentral()
}
dependencies {
// 需要jdk1.8以上,配置gradle的运行环境为1.8即可,与项目编译等级无关
// 1.1 及以下版本,要求jdk6+、gradle2, 同时也受服务器版本限制, sonar7要求jdk8+
// 1.2 及以上版本,要求jdk8+、gradle4+, 同时也受服务器版本限制
classpath "org.sonarsource.scanner.gradle:sonarqube-gradle-plugin:2.5"
}
configurations.all {
// 如果没有 'buildscript' 声明,应将 'configurations.all' 至于顶层
// for ideaUI 新版本支持手动刷新依赖包,在gradle标签页右键菜单中,点击'refresh dependencies'
// for other 手动刷新依赖包,执行 "gradle build --refresh-dependencies"
// for SNAPSHOT(changing), SNAPSHOT versions are treated as "changing" by default (if Maven repo is used)
resolutionStrategy.cacheChangingModulesFor(0, 'seconds')
// for +(加号,dynamic)
resolutionStrategy.cacheDynamicVersionsFor(0, 'seconds')
}
}
apply plugin: "org.sonarqube"
sonarqube {
properties {
property "sonar.host.url", "http://192.168.23.101:9000"
property "sonar.scm.provider", "git"
property "sonar.projectName", Helper.readParam("artifactId")
property "sonar.projectKey", Helper.readParam("artifactId")
property "sonar.projectVersion", Helper.readParam("mainVersion")
property "sonar.language", "java"
property "sonar.sourceEncoding", Helper.readSourceFileEncoding()
property "sonar.sources", "src/main/java"
property "sonar.tests", "src/test/java"
property "sonar.java.source", Helper.readParam("sourceCompatibility")
property "sonar.java.binaries", "build/classes/java/main/"
property "sonar.java.test.binaries", "build/classes/java/test/"
property "sonar.login","admin"
property "sonar.password","admin"
property "sonar.java.coveragePlugin", "jacoco"
property "sonar.jacoco.reportPaths", "$buildDir/jacoco/test.exec"
}
}
class Helper {
def static readSourceFileEncoding() {
def fileEncoding = readParam("encoding")
if (fileEncoding == null) {
fileEncoding = "UTF-8"
}
return fileEncoding
}
def static readParam(String paramKey) {
new File("build.gradle").withReader("UTF-8", ({ reader ->
while (reader.ready()) {
def line = reader.readLine()
if (line.contains("${paramKey} =")) {
def paramValue = line.substring(line.indexOf("${paramKey} =") + "${paramKey} =".length() + 1, line.length())
paramValue = paramValue.trim()
if (paramValue.startsWith("\"")
|| paramValue.startsWith("'")) {
paramValue = paramValue.substring(1, paramValue.length())
}
if (paramValue.endsWith("\"")
|| paramValue.endsWith("'")) {
paramValue = paramValue.substring(0, paramValue.length() - 1)
}
return paramValue
}
}
return null
} as Closure<String>))
}
}
- build.gradle修改如下
plugins {
id 'org.springframework.boot' version '2.1.5.RELEASE'
id 'java'
}
apply plugin: 'io.spring.dependency-management'
//jacoco是单元测试检查工具
apply plugin: "jacoco"
group 'org.virtuex'
version '1.0-SNAPSHOT'
sourceCompatibility = 1.8
repositories {
mavenCentral()
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web'
//log4j2jar包
testImplementation 'org.springframework.boot:spring-boot-starter-test'
}
- .gitlab-ci.yml脚本修改如下
image: virtuex/base_java_env:gradle-4.10.2-openjdk-7-openjdk-8-docker-18
stages:
- build
- test
before_script:
- echo "Reset JDK..."
- export JAVA_HOME=$JAVA8_HOME
- export PATH=${JAVA_HOME}/bin:$PATH
build_job:
stage: build
script:
- echo "Release build..."
- gradle build
test_job:
stage: test
script:
- echo "Tests run..."
- gradle test
- gradle jacocoTestReport
- gradle -b sonarqube.gradle sonarqube -Dsonar.analysis.mode="${MODE}" -Dsonar.gitlab.project_id=$CI_PROJECT_PATH -Dsonar.gitlab.commit_sha=$CI_COMMIT_SHA -Dsonar.gitlab.ref_name=$CI_COMMIT_REF_NAME
因为我提供的默认镜像中的Jdk默认是1.7的,这里的sonar要求1.8,所以在before_script中修改下jdk的版本
运行结果
以上代码修改完成后,提交代码到gitlab,等待一段时间后(建议使用maven私服,否则依赖下载会很慢)即可看到构建成功,结果如下图所示:
在sonarqube的Project中可以看到刚才提交的项目:
静态代码检查
在sonarqube的管理页面,点击对应的项目,即可查看到详情。点击进入详情后,能看到sonar扫描到的代码缺陷以及修改建议
这里只有一些简单的示例,如果需要其他高级功能可以自行参考官方文档或者给我留言
示例代码
请前往github:链接
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/13152.html