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

转载自:https://mp.weixin.qq.com/s?__biz=Mzk0NzQwMzgxNQ==&mid=2247484515&idx=1&sn=d76315d91e92a4c9a77de25bf2fdf34a&chksm=c376292bf401a03d25c43d69865e1fed02688db53589fac159edd96c4185d4d384a67f140b42&cur_album_id=2779137291939315714&scene=190#rd

在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% 环境变量

  • 项目根目录下执行命令

posted @ 2023-05-12 17:04  哈喽哈喽111111  阅读(295)  评论(0编辑  收藏  举报