一、前言
之前介绍过sonarqube环境的搭建,但是sonar运用是非常灵活的,可以实现CI所以本章着重讲解如何实现CI,以及在实现过程中遇到的问题

本章以Jenkins+Git+sonarqube+sonar-scanner来进行讲解

二、实现步骤

  1. 首先Jenkins环境必须要有,如果不知道的入门小白可参考搭建Jenkins环境的入门文章


  1. 通过Jenkins 首页 系统管理—>插件管理—>搜索sonarqube-scanner下载安装完成并重启Jenkins
  2. 安装完成后sonar-scanner在服务器下的路径
    /root/.jenkins/tools/hudson.plugins.sonar.SonarRunnerInstallation/sonarscanner

由于喜欢通过写脚本的方式实现,知道scanner存在位置很重要,记录一下

  1. 在scanner路径下找到conf目录打开sonar-scanner.properties文件,并添加下所示配置
#----- Default source code encoding
    sonar.sourceEncoding=UTF-8
    #配置sonarqube服务端的连接地址及登录名密码
    sonar.host.url=http://IP:9000
    sonar.login=admin
    sonar.password=admin
    #配置sonar数据库的连接池
    sonar.jdbc.username=sonar
    sonar.jdbc.password=sonarpasswordsonar.jdbc.url=jdbc:mysql://IP:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance&useSSL=false

做这些配置是由于执行scanner脚本的时候,scanner会通过配置文件定义的连接池通过服务端地址发送get请求将数据写入至sonar数据库

  1. 然后创建项目,并进行如图所示的配置,实现git参数化配置

git parameter也是Git集成的插件,自行下载,在此不多做介绍了

6.配置shell脚本进行构建

SonarQube9 支持MySQL吗_干活


脚本实现

#!/bin/bash

#刷新环境变量
source /etc/profile

#定义sonar-properties文件
sonarName=/data/sonar-project.properties
#定义sonar-scan路径
scanPath=/root/.jenkins/tools/hudson.plugins.sonar.SonarRunnerInstallation/sonarscanner/bin

#定义方法执行代码扫描
function excuteScript(){
  cd $1 && mvn clean package
  cp -r $sonarName $1
  sed -i "s/sonar.projectName=/sonar.projectName=$2/g" $1/sonar-project.properties
  sed -i "s/sonar.projectKey=/sonar.projectKey=$3/g" $1/sonar-project.properties
  $scanPath/sonar-scanner
  value=`echo $?`
  if [ $value -eq 0 ];then
    rm -rf $1/sonar-project.properties
  fi
  echo "脚本执行完成"
}

#执行方法
excuteScript $1 $2 $3

附上sonar-project.properties

#项目的key
sonar.projectKey=
#项目的名字(可以随便写,这个名字在sonar显示的)
sonar.projectName=
#项目的版本
sonar.projectVersion=1.0
#需要分析的源码的目录
sonar.sources=src/
#这是target
sonar.java.binaries=target/classes
#java语言
sonar.language=java
#编码格式
#sonar.sourceEncoding=UTF-8

7.执行构建

SonarQube9 支持MySQL吗_SonarQube9 支持MySQL吗_02

通过上述git parameter插件可实现git分支、tag参数化构建灵活性更高

8.构建完成后

SonarQube9 支持MySQL吗_质量评估_03

三、实现逻辑

SonarQube9 支持MySQL吗_质量评估_04

四、采坑须知
首先sonar-project.properties配置文件内容有几点要注意

1.sonar.projectKey的命名针对不同的项目要不同的命名否则会覆盖之前的项目,导致sonarqube客户端只是获取到一条项目的评估记录
2.sonar.projectName命名要符合项目的名称sonarqube客户端展示项目的名称通过这个命名而来的
3.sonar.java.binaries这个是我必须要着重讲的,这个不配置会报错,为什么我在脚本会运行maven对源码进行编译,是因为sonarjava高版本的必须要对源码进行编译后才能进行代码质量的扫描,否则会报错

如果向更清楚的知道scanner扫描的内容可以在运行scanner脚本后+ -X来打印更详细的日志,以及在出现报错都可以通过-X来定位具体的问题