Sonarqube检测代码质量
流程背景:通过开发提交代码到gitlab仓库,jenkins拉取代码,后触发检测代码,通过钉钉通知代码状态。
部署sonarqube:
系统版本:ubt22.04
安装的提前条件:
- 安装java openjdk17
- 安装postgreSQL数据库
- 设置系统
- 下载sonarqube包
- 配置sonarqube
- 安装java openjdk
apt update
apt install -y openjdk-17-jdk-headless
Java --version #查看版本
- 安装postgresql13.18版本数据库
- 首先要添加postgresql存储库的GPG密钥
wget -q https://www.postgresql.org/media/keys/ACCC4CF8.asc -O - | apt-key add -
- 为ubt系统添加postgresql存储库
sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt/ `lsb_release -cs`-pgdg main" >> /etc/apt/sources.list.d/pgdg.list'
- 更新包索引
apt update
- 下载postgresql数据库
apt install -y postgresql-13
- 验证是否启动数据库
看服务状态,systemctl status postgresql
看端口5432是否启动,ss -lntup | grep 5432
若未启动,则启动,未果,看日志,没问题后,设置成开机自启enable
- 然后要为postgresql设置一个新的数据库和用户为sonarqube
- 切换到postgresql进入到数据库
su -u postgres psql
- 为sonarqube创建一个新的数据库和用户,并赋予权限
CREATE USER sonar WITH PASSWORD 'sonar';
CREATE DATABASE sonar OWNER sonar;
GRANT ALL PRIVILEGES ON DATABASE sonar TO sonar;
\l\du ,可以看到postgresql服务器上的数据库和用户列表
- 然后退出\q ,切换到root用户
- 设置系统
- 首先要为sonarqube创建一个sonar用户,因为sonarqube不允许root启动
useradd sonar -m -s /bin/bash
sonar:x:1001:1001::/home/sonar:/bin/bash
- 然后打开vim /etc/sysctl.conf ,在最后添加以下配置,然后应用
vm.max_map_count=524288 #sonarqube要求内核参数大于等于524288
fs.file-max=131072 #要求fs.file-max大于等于131072
sysctl --system
- 修改文件增大符
ulimit -n 131072
ulimit -u 8192
- 下载sonarqube包
- wget https://binaries.sonarsource.com/Distribution/sonarqube/sonarqube-10.5.1.90531.zip
(建议直接去官方下载Download Previous SonarQube Server Versions | Sonar (sonarsource.com))
- 下载好了解压
unzip sonarqube-10.5.1.90531.zip -d /opt/sonarqube
- 把该目录的权限改为之前创建的用户
Chown -R sonar:sonar /opt/sonarqube
- 配置sonarqube
打开sonarqube的配置文件 vim /etc/sonarqube/conf/sonar.properties
sonar.jdbc.username=sonar
sonar.jdbc.password=sonar
sonar.jdbc.url=jdbc:postgresql://postgresql:1234/sonar #数据库地址和用户
sonar.path.data=/var/sonarqube/data
sonar.path.temp=/var/sonarqube/temp
#sonar.web.port=9000 #默认端口9000,也可以通过该配置去设置
#sonar.web.host=0.0.0.0 #默认所有地址,也可以通过该配置去设置
- 然后启动sonarqube(不能用root启动,要不然会报错)
su - sonar -c '/opt/sonarqube/bin/linux-x86-64/sonar.sh start'
- 查看端口9000是否启动,查看服务是否正常
ss -lntup | grep 9000 ps -ef
- 编写systemd服务,保持开启自启动
[Unit]
Description=SonarQube service
After=syslog.target network.target
[Service]
Type=forking
ExecStart=/opt/sonarqube/bin/linux-x86-64/sonar.sh start
ExecStop=/opt/sonarqube/bin/linux-x86-64/sonar.sh stop
User=sonar
Group=sonar
Restart=always
LimitNOFILE=65536
LimitNPROC=4096
[Install]
WantedBy=multi-user.target
Ps:可选,安装中文插件
mv sonar-l10n-zh-plugin-10.5.jar /opt/sonarqube/extensions/plugins/
重启服务即可生效!!!
Jenkins集成sonarqube
流程:开发通过git提交代码到gitlab仓库,jenkins拉取代码,触发构建步骤,开始检查代码质量,然后通过钉钉发送质检结果,也可通过webui查看
配置说明:
- 在sonarqube创建一个令牌用于jenkins
- 在 Jenkins 上配置 SonarQube 服务端地址;系统管理–>系统配置–>sonarQube (告诉jenkins,SonarQubeServers服务端地址)

- 添加jenkins的凭借
- 配置分析项(例:java)
在jenkins创建的项目中配置maven
clean verify sonar:sonar
-Dsonar.projectKey=hello #代码名
-Dsonar.projectName='hello'
-Dsonar.host.url=http://10.0.0.73:9000/ #sonarqube地址
-Dsonar.token=sqa_9cd32c816711bfe2e1db7f497c691f0a76c77994 #sonarqube的令牌
- 非java代码需要用到sonar-scanner工具分析
- 首先我们要在jenkins服务器上下载sonar-scanner,解压
unzip sonar-scanner-cli-4.0.0.1744-linux.zip -d /usr/local/
mv /usr/local/sonar-scanner-4.0.0.1744-linux /usr/local/sonar-scanner
(2)添加到jenkins的构建步骤中
/usr/local/sonar-scanner/bin/sonar-scanner \
-Dsonar.projectKey=test \
-Dsonar.sources=. \
-Dsonar.host.url=http://10.0.0.73:9000/ \
-Dsonar.token=sqa_9cd32c816711bfe2e1db7f497c691f0a76c77994
Ps : 可能会出现的报错,jdk版本问题
在sonar-scanner启动脚本里没有配置你下载的jdk版本,需要修改
然后再修改~/.bashrc 添加环境变量,指定使用的java版本
export JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64
export PATH=$JAVA_HOME/bin:$PATH

Comments NOTHING