目录
前言
硬件要求
- SonerQube Server 要正常运行,机器配置至少2G,其中1G空闲。
- 需要的硬盘分区大小取决于分析的代码大小。
- 硬盘的读写速度要高。
平台要求
- oracle JRE 1.8
- openJDL 1.8
数据库
sonarqube从7.9起就不支持mysql
1 2 3 4 5 6 7 |
2019.11.02 06:11:06 ERROR web[][o.s.s.p.Platform] Web server startup failed: ############################################################################################################# # End of Life of MySQL Support : SonarQube 7.9 and future versions do not support MySQL. # # Please migrate to a supported database. Get more details at # # https://community.sonarsource.com/t/end-of-life-of-mysql-support # # and https://github.com/SonarSource/mysql-migrator # ############################################################################################################# |
如果需要使用最新的sonarqube,请使用其它数据库,我这里使用PostgreSQL数据库
安装之Docker版本
1、部署PostgreSQL
拉取数据库命令:docker pull postgres
创建容器:
docker run --name pgsql -e POSTGRES_USER=root -e POSTGRES_PASSWORD=root -p 5432:5432 -d postgres
2、建立数据库和对应账号
1 2 3 4 |
su postgres psql -U postgres CREATE USER sonar WITH PASSWORD 'sonar123';//这个是单独为sonar数据库分配账户和密码,这一行可以不用 CREATE DATABASE sonar WITH OWNER sonar ENCODING 'UTF8'//创建数据库,必须 |
3、部署sonarqube
(1)拉取数据库命令:docker pull sonarqube
(2)在宿主机上新建目录
1 2 3 4 5 6 7 |
mkdir /data/sonarqube/conf mkdir /data/sonarqube/data mkdir /data/sonarqube/logs mkdir /data/sonarqube/extensions |
(3)修改上边目录权限
chmod 777 /data/sonarqube –R
(4)运行容器
1 2 3 4 5 6 7 8 9 10 |
docker run --name sonarqube -d \ -p 9000:9000 \ -e SONARQUBE_JDBC_USERNAME=root \ -e SONARQUBE_JDBC_PASSWORD=root \ -e SONARQUBE_JDBC_URL="jdbc:postgresql://192.168.99.100:5432/sonar" \ -v /data/sonarqube/conf:/opt/sonarqube/conf \ -v /data/sonarqube/data:/opt/sonarqube/data \ -v /data/sonarqube/logs:/opt/sonarqube/logs \ -v /data/sonarqube/extensions:/opt/sonarqube/extensions \ sonarqube |
如果是MySQL数据库,SONARQUBE_JDBC_URL
可以换成SONARQUBE_JDBC_URL="jdbc:mysql://192.168.99.100:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance"
参数解释
- -d: 后台运行容器,并返回容器ID;
- -p: 端口映射,格式为:主机(宿主)端口:容器端口。-p 9002:9000是将容器9000端口映射为9002,因为宿主9000端口已经被占用
- –name=sonarqube: 为容器指定一个名称;
- -e设置环境变量,此变量会传递到COMMAND中
使用
1、在浏览器中输入
SonarQube服务运行正常
等待一小会,进入about页面中,然后点击”Log in”按钮
账号:admin 密码:admin ,
然后如果有如下页面,叫你生成token,可以暂时点击”Skip this tutorial”跳过。(这个token是有用的,首次根据情况可以不生成)
第一次登录会看到 Tutorial,按照提示设置用于验证身份的token。可以暂时点击”Skip this tutorial”跳过,也可以生成的token需要复制记下来!(这个token是有用的,首次根据情况可以不生成)不会再显示第二次!在用户 > 我的账户 > 安全中可以生成新token(令牌),或者回收已创建的 token。
如果想强化安全,不想在执行代码扫描或调用Web Service时使用真实SonarQube用户的密码,可以使用用户令牌来代替用户登录。这样可以通过避免把分析用户的密码在网络传输,从而提升安全性。
2、开启登录访问权限
进入配置-权限,开启
Force user authentication
Forcing user authentication stops un-logged users to access SonarQube.
标识: sonar.forceAuthentication
插件安装与安装中文包
插件管理页面管理插件
插件管理页面路径:Administration->Marketplace->Plugins
页面往下翻,找到 Chinese Pack 然后点击 Install,当然下面的图是我安装完后截的。
下载成功后,点击 Restart,然后出来的弹窗也点 Restart。
等待 SonarQube 重启后,界面就是汉语了。
手动安装中文包
有时候因为网络原因,并不能安装插件,那么需要手动安装。这里以安装中文包为例。
下载中文包:https://github.com/SonarQubeCommunity/sonar-l10n-zh/releases,根据自己的sonarqube版本下载对应的中文包版本,选择下载jar文件。将其放在sonarqube的/extensions/plugins/目录下再启动SonarQube即可。
更新插件
回到应用市场,继续更新其他插件。切记:更新和安装时不要关闭浏览器和重启SonarQube,否则会导致无法启动SonarQube。
更新一个插件大概需要半小时,当提示”等待更新”时,点击上方的”重启”按钮。基本每更新一个插件都要重启SonarQube服务一次
如遇到在线更新失败的情况,需手动更新
1、从https://docs.sonarqube.org/display/PLUG/Plugin+Library下载需要的插件
SonarC#、SonarCSS、SonarHTML、SonarJava、SonarJS、SonarTS、SonarXML
2、插件传到宿主机192.168.1.155上
3、用下边的命令插件传到sonarqube 的docker里
命令格式:docker cp 要拷贝的文件路径 容器名:要拷贝到容器里面对应的路径
docker cp sonar-css-plugin-1.0.2.611.jar sonarqube:/opt/sonarqube/extensions/plugins/sonar-css-plugin-1.0.2.611.jar
反正插件文件是放在sonarqube的/extensions/plugins/目录下
4、保存修改后的容器到新镜像(每次在容器中做过修改都要保存为新镜像,防止意外导致容器无法启动)
docker commit sonarqube容器id sonarqube-xywg(新容器名)
5、重启SonarQube
PS:如果镜像没问题,但某些意外导致容器停止,可以用docker restart
命令再次启动容器。
三、创建用户
密码:testing
创建完毕,点击上图testing行、令牌列的图标,生成令牌:testing_sonarqube
点击”生成”按钮
复制生成的令牌:bcda4faafae6f34759a898c9766a66ae4c73a441
四、集成LDAP登录
官方文档:https://docs.sonarqube.org/display/SONARQUBE67/LDAP+Plugin
创建项目(PHP为例)
前提:
SonarQube安装在CentOS服务器上;代码在Windows系统本地开发;项目路径:D:\data\wwwroot\tp51。
下载语言插件
创建项目
1、点击“项目”->“+”->“创建项目”。
2、给项目起个名字作为项目标识(sonar.projectKey),然后,点击“设置”。
3、输入一个用户名,点击“创建”,为这个用户创建一个token。
4、得到token,请保管好token。
5、如果已经创建了token,可以直接输入token
6、安照自身情况选择
7、下载sonar-scanner扫描器
8、window系统下,给sonar-scanner配置环境变量
9、在sonar-scanner目录下,找到/conf/sonar-scanner.properties文件,修改sonar-scanner配置
1 2 3 4 5 6 7 8 |
#Configure here general information about the environment, such as SonarQube server connection details for example #No information about specific project should appear here #----- Default SonarQube server sonar.host.url=http://192.168.99.100:9000 #SonarQube的地址 #----- Default source code encoding #sonar.sourceEncoding=UTF-8 |
10、在项目下新建文件sonar-project.properties,在项目里面必须有这个配置文件才可以进行扫描
这是基本的配置,更多配置参数请百度
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
sonar.projectKey=tp51 #SonarQube新建项目时,自己起的名字,在SonarQube实例中是唯一标识 # 设置SonarQube UI显示的名称 # PS:有人会问这里的名称是否可以是中文名称,我在网上搜索了好多资料都说是不可以的(至少我看到的资料都是) # 后来自己尝试了一下,答案是可以写成中文的,但是要换一种方式,比如你想把项目名称命名为“测试”, # 那么在这里就要写成“\u6d4b\u8bd5”,那么下面这个参数就应该这样写“sonar.projectName= \u6d4b\u8bd5”, # 说白了就是将中文转成Unicode sonar.projectName=tp51_sonar #项目名,显示在web上面 sonar.projectVersion=1.0 #版本,也会显示在web上面 sonar.sources=. #项目路径,以sonar-project.properties文件所在路径为起点 sonar.language=php #项目使用的语言 sonar.sourceEncoding=UTF-8 #代码使用的字符编码 # Reusing PHPUnit reports #sonar.php.coverage.reportPath=reports/phpunit.coverage.xml #sonar.php.tests.reportPath=reports/phpunit.xml |
11、把之前在SonarQube新建项目时,给出的代码,在项目的根目录下调起CMD,并粘贴代码执行。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
####此处省略信息##### INFO: CPD calculation finished INFO: Analysis report generated in 5369ms, dir size=2 MB INFO: Analysis report compressed in 465ms, zip size=1 MB INFO: Analysis report uploaded in 415ms # 执行成功! INFO: ANALYSIS SUCCESSFUL, you can browse http://192.168.99.100:9000/dashboard?id=tp51 INFO: Note that you will be able to access the updated dashboard once the server has processed the submitted analysis report INFO: More about the report processing at http://192.168.99.100:9000/api/ce/task?id=AW42doQ9UicC8X4cLuTu INFO: Analysis total time: 48.946 s INFO: ------------------------------------------------------------------------ INFO: EXECUTION SUCCESS INFO: ------------------------------------------------------------------------ INFO: Total time: 49.979s INFO: Final Memory: 6M/30M INFO: ------------------------------------------------------------------------ D:\data\wwwroot\tp51> |
PHPStorm使用SonarLint插件
SonarLint 是一个插件,可以集成到开发工具里,有以下功能
- 当打开java/php等文件时可自动分析静态文件,也可以手动对整个项目做分析;
- 可连接到SonarQube同步分析规则、质量规则与自定义设置;
下载SonarLint插件
首先,我们打开PHPStorm编辑器,然后我们在编辑器里面安装个SonarLint插件,因为PHPStorm里面代码审查工具需要依赖SonarLint插件来进行审查,然后再通过SonarLint的外部链接来使用我们的Sonarqube代码审查规则,所以我们先来安装SonarLint插件,在“File > Settings > Plugins”里面搜索“SonarLint”进行搜索安装:
配置SonarQube servers
点击“Next”之后会弹出以下弹出,然后选择“Login/Password”输入账号密码,然后点击“Next”,然后接着点击“Finish”:
如果提示项目绑定失败,可以点击一下“update binding”更新一下。
如果勾选 Automatically tigger analysis ,将会自动对打开的文件进行分析
这里是说明可以在Sonarqube自己写,你可以翻译成中文,这样方便团队里面英文不好的人员,在Sonarqube里面这里进行设置,点击“扩展描述”进行添加,然后保存,这样在PHPStorm里面就会有中文提示错误说明:
到这里PHPStorm使用Sonarqube代码分析规则进行编辑器代码规范提醒已经配置完成。
自定义规则
深入了解 sonar 自定义规则开发 (入门强烈推荐)
Sonar代码质量与技术债
一些问题
在docker中使用命令:docker logs 容器id
来查看日志中错误。
max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
来源:https://www.cnblogs.com/niaomingjian/p/7871935.html
解决方法:
Windows和macOS 下使用Docker Toolbox的,需要在docker-machine下更改vm.max_map_count
的值:
1 2 |
docker-machine ssh sudo sysctl -w vm.max_map_count=262144 |