1、SonarQube简介
官方网站:http://www.sonarqube.org/
下载地址:https://www.sonarqube.org/downloads/
SonarQube 是一个用于代码质量管理的开放平台,通过插件机制,SonarQube 可以集成不同的测试工具,代码分析工具,以及持续集成工具,例如 Hudson/Jenkins 等。
2、SonarQube安装
2.1 基础环境依赖
2.1.1 数据库环境依赖
SonarQube 6.7.X LTS 版本要求数据库要使用 MySQ 5.6 及以上版本,不支持 5.5 及更早的版本,7.9.X LTS 版本不再使用 MySQL
2.1.2 java 环境依赖
6.7.X 需要使用 Oracle JRE8
7.9.X 需要使用 Oracle JRE11
2.1.1 系统及内核参数
root@ubuntu-node1:~# useradd -s /bin/bash -m sonarqube
root@ubuntu-node1:~# vim /etc/sysctl.conf
vm.max_map_count=524288
fs.file-max=131072
root@ubuntu-node1:~# vim /etc/security/limits.conf
sonarqube - nofile 131072
sonarqube - nproc 8192
2.2 安装 JDK 11
root@ubuntu-node1:~# apt-cache madison openjdk-11-jdk
openjdk-11-jdk | 11.0.14+9-0ubuntu2~18.04 | http://mirrors.aliyun.com/ubuntu bionic-security/main amd64 Packages
openjdk-11-jdk | 11.0.14+9-0ubuntu2~18.04 | http://mirrors.aliyun.com/ubuntu bionic-updates/main amd64 Packages
openjdk-11-jdk | 10.0.1+10-3ubuntu1 | http://mirrors.aliyun.com/ubuntu bionic/main amd64 Packages
openjdk-lts | 10.0.1+10-3ubuntu1 | http://mirrors.aliyun.com/ubuntu bionic/main Sources
openjdk-lts | 11.0.14+9-0ubuntu2~18.04 | http://mirrors.aliyun.com/ubuntu bionic-security/main Sources
openjdk-lts | 11.0.14+9-0ubuntu2~18.04 | http://mirrors.aliyun.com/ubuntu bionic-updates/main Sources
root@ubuntu-node1:~# apt install -y openjdk-11-jdk
root@ubuntu-node1:~# java -version
openjdk version "11.0.14" 2022-01-18
OpenJDK Runtime Environment (build 11.0.14+9-Ubuntu-0ubuntu2.18.04)
OpenJDK 64-Bit Server VM (build 11.0.14+9-Ubuntu-0ubuntu2.18.04, mixed mode, sharing)
2.3 部署 PostgreSQL 服务器
2.3.1 安装PostgreSQL
root@ubuntu-node1:~# apt-cache madison postgresql
postgresql | 10+190ubuntu0.1 | http://mirrors.aliyun.com/ubuntu bionic-security/main amd64 Packages
postgresql | 10+190ubuntu0.1 | http://mirrors.aliyun.com/ubuntu bionic-security/main i386 Packages
postgresql | 10+190ubuntu0.1 | http://mirrors.aliyun.com/ubuntu bionic-updates/main amd64 Packages
postgresql | 10+190ubuntu0.1 | http://mirrors.aliyun.com/ubuntu bionic-updates/main i386 Packages
postgresql | 10+190 | http://mirrors.aliyun.com/ubuntu bionic/main amd64 Packages
postgresql | 10+190 | http://mirrors.aliyun.com/ubuntu bionic/main i386 Packages
postgresql-common | 190 | http://mirrors.aliyun.com/ubuntu bionic/main Sources
postgresql-common | 190ubuntu0.1 | http://mirrors.aliyun.com/ubuntu bionic-security/main Sources
postgresql-common | 190ubuntu0.1 | http://mirrors.aliyun.com/ubuntu bionic-updates/main Sources
root@ubuntu-node1:~# apt install postgresql -y
2.3.2 配置 PostgreSQL
root@ubuntu-node1:~# su - postgres
postgres@ubuntu-node1:~$
#登入数据库
postgres@ubuntu-node1:~$ psql -U postgres
psql (10.19 (Ubuntu 10.19-0ubuntu0.18.04.1))
Type "help" for help.
#创建数据库
postgres=# CREATE DATABASE sonar;
#创建用户
postgres=# CREATE USER sonar WITH ENCRYPTED PASSWORD '123456';
#授权
postgres=# GRANT ALL PRIVILEGES ON DATABASE sonar TO sonar;
#执行变更
postgres=# ALTER DATABASE sonar OWNER TO sonar;
postgres=# \q
#修改监听地址
root@ubuntu-node1:~# vim /etc/postgresql/10/main/postgresql.conf
59 listen_addresses = '*'
#开启远程访问
root@ubuntu-node1:~# vim /etc/postgresql/10/main/pg_hba.conf
# IPv4 local connections:
host all all 0.0.0.0/0 md5
root@ubuntu-node1:~# systemctl restart postgresql
2.4 部署 8.9.X SonarQube
root@ubuntu-node1:~# cd /usr/local/src/
root@ubuntu-node1:/usr/local/src# ls
sonarqube-8.9.7.52159.zip
root@ubuntu-node1:/usr/local/src# unzip sonarqube-8.9.7.52159.zip
root@ubuntu-node1:/usr/local/src# ln -sv /usr/local/src/sonarqube-8.9.7.52159 /usr/local/sonarqube
root@ubuntu-node1:/usr/local/src# useradd -r -m -s /bin/bash sonarqube
root@ubuntu-node1:/usr/local/src# chown sonarqube /usr/local/sonarqube /usr/local/src/sonarqube-8.9.7.52159 -R
root@ubuntu-node1:/usr/local/src# su - sonarqube
sonarqube@ubuntu-node1:~$ cd /usr/local/sonarqube
sonarqube@ubuntu-node1:/usr/local/sonarqube$ vim conf/sonar.properties
sonar.jdbc.username=sonar
sonar.jdbc.password=123456
sonar.jdbc.url=jdbc:postgresql://10.10.100.109/sonar
#启动sonarqube
sonarqube@ubuntu-node1:/usr/local/sonarqube$ ./bin/linux-x86-64/sonar.sh start
2.5 登入web界面
登录账户名和密码默认都是 admin
2.5.1 安装中文插件
2.6 SonarQube启动文件
root@ubuntu-node1:/usr/local/src# vim /etc/systemd/system/sonarqube.service
[Unit]
Description=SonarQube service
After=syslog.target network.target
[Service]
Type=simple
User=sonarqube
Group=sonarqube
PermissionsStartOnly=true
ExecStart=/usr/bin/nohup /usr/bin/java -Xms32m -Xmx32m -Djava.net.preferIPv4Stack=true -jar /usr/local/sonarqube/lib/sonar-application-8.9.7.52159.jar
StandardOutput=syslog
LimitNOFILE=131072
LimitNPROC=8192
TimeoutStartSec=5
Restart=always
SuccessExitStatus=143
[Install]
WantedBy=multi-user.target
3、SonarQube使用
3.1 jenkins 服务器部署扫描器 sonar-scanner
下载地址:https://binaries.sonarsource.com/Distribution/sonar-scanner-cli/
官方文档:https://docs.sonarqube.org/latest/analysis/scan/sonarscanner/
3.2 部署 sonar-scanner
sonarqube 通过调用扫描器 sonar-scanner 进行代码质量分析,即扫描器的具体工作就是扫描代码:
#下载sonar-scanner安装包
root@ubuntu-node1:/usr/local/src# wget https://binaries.sonarsource.com/Distribution/sonar-scanner-cli/sonar-scanner-cli-4.7.0.2747-linux.zip
root@ubuntu-node1:/usr/local/src# unzip sonar-scanner-cli-4.7.0.2747-linux.zip
root@ubuntu-node1:/usr/local/src# ln -sv /usr/local/src/sonar-scanner-4.7.0.2747-linux /usr/local/sonar-scanner
root@ubuntu-node1:/usr/local/src# cd /usr/local/sonar-scanner/
root@ubuntu-node1:/usr/local/sonar-scanner# vim conf/sonar-scanner.properties
#----- Default SonarQube server
sonar.host.url=http://10.10.100.109:9000
#----- Default source code encoding
sonar.sourceEncoding=UTF-8
3.3 扫描代码测试
3.3.1 准备测试代码
root@ubuntu-node1:~# unzip sonar-examples-master.zip
root@ubuntu-node1:~# cd sonar-examples-master/
root@ubuntu-node1:~/sonar-examples-master# cd projects/languages/python/python-sonar-runner
#修改配置文件
root@ubuntu-node1:~/sonar-examples-master/projects/languages/python/python-sonar-runner# vim sonar-project.properties
#自定义项目 key
sonar.projectKey=org.sonarqube:python-simple-sonar-scanner
#项目名称,会显示在web
sonar.projectName=Python :: Simple Project : SonarQube Scanner
#项目版本
sonar.projectVersion=1.0
#源代码目录
sonar.sources=src
#代码语言类型
sonar.language=py
#编码格式
sonar.sourceEncoding=UTF-8
3.3.2 web界面添加authentication token
如果在执行代码的时候不想使用token认证,可以在web界面关闭强制用户认证
3.3.3 在源代码目录执行扫描
手动在当前项目代码目录执行扫描,以下是扫描过程的提示信息,扫描的配置文件sonar-project.propertie 每个项目都要有
# pwd
/root/sonar-examples-master/projects/languages/python/python-sonar-runner
#执行代码检测,Dsonar.login填写刚刚生成的token
# /usr/local/sonar-scanner/bin/sonar-scanner -Dsonar.login=70da1e22873ea0a0472e4518fe4cb3ace283d3b2
3.3.3 web界面查看扫描结果
3.4 jenkins 执行代码扫描
3.4.1 jenkins 安装 SonarQube 插件
安装插件 SonarQube Scanner,然后配置 SonarQube server,系统管理-系统设置。
3.4.2 添加凭证
3.4.3 添加 sonarquebe URL
Jenkins—系统管理—系统设置–SonarQube servers:
3.4.4 让 jenkins 添加 Sonar scanner 扫描器
在jenkins打包是执行扫描,可以通过执行shell的方式直接扫描,也可以配置jenkins来执行,如下演示通过配置jenkins来执行
Jenkins–系统管理-全局工具配置
3.4.4.1 自动安装
3.4.4.2 手动安装
自己提前在服务器安装 Sonar scanner,再填写安装路径
##
3.4.5 配置拉取代码
选择自己的项目 - 源码管理 - 选择git - 添加url及凭证
3.4.6 配置扫描
选择自己的项目 -构建 - execute sonarqube scanner,将配置文件的内容修改成如下格式填写完成后点保存:
sonar.projectKey=app01-develop
sonar.projectName=app01-develop
sonar.projectVersion=1.0
sonar.sources=./
sonar.language=html
sonar.sourceEncoding=UTF-8
注意:一般先代码扫描再部署,将execute sonarqube scanner拖到执行部署的shell框前面就可以
3.4.7 构建项目并测试 sonar-scanner 是否生效
构建完成后,直接点击构建版本后面的天线可以直接跳转到sonarqube的扫描结果界面
跳转到扫描结果界面