SonarQube实战:各种姿势的代码审查(二)
在Jenkins中集成SonarQube,各种姿势的代码审查。
一、前言
在日常开发中SonarQube往往是基于现有的Gitlab、Jenkins 集成配合使用的,以便在项目拉取代码后进行代码审查。若是存在多套环境的情况下,例如有开发环境、测试环境、生产环境等,我是不建议在生产环境中去进行代码审查的,一来进行重复的代码审查没有意义,二来比较浪费时间,所以建议只在开发环境开启代码审查即可。
二、在Jenkins中集成SonarQube
2.1 在sonarQube中生成token
2.2 在Jenkins中安装SonarQube Scanner插件
2.3 在Jenkins中添加SonarQube凭证
选择Secret text 作为凭证类型,如下所示:
完成后如下所示:
2.4 在Jenkins系统配置中配置SonarQube
2.5 关闭审查结果上传 SCM 功能
三、代码审查
3.1 非流水线项目
- 新建非流水线项目
- 编写Execute shell测试脚本
内容如下:
echo "开始编译和打包"
mvn install
mvn clean package
echo "编译和打包结束"
- 添加构建步骤Execute SonarQube Scanner
内容如下:
#项目的key(自定义)
sonar.projectKey=springboot_demo
#项目名称
sonar.projectName=springboot_demo
#项目版本号
sonar.projectVersion=1.0
#需要分析的源码的目录,多个目录用英文逗号隔开
sonar.sources=src
#需要忽略的目录
sonar.exclusions=**/test/**
# 字节码文件所在位置
sonar.java.binaries=target/classes
#关闭审查结果上传到SCM 功能
sonar.scm.disabled=true
3.2 流水线项目一
- 新建流水线项目
- 项目根目录下创建Jenkins文件
内容如下:
pipeline{
agent any
stages{
stage('拉取代码'){
steps{
checkout([
$class: 'GitSCM',
branches: [
[
name: '*/master'
]
],
doGenerateSubmoduleConfigurations: false,
extensions: [
],
submoduleCfg: [
],
userRemoteConfigs: [
[
credentialsId: 'git_sshkey',
url: 'http://192.168.10.189/xiaohezi/springboot_demo2.git'
]
]
])
}
}
stage('SonarQube checking') {
steps {
script {
//引入SonarQubeScanner工具
scannerHome = tool 'sonar-scanner'
}
//引入SonarQube的服务器环境
withSonarQubeEnv('sonarqube9.4') {
sh "${scannerHome}/bin/sonar-scanner"
}
}
}
stage('编译构建') {
steps {
sh "mvn clean package -Dmaven.test.skip=true"
println('打包完成!')
}
}
}
}
注:sonar-scanner是在Jenkins全局工具中配置自动安装的。
- 项目根目录下创建sonar-project.properties文件
内容如下:
项目的key(自定义)
sonar.projectKey=springboot_demo2
#项目名称
sonar.projectName=springboot_demo2
#项目版本号
sonar.projectVersion=1.0
#需要分析的源码的目录,多个目录用英文逗号隔开
sonar.sources=src
#需要忽略的目录
sonar.exclusions=**/test/**
# 字节码文件所在位置
sonar.java.binaries=.
#关闭审查结果上传到SCM 功能
sonar.scm.disabled=true
3.3 流水线项目二
注:将脚本放在Jenkins中。
内容如下:
pipeline{
agent any
stages{
stage('拉取代码'){
steps{
checkout([
$class: 'GitSCM',
branches: [
[
name: '*/master'
]
],
doGenerateSubmoduleConfigurations: false,
extensions: [
],
submoduleCfg: [
],
userRemoteConfigs: [
[
credentialsId: 'git_sshkey',
url: 'http://192.168.10.189/xiaohezi/springboot_demo2.git'
]
]
])
}
}
stage('SonarQube checking') {
steps {
script {
//引入SonarQubeScanner工具
scannerHome = tool 'sonar-scanner'
}
//引入SonarQube的服务器环境
withSonarQubeEnv('sonarqube9.4') {
sh "${scannerHome}/bin/sonar-scanner"
}
}
}
stage('编译构建') {
steps {
sh "mvn clean package -Dmaven.test.skip=true"
println('打包完成!')
}
}
}
}
- 项目根目录下创建sonar-project.properties文件
内容如下:
#项目的key(自定义)
sonar.projectKey=springboot_demo2
#项目名称
sonar.projectName=springboot_demo2
#项目版本号
sonar.projectVersion=1.0
#需要分析的源码的目录,多个目录用英文逗号隔开
sonar.sources=src
#需要忽略的目录
sonar.exclusions=**/test/**
# 字节码文件所在位置
sonar.java.binaries=.
#关闭审查结果上传到SCM 功能
sonar.scm.disabled=true
3.4 流水线项目三(微服务项目)
微服务项目中需要在每个项目下都建立sonar-project.properties文件,在Jenkins的脚本中需要循环去checking每个微服务。
例如以下示例:
stage('sonarQube代码质量检查') {
steps {
script {
if("${params.sonarQube}".trim() == "yes") {
for (service in ServicesBuild) {
def workspace = "dayu-"
println "当前进行代码质量检查是:${service}"
if("${service}".trim() == "dayu-gateway" || "${service}".trim() == "dayu-auth" || "${service}".trim() == "dayu-admin"){
workspace = "${workspace}" + "${service}".trim().split("-")[1]
}
if("${service}".trim() == "dayu-user" || "${service}".trim() == "dayu-search" || "${service}".trim() == "dayu-report"){
workspace = "dayu-modules/" + "${workspace}" + "modules-" + "${service}".trim().split("-")[1]
}
//定义当前Jenkins的SonarQubeScanner工具
scannerHome = tool 'sonar-scanner'
//引用当前JenkinsSonarQube环境
withSonarQubeEnv('sonarqube9.4') {
sh """
cd ${workspace}
${scannerHome}/bin/sonar-scanner
"
""
}
}
}else{
println "是no,跳过sonarQube代码质量检查"
}
}
}
}
注:由于微服务名称及文件夹不同,对应处理拼接处理即可。
3.5 前端项目一
- 新建自由风格项目vue_demo
- 编写Execute shell测试脚本
内容如下:
echo "开始编译和打包"
echo "编译和打包结束"
- 添加构建步骤Execute SonarQube Scanner
内容如下:
# project属性
sonar.projectKey=vue_demo
sonar.projectName=vue_demo
sonar.projectVersion=1.0
#扫描路径
sonar.sources=.
3.5 前端项目二
有人说“不想配置这些,我只想偶尔检查一下代码质量”。“当然也有哦”。这个时候我们可以通过执行命令来检查我们的代码。
- 在SonarQube中新建项目
-
手工设置项目标识信息
-
创建令牌
-
选择构建技术
-
复制扫描命令
-
下载Windows平台的扫描器
地址如下:
https://docs.sonarqube.org/9.4/analysis/scan/sonarscanner/
- 将 bin 目录添加到 %PATH% 环境变量
- 项目根目录下执行命令