一、系统环境

组件

版本

Ubuntu

20.04

Jenkins

2.319.1

SonarQube

8.9.7-community

JDK

openjdk 1.8.0_312

官方说明-安装环境

二、数据挂载目录

# 新建PostgreSQL挂载目录
mkdir -p ~/soft/postgres
# 新建SonarQube挂载目录
mkdir ~/soft/sonarqube/data
mkdir ~/soft/sonarqube/extensions
mkdir ~/soft/sonarqube/logs

三、安装postgres

# dokcer镜像下载
docker pull postgres:14.2
# 启动镜像
docker run -d -p 5432:5432 --name sonarqube_postgres \
-v ~/soft/postgres:/var/lib/postgresql/data \
-e POSTGRES_USER=sonarqube \
-e POSTGRES_PASSWORD=sonarqube \
-e PGDATA=/var/lib/postgresql/data/pgdata postgres

四、安装SonarQube

SONAR_JDBC_URL为刚才安装的postgres,这里需要配置postgres的链接

# docker镜像下载
docker pull sonarqube:8.9.7-community

# 修改宿主机最大内存映射区域数
# 临时修改,系统重启后失效
sysctl -w vm.max_map_count=262144
# 永久修改,编辑 /etc/sysctl.conf 文件,添加 vm.max_map_count=262144
vim /etc/sysctl.conf

# 启动镜像
docker run -p 9000:9000 -p 9092:9092 --name sonarqube \
-v ~/soft/sonarqube/data:/opt/sonarqube/data \
-v ~/soft/sonarqube/extensions:/opt/sonarqube/extensions \
-v ~/soft/sonarqube/logs:/opt/sonarqube/logs \
-e SONAR_JDBC_USERNAME=sonarqube \
-e SONAR_JDBC_PASSWORD=sonarqube \
-e SONAR_JDBC_URL="jdbc:postgresql://192.*.*.*:5432/sonarqube" \
sonarqube:8.9.7-community

五、页面访问

访问地址:192...*:9000
用户名:admin
密码:admin

1、汉化

sonarqube镜像启动报错 sonarqube docker_运维

2、生成令牌

sonarqube镜像启动报错 sonarqube docker_sonarqube镜像启动报错_02


sonarqube镜像启动报错 sonarqube docker_Jenkins_03


填写令牌名称,生成令牌,记录令牌

六、Jenkins集成

1、安装SonarQube Scanner for Jenkins插件

sonarqube镜像启动报错 sonarqube docker_运维_04

2、全局配置SonarQube

sonarqube镜像启动报错 sonarqube docker_docker_05

3、配置SonarQube servers

sonarqube镜像启动报错 sonarqube docker_测试类型_06

在这步添加刚才记录的sonar令牌

sonarqube镜像启动报错 sonarqube docker_docker_07

4、Pipeline配置

Pipeline增加SonarQube阶段,参考官方文档

//Java项目
stage('SonarQube analysis') {
    tools {
        jdk "jdk11.0.14" // 指定使用JDK11的JDK环境
    }
    environment {
        scannerHome = tool 'SonarQube Scanner' 
    }
    steps {
        withSonarQubeEnv(installationName: '上一步添加的Jenkins凭证名称') {
            sh 'mvn sonar:sonar'
        }
    }
}

//JS项目,需编写sonar-project.properties配置文件放到项目根目录下
stage('SonarQube analysis') {
    tools {
        jdk "jdk11.0.14" // the name you have given the JDK installation using the JDK manager (Global Tool Configuration)
    }
    environment {
        scannerHome = tool 'SonarQube Scanner' // the name you have given the Sonar Scanner (Global Tool Configuration)
    }
    steps {
        withSonarQubeEnv(installationName: '上一步添加的Jenkins凭证名称') {
            sh "${scannerHome}/bin/sonar-scanner"
        }
    }
}

js和其他项目需要编写设置sonar-project.properties配置文件,放到项目根目录下

sonar.projectKey=jcl_client_front

如果没有配置文件,则会出现错误

ERROR: Error during SonarScanner execution
ERROR: You must define the following mandatory properties for 'Unknown': sonar.projectKey
ERROR: 
ERROR: Re-run SonarScanner using the -X switch to enable full debug logging.

由于SonarQube7.8版本后不在支持JDK8,因而需要在部署目标机上安装JDK11用作SonarQube的临时编译使用。

5、JDK11配置

不需要真的安装配置JDK11,只需将tar包解压到一个路径即可

在节点中配置JDK路径

sonarqube镜像启动报错 sonarqube docker_Jenkins_08

6、执行构建查看结果

sonarqube镜像启动报错 sonarqube docker_sonarqube镜像启动报错_09

七、IDea集成

1、安装SonarLint插件

sonarqube镜像启动报错 sonarqube docker_sonarqube镜像启动报错_10

2、配置SonarLint

重启后

sonarqube镜像启动报错 sonarqube docker_运维_11

sonarqube镜像启动报错 sonarqube docker_sonarqube镜像启动报错_12


填写ConnectionName,和SonarQubeURL

sonarqube镜像启动报错 sonarqube docker_sonarqube镜像启动报错_13


填写6.3中的sonar令牌

3、分析代码

sonarqube镜像启动报错 sonarqube docker_Jenkins_14


在下方工具栏查看分析报告

sonarqube镜像启动报错 sonarqube docker_docker_15

八、常见问题

1、内存问题

ERROR: [1] bootstrap checks failed [1]: max virtual memory areas vm.max_map_count

SonarQube内置了ElasticSearch,需要调整默认的vm.max_map_count信息

# 修改宿主机最大内存映射区域数
# 临时修改,系统重启后失效
sysctl -w vm.max_map_count=262144
# 永久修改,编辑 /etc/sysctl.conf 文件,添加 vm.max_map_count=262144
vim /etc/sysctl.conf

2、数据库问题

Exception in thread "main" org.sonar.process.MessageException: Unsupported JDBC driver provider: mysql

7.9版本以后SonarQube只支持Microsoft SQL Server、Oracle、PostgreSQL,不在支持MySQL数据库

3、JDK问题

org/sonar/batch/bootstrapper/EnvironmentInformation has been compiled by a more recent version of the Java Runtime (class file version 55.0), this version of the Java Runtime only recognizes class file versions up to 52.0

参考官方文档 SonarQube编译需要JDK11环境

九、参考鸣谢

1、docker学习-ubuntu下安装docker以及获取非root操作权限 2、使用Docker 安装使用 SonarQube8.9 代码质量管理平台 3、Linux环境下使用Docker安装SonarQube的完整教程 4、Sonarqube9+ 分析gradle项目 报错解决 5、Jenkins整合SonarQube 6、IDEA集成SonarQube 7、sonar web功能简介