SonarQube实战:各种姿势的代码审查(二)

简介: 在Jenkins中集成SonarQube,各种姿势的代码审查。

一、前言


在上一篇中我们讲解了SonarQube的部署,在日常开发中SonarQube往往是基于现有的GitlabJenkins 集成配合使用的,以便在项目拉取代码后进行代码审查。若是存在多套环境的情况下,例如有开发环境、测试环境、生产环境等,我是不建议在生产环境中去进行代码审查的,一来进行重复的代码审查没有意义,二来比较浪费时间,所以建议只在开发环境开启代码审查即可。

二、在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代码质量检查"                    }                }            }        }
  • 下载Windows平台的扫描器


地址如下:


https://docs.sonarqube.org/9.4/analysis/scan/sonarscanner/



  • 将 bin 目录添加到 %PATH% 环境变量



  • 项目根目录下执行命令


注:由于微服务名称及文件夹不同,对应处理拼接处理即可。



相关文章
|
Java p3c
sonar入门:使用阿里规范扫描代码质量
sonar入门:使用阿里规范扫描代码质量
1434 0
sonar入门:使用阿里规范扫描代码质量
|
2月前
|
XML jenkins Java
必知的技术知识:Jenkins插件开发
必知的技术知识:Jenkins插件开发
67 0
|
9月前
|
前端开发 JavaScript API
wordpress插件开发踩坑记
想要使用 REST API 需要自己额外安装插件:WordPress REST API,现在 WordPress 5.0以上的版本已经默认支持 REST API了,不需要额外去安装插件
85 0
|
IDE Java 测试技术
单元测试PHPUnit入门三板斧
什么,你是程序员?什么你从来没写过单元测试用例?嗯,不要惊讶,这在国内正常的啦。有的觉得写这个玩意太耗时间了,有的干脆就不知道单元测试用例是怎么玩的。说来惭愧,小马也是在CICD的“胁迫”下开始正式涉足。
93 0
单元测试PHPUnit入门三板斧
|
人工智能 安全 Oracle
大型网站重构指南 第1.1部分:代码静态分析 SonarQube 指南
大型网站重构指南 第1.1部分:代码静态分析 SonarQube 指南
260 0
|
消息中间件 存储 安全
这五款牛逼的 IDEA 插件,堪称代码质量检查利器!
这五款牛逼的 IDEA 插件,堪称代码质量检查利器!
|
Web App开发 存储 前端开发
前端自动化测试之葵花宝典
前端自动化测试之葵花宝典
|
测试技术
jira学习案例127-传统单元测试1
jira学习案例127-传统单元测试1
69 0
jira学习案例127-传统单元测试1
|
测试技术
jira学习案例128-传统单元测试2
jira学习案例128-传统单元测试2
60 0
jira学习案例128-传统单元测试2
|
IDE Java 程序员

相关实验场景

更多