一.安装要求
1.1 软件要求
在进行sonarqube环境安装和搭建前务必确定当前机器和平台配置满足如下要求。机器上需要安装java(Oracle JRE 11 或 OpenJDK 11),SonarQube服务器需要的java版本为11,sonarqube scanner需要的jvm版本是8或11,因此这里我们使用java11。数据库支持PostgreSQL(9.6,10,11,12,和13)版本,MSSQL(12.0,13.0,14.0,15.0),Oracle(XE Editions,12C,18C,19C),WEB浏览器支持Safari最新版本,Opera,Google Chrome最新版本,Mozilla Firefox最新版本,Microsoft Edge最新版本和Microsoft Internet Explorer 的IE 11版本。除此之外,还需要注意,如果是运行在linux操作系统中,必须确保vm.max_map_count 大于或等于524288,fs.file-max 大于或等于131072,用户运行SonarQube可以打开至少131072个文件描述器和8192个线程,可以通过如下命令查看当前值
sysctl vm.max_map_count
sysctl fs.file-max
ulimit -n
ulimit -u
以及通过root用户设置如上四个值满足标准
sysctl -w vm.max_map_count=524288
sysctl -w fs.file-max=131072
ulimit -n 131072
ulimit -u 8192
1.2 硬件要求
SonarQube 服务器的小规模(个人或小团队)实例需要至少 2GB 的 RAM 才能有效运行,并且需要 1GB 的可用 RAM 供操作系统使用。
您需要的磁盘空间量取决于您使用 SonarQube 分析的代码量。
SonarQube 必须安装在具有出色读写性能的硬盘上。最重要的是,“数据”文件夹包含 Elasticsearch 索引,当服务器启动并运行时,将在这些索引上完成大量 I/O。因此,出色的硬盘读写性能将对 SonarQube 服务器的整体性能产生很大影响。
SonarQube 在服务器端不支持 32 位系统,SonarQube scanner支持 32 位系统。
二.Sonarqube安装步骤
2.1 实例整体架构
图1 SonarQube实例整体架构
如图1所示,sonarqube实例由三个部分组成:第一个部分是sonarqube服务器,主要运行以下三个进程:1.为 SonarQube 用户界面提供服务的 Web 服务器;2.基于 Elasticsearch 的搜索服务器;3.负责处理代码分析报告并将其保存在 SonarQube 数据库中的计算引擎。第二部分是存储以下内容的数据库:1.代码扫描期间生成的代码质量和安全性指标问题;2.sonarqube实例配置。最后一个部分是在您的CI/CD服务器上运行一个或多个scanners用于分析项目。
2.2 java11安装
https://blog.csdn.net/qq_41187116/article/details/125702854?spm=1001.2014.3001.5501
说明:目前jdk11 提供的max os版本在M1芯片上尚不支持,若安装失败建议下载安装open jdk11,通过该链接下载
https://docs.microsoft.com/en-us/java/openjdk/download
2.2 数据库postgresql安装
参考如下文档进行安装,要求版本在9.6,10,11,12,和13范围内即可
https://blog.csdn.net/weixin_46014027/article/details/121035453?spm=1001.2101.3001.6650.1&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-1-121035453-blog-123527230.pc_relevant_multi_platform_whitelistv3&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-1-121035453-blog-123527230.pc_relevant_multi_platform_whitelistv3&utm_relevant_index=2
2.3 添加系统用户
由于sonarqube不能使用root用户启动 ,所以可以通过创建新系统用户专门用于sonarqube的启动,创建用户后需要赋予其文件夹访问权限,通过chown命令。
说明:由于mac OS系统不支持useradd命令,所以这里需要通过系统偏好设置-》用户与群组新增用户,连/etc/passwd中也找不到我们创建的用户。因为mac OS是基于BSD的用户管理模式和linux系统不同,linux系统可以在root用户下通过useradd明亮创建用户。如这里创建的用户名为sonarqube(可灵活改动)。
2.4 下载sonarqube
通过访问sonarqube官网https://www.sonarqube.org/downloads/下载9.5版本的sonarqube的ZIP压缩包,然后准备安装。
2.5安装sonarqube
注:以下皆在root用户下操作( sudo -su root)
#在压缩包上层目录下将压缩包移动到/opt目录下
mv sonarqube-9.5.0.56709.zip /opt
#切换到opt目录下 解压移动过来的压缩包
cd /opt
unzip sonarqube-9.5.0.56709.zip
#授权新创建的系统用户sonarqube访问sonarqube文件夹
chown -R sonarqube /opt/sonarqube-9.5.0.56709
注:以下皆在sonarqube用户下操作 (sudo -su sonarqube)
cd /opt/sonarqube-9.5.0.56709/conf
vi sonar.properties
#修改数据库配置(在步骤2.2中配置) weburl等多个配置,根据实际设定配置
sonar.jdbc.username=postgres
sonar.jdbc.password=admin
sonar.jdbc.url=jdbc:postgresql://localhost/postgres?currentSchema=my_schema
其中my_schema是由自己创建
修改登陆地址和端口号
sonar.web.host=localhost
sonar.web.port=9000
2.6启动sonarqube
#切换到如下目录
/opt/sonarqube-9.5.0.56709/bin/macosx-universal-64
#执行如下命令启动sonarqube
./sonar.sh start
如果终端显示如下字样表示启动成功
Running SonarQube…
SonarQube is already running
否则通过./sonar.sh console查看报错原因(如sonarqube started不是真正的启动)
2.7 sonarqube web登陆
http://localhost:9000/
第一次进去默认用户名和密码都是admin,强制修改为新密码后登陆
2.8 下载安装sonar-scanner
下载地址:https://docs.sonarqube.org/latest/analysis/scan/sonarscanner/
解压到/opt目录下
unzip sonar-scanner-cli-4.6.2.2472-linux.zip -d /opt/SonarScanner-4.7
这里下载的是版本4.7, 并在系统用户下配置环境变量
sonarqube@VK69KX60K0 conf % sonar-scanner -v
INFO: Scanner configuration file: /opt/sonar-scanner-4.7/conf/sonar-scanner.properties
INFO: Project root configuration file: NONE
INFO: SonarScanner 4.7.0.2747
INFO: Java 11.0.14.1 Eclipse Adoptium (64-bit)
INFO: Mac OS X 12.1 x86_64
根据使用的是bash还是zsh将其存放到不同的文件下(bash_profile 或者zshrc文件),并使用source+文件名的方式进行激活
export Sonar_Home=/opt/sonar-scanner-4.7/
export PATH=
S
o
n
a
r
H
o
m
e
/
b
i
n
:
Sonar_Home/bin:
SonarHome/bin:PATH
#sonarqube环境变量
export SONAR_HOME=/opt/sonarqube-9.5.0.56709
export PATH=
P
A
T
H
:
PATH:
PATH:SONAR_HOME/bin
2.9对项目进行静态代码扫描
在sonar控制台,新建项目(这里的test2项目用于新建项目示例),创建令牌,选择扫描方式。
在项目目录下通过新系统用户sonarqube执行如下命令(截图所示,根据创建项目生成,如新用户没有目录权限,可以通过chown在root用户下授予权限)
sonar-scanner
-Dsonar.projectKey=test2
-Dsonar.sources=.
-Dsonar.host.url=http://localhost:9000
-Dsonar.login=sqp_4d26c8ae21cccfa5f95bdef3ecfbbc72bc9afc0c
至此,一份代码扫描就完成了,如对inferencemanager项目的扫描结果如下图所示
三 避坑笔记
记录1:mac没有useradd命令,通过系统偏好设置启动
记录2:使用新创建用户启动
记录3:使用maxos下的sh脚本启动,非linux下
记录4:使用root启动过后会生成temp目录下文件/opt/sonarqube-9.5.0.56709/temp/ 包括conf和sharedmemory文件,需要删除后重新启动
记录5:sonarqube@VK69KX60K0 macosx-universal-64 % ./sonar.sh console
Running SonarQube…
SonarQube is already running
这才算真正启动
sonarqube started不是真正的启动,要通过./sonar.sh console查看报错原因
记录6:在新用户下创建zshrc文件并source激活
记录7:要把文件夹授权给新创建的用户 chown -R sonarqube(新用户名,通过系统偏好设置创建) /opt/sonarqube-9.5.0.56709
说明:以上内容在整个过程中基本都有所体现,这里作总结记录作用,出现问题可参考此部分
四 写在最后
说明:当前文档以安装在maxos操作系统下为例,与其他操作系统有所不同,具体可参考官方文档https://docs.sonarqube.org/8.9/