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入门:使用阿里规范扫描代码质量
1557 0
sonar入门:使用阿里规范扫描代码质量
|
6月前
|
uml
【经验分享】如何在IDEA中快速学习|审查|复习代码工程?
在IDEA中加速工程学习与审查,提升代码质量和维护性,关键操作包括:使用"Structure"浏览工程结构,通过"Find Usages"查找类、方法或变量引用,借助"Show Local Changes As UML"展示UML图。遵循从整体到局部的UML图学习,再到具体代码的详细探索,可系统理解设计理念。详情参考[IDEA UML教程](https://blog.csdn.net/weixin_44701426/article/details/124598053)。
58 1
【经验分享】如何在IDEA中快速学习|审查|复习代码工程?
|
5月前
|
XML jenkins Java
必知的技术知识:Jenkins插件开发
必知的技术知识:Jenkins插件开发
168 0
|
5月前
|
jenkins Shell 持续交付
必知的技术知识:jenkins
必知的技术知识:jenkins
40 0
|
运维 Devops 开发工具
bug怎样算修完,浅谈团队分布式bug管理 git-poison简单易用的bug管理工具
介绍基于go-git开发实现通用化的git-poison,通过分布式源码管理bug追溯、查询。
46420 16
|
人工智能 安全 Oracle
大型网站重构指南 第1.1部分:代码静态分析 SonarQube 指南
大型网站重构指南 第1.1部分:代码静态分析 SonarQube 指南
295 0
|
消息中间件 存储 安全
这五款牛逼的 IDEA 插件,堪称代码质量检查利器!
这五款牛逼的 IDEA 插件,堪称代码质量检查利器!
|
测试技术
jira学习案例126-自动化测试
jira学习案例126-自动化测试
78 0
jira学习案例126-自动化测试
|
Java 测试技术 Maven
软件测试|Sonarqube maven项目分析
软件测试|Sonarqube maven项目分析
85 0
软件测试|Sonarqube maven项目分析
|
Java Maven
《保姆教程二》idea 的使用技巧,墙裂推荐收藏!!!疯狂提升代码开发效率和代码质量
在平常的开发中,发现一些同事对Idea 使用的不是很熟练,仅仅用来编辑,编译,不能很好的发挥Idea 的神奇。整理了下我平常用的一些技巧,希望你能从中学习到一些。开始吧
147 0
《保姆教程二》idea 的使用技巧,墙裂推荐收藏!!!疯狂提升代码开发效率和代码质量