sonar基本使用
1,sonar安装和配置
SonarQube是一个用于管理代码质量的开放平台,可以快速的定位代码中潜在的或者明显的错误。目前 支持java,C#,C/C++,Python,PL/SQL,Cobol,JavaScrip,Groovy等二十几种编程语言的代码质量管理与检 测。
官网:https://www.sonarqube.org/
1.1 安装包安装SonarQube
1)安装MySQL(已完成)高版本不支持mysql
2)安装SonarQube
在MySQL创建sonar数据库
下载sonar压缩包:
https://www.sonarqube.org/downloads/
解压sonar,并设置权限
yum install unzip
unzip sonarqube-6.7.4.zip 解压
mkdir /opt/sonar 创建目录
mv sonarqube-6.7.4/* /opt/sonar 移动文件
useradd sonar 创建sonar用户,必须sonar用于启动,否则报错
chown -R sonar. /opt/sonar 更改sonar目录及文件权限修改sonar配置文件
vi /opt/sonarqube-6.7.4/conf/sonar.properties
内容如下:
sonar.jdbc.username=root
sonar.jdbc.password=Root@123
sonar.jdbc.url=jdbc:mysql://localhost:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs= maxPerformance&useSSL=false
注意:sonar默认监听9000端口,如果9000端口被占用,需要更改。 启动sonar
cd /opt/sonarqube-6.7.4
su sonar ./bin/linux-x86-64/sonar.sh start 启动
su sonar ./bin/linux-x86-64/sonar.sh status 查看状态
su sonar ./bin/linux-x86-64/sonar.sh stop 停止
tail -f logs/sonar.logs 查看日志访问sonar http://192.168.66.101:9000
默认账户:admin/admin 创建token
2.2 Docker方式安装
注意:
经过测试,docker 默认拉取最新版的sonar报
could not find java in ES_JAVA_HOME at /opt/java/openjdk/bin/java
推荐部署8.9.1-conmunity
创建 bridge 网络并指定 IP 区间
创建自定义网络
docker network create --driver bridge --subnet 172.0.0.0/16 woniu_network
查看已存在网络
docker network ls
拉取镜像
docker pull postgres
docker pull sonarqube:8.9.1-conmunity
安装postgresql
# 创建日志目录
mkdir -p /home/docker/postgresql/logs
# 创建数据目录
mkdir -p /home/docker/postgresql/data
sudo docker run -d -p 5432:5432 \
--name postgresql \
--restart=always \
--network woniu_network \
--ip 172.0.0.54 \
-v /home/docker/postgresql/data:/var/lib/postgresql/data \
-e POSTGRES_USER=woniu \
-e POSTGRES_PASSWORD=woniu123 \
--privileged postgres #添加权限
报错:cannot access '/docker-entrypoint-initdb.d/': Operation not permitted
解决办法:报错提示,权限不够。加上参数 --privileged 来增加权限
环境测试
# 在容器 postgre_sql 中开启一个交互模式的终端
docker exec -it postgre_sql /bin/bash
# postgre_sql 登录
psql -U woniu -W
#创建sonar数据库
create database sonar; ##如果不创建,后续sonarqube会报错
安装sonarqube
# 创建日志目录
mkdir -p /home/docker/sonarqube/logs
# 创建数据目录
mkdir -p /home/docker/sonarqube/data
# 创建插件目录
mkdir -p /home/docker/sonarqube/extensions
安装命令
sudo docker run -d -p 9000:9000 \
--name sonarqube \
--restart=always \
--network woniu_network \
--ip 172.0.0.59 \
-v /home/docker/sonarqube/extensions:/opt/sonarqube/extensions \
-v /home/docker/sonarqube/data:/opt/sonarqube/data \
-v /home/docker/sonarqube/logs:/opt/sonarqube/logs \
--link postgresql \
-e sonar.jdbc.url=jdbc:postgresql://postgresql:5432/sonar \
-e sonar.jdbc.username=woniu \
-e sonar.jdbc.password=woniu123 \
sonarqube:8.9.1-community
中文插件安装
注:汉化教程
直接通过sonarqube市场下载插件可能会不成功,这里教大家自己下载插件的方法;
首先到github下载适合自己版本的汉化包插件,项目首页 、各版本下载地址
docker命令将下载的插件放到插件映射路径的/home/docker/sonarqube/extensions/plugins,然后重启sonar
cd /home/docker/sonarqube/extensions
mkdir plugins
或者直接复制插件到sonar实例的/opt/sonarqube/extensions/plugins路径下
docker cp sonar-l10n-zh-plugin-8.9.jar ID://opt/sonarqube/extensions/plugins
查看日志 docker logs id
访问
http://localhost:9000 admin admin
2. jenkins配置sonar
安装SonarQube Scanner插件
添加SonarQube凭证(通过sonar生成令牌)

Jenkins进行SonarQube配置
Manage Jenkins->Configure System->SonarQube servers
Manage Jenkins->Global Tool Configuration
SonaQube关闭审查结果上传到SCM功能
3. Jenkins+SonarQube代码审查(2) - 实现代码审查
非流水线项目
项目风格为freestyle或者maven项目,在增加构建步骤选择sonar Scanner,添加脚本
# must be unique in a given SonarQube instance
sonar.projectKey=web_demo_freestyle
# this is the name and version displayed in theSonarQube UI. Was mandatory prior to SonarQube 6.1.
sonar.projectName=web_demo_freestyle
sonar.projectVersion=1.0
# Path is relative to the sonar-project.properties file. Replace "\" by "/" on Windows.
# This property is optional if sonar.modules is set.
sonar.sources=.
sonar.exclusions=**/test/**,**/target/**
sonar.java.source=1.8
sonar.java.target=1.8
# Encoding of the source code. Default is default system encoding
sonar.sourceEncoding=UTF-8
执行构建,后访问sonar webui
流水线项目
区别在于,构建脚本在项目中,采用pipeline语法构建的。
在项目添加SonaQube代码审查(流水线项目)
1)项目根目录下,创建sonar-project.properties文件
2)修改Jenkinsfile,加入SonarQube代码审查阶段
pipeline { agent any
stages {
stage('拉取代码') { steps {
checkout([$class: 'GitSCM', branches: [[name: '*/master']], doGenerateSubmoduleConfigurations: false, extensions: [], submoduleCfg: [], userRemoteConfigs: [[credentialsId: '68f2087f-a034-4d39-a9ff-1f776dd3dfa8', url: 'git@192.168.66.100:itheima_group/web_demo.git']]])
}
}
stage('编译构建') { steps {
sh label: '', script: 'mvn clean package'
}
}
stage('SonarQube代码审查') { steps{
script {
scannerHome = tool 'sonarqube-scanner'
}
withSonarQubeEnv('sonarqube6.7.4') {
sh "${scannerHome}/bin/sonar-scanner"
}
}
}
stage('项目部署') { steps {
deploy adapters: [tomcat8(credentialsId: 'afc43e5e-4a4e-4de6-984f- b1d5a254e434', path: '', url: 'http://192.168.66.102:8080')], contextPath: null, war: 'target/*.war'
}
}
}
post {
always {
emailext(
subject: '构建通知:${PROJECT_NAME} - Build # ${BUILD_NUMBER} -
${BUILD_STATUS}!',
body: '${FILE,path="email.html"}', to: '1014671449@qq.com'
)
}
}
}
1) 到SonarQube的UI界面查看审查结果
解决新版sonar-java插件需要配置sonar.java.binaries参数的问题
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?