一、系统环境
组件 | 版本 |
---|---|
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、汉化
2、生成令牌
填写令牌名称,生成令牌,记录令牌
六、Jenkins集成
1、安装SonarQube Scanner for Jenkins插件
2、全局配置SonarQube
3、配置SonarQube servers
在这步添加刚才记录的sonar令牌
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路径
6、执行构建查看结果
七、IDea集成
1、安装SonarLint插件
2、配置SonarLint
重启后
填写ConnectionName,和SonarQubeURL
填写6.3中的sonar令牌
3、分析代码
在下方工具栏查看分析报告
八、常见问题
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功能简介