sonarqube的安装部署以及集成jenkins

sonarqube的安装部署以及如何集成jenkins自动化分析java项目

sonarqube Linux版安装部署。

  1. SonarQube® 是一种自动代码审查工具,用于检测代码中的错误,漏洞和多余的代码。它可以与您现有的工作流程集成,以便在项目分支和拉取请求之间进行连续的代码检查。 比如:
  • SonarQube集成 gitlab,在分支推送的时候自动进行代码检查分析,生成代码报告。
  • SonarQube集成 jenkins,在代码构建的时候自动进行代码分析,生成代码报告。
    SonarQube是可以配合一切好用的CI/CD工具进行自动化分析代码并生成代码报告。
    官方网站:https://www.sonarqube.org/

选择安装版本

  1. SonarQube 支持的数据库有:PostgreSQL,Microsoft SQL Server,Oracle,注意7.9版本已经不对MySql进行官方的支持了,如果执意要用 Mysql 可能会遇到很多坑。当然有的朋友想用Mysql数据库,那么可以选择安装 7.7 以下版本(包括7.7)。
  2. SonarQube 运行需要ES(ElasticSearch),当然这个不用我们安装,下载的安装包已经包含了ES。
  3. sonarqube7.8+版本不再支持mysql,以sonarqube7.7为例,支持的mysql版本是5.6和5.7,
    所以你安装7.8+以上版本就不能使用MySQL了。
    注:我这次没有使用数据库,你如果也不用关于数据库部分配置可以忽略。
    不过安装mysql数据库,配置可以看下,创建sonarqube使用的数据库和用户。
    在MySQL服务器上使用root账号登陆,执行如下命令:

mysql> CREATE DATABASE IF NOT EXISTS sonarqube CHARACTER SET utf8 COLLATE utf8_general_ci;
mysql> CREATE USER 'sonarqube'@'%' IDENTIFIED BY 'sonarqube,.123!A';
mysql> grant all privileges on sonarqube.* to 'sonarqube'@'%' identified by 'sonarqube,.123!A' with grant option;

mysql> flush privileges;
grant all privileges on 库名.表名 to '用户名'@'IP地址' identified by '密码' with grant option;
flush privileges;库名:要远程访问的数据库名称,所有的数据库使用“”表名:要远程访问的数据库下的表的名称,所有的表使用“
用户名:要赋给远程访问权限的用户名称
IP地址:可以远程访问的电脑的IP地址,所有的地址使用“%”
密码:要赋给远程访问权限的用户对应使用的密码

安装方式

1,通过下载压缩包,然后上传到服务器,然后解压安装,
2,通过yum直接通过 下面的仓库下载。
https://binaries.sonarsource.com/Distribution/sonarqube/
# 下载源码压缩包
wget https://binaries.sonarsource.com/Distribution/sonarqube/sonarqube-6.7.zip
//https://binaries.sonarsource.com/Distribution/sonarqube/sonarqube-7.7.zip
注: 本次下载6.7 版本。 因为java项目集成覆盖率插件使用的是 cobertura,如果选择的是其它的插件可以自行选择版本
Sonarqube 中cobertura 覆盖率插件工具,只支持 6.7,7.0的 或以下版本的。若要使用 cobertura进行 覆盖率统计,请选择下载合适版本的sonarqube

解压sonarqube源码包,并移动到指定路径
unzip sonarqube-6.7.zip
cp -r sonarqube-6.7 /usr/local/
# 高版本中不能用 root 用户启动 SonarQube,需用非 root 用户启动
# 创建用户以及更改目录的属主属组
useradd sonarqube
chown sonarqube.sonarqube -R /home/admin/sonarqube-6.7
# 配置sonarqube配置文件
# su - USERNAME切换用户后,同时切换到新用户的工作环境中。 切换到sonarqube用户下
su - sonarqube
cd /home/admin/sonarqube-6.7
# 修改数据库配置 如果使用自带的数据库,可以不设置
vim conf/sonar.properties
sonar.jdbc.username=sonarqube #登录数据库的授权用户
sonar.jdbc.password=sonarqube,.123!A #登录数据库的密码
sonar.jdbc.url=jdbc:mysql://192.168.0.187:3306/sonarqube?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance&useSSL=false
#jdbc:mysql://192.168.0.187:3306/sonarqube 中的sonarqube为创建的数据库名称
sonar.web.host=0.0.0.0 #sonarqube服务监听本机所有ip
sonar.web.port=9000 #sonarqube服务启动时监听的端口
sonar.jdbc.driverClassName=org.gjt.mm.mysql.Driver
# 启动sonarqube服务
/home/admin/sonarqube-6.7/bin/linux-x86-64/sonar.sh start
# 查看sonarqube服务启动状态
/home/admin/sonarqube-6.7/bin/linux-x86-64/sonar.sh status
# 查看sonarqube服务的日志文件
tail -30 /home/admin/sonarqube-6.7/logs/sonar.log
# 查看监听的8081端口
lsof -i tcp:8081
# 默认端口9000。可以自己在配置文件中修改端口。 conf/sonar.properties
sonar.web.port=8081
# 浏览器访问,后期可以使用nginx做反向代理配置域名进行访问
http://ip:8081
# 登录的用户名及密码均默认为admin

重启 -每次要切换用户

su -sonarqube
/home/admin/sonarqube-6.7/bin/linux-x86-64/sonar.sh start

插件安装

在 administration→Marketplace,直接搜索 需要安装到插件
1,Chinese 中文插件
2,覆盖率工具 jacoco,cobertura
3,代码检查插件 SonarJava
注意:cobertura 覆盖率插件工具,只支持 6.7,7.0的 若要使用 cobertura进行 覆盖率统计,请选择下载合适版本的sonarqube
部署扫描器sonar-scanner
sonarqube通过扫描器扫描代码
下载地址:https://binaries.sonarsource.com/Distribution/sonar-scanner-cli/
### 下载扫描器
wget https://binaries.sonarsource.com/Distribution/sonar-scanner-cli/sonar-scanner-cli-4.0.0.1744.zip
### 解压并移动到指定目录
unzip sonar-scanner-cli-4.0.0.1744.zip
cp -r sonar-scanner-4.0.0.1744 /usr/local/
### 修改配置文件
sonar.host.url=http://localhost:8081
sonar.sourceEncoding=UTF-8

sonar-scanner

优点:可以自定义参数。比如需要根据branch 形成不同的分析报告,使用该方式就更加方便
缺点:配置项较多。
其中: sonar.projectKey、sonar.projectName、sonar.language、sonar.sources、sonar.java.binaries都是必须的
这里需要解释下sonar.projectKey 和sonar.projectName。 projectKey 是在sonar 平台上一个project 的内部唯一标志。projectName 是project 在sonar 平台上显示的名称,仅用来做显示名称,允许重复。sonar 平台通过projetKey来标记是否是同一个project,
#### 1,当一个git 项目需要针对不同分支进行sonar 分析时,靠的就是projectKey的差异去创建。
sonar.projectKey=sonarKey
sonar.projectVersion=1.0
sonar.sourceEncoding=UTF-8
sonar.language=java
sonar.sources=WORKSPACE/test/target/classes/
sonar.test.inclusions=$WORKSPACE/test/src/test/
#### 2,当一个git 项目需要针对不同分支进行sonar 分析时, 可以设置 sonar.branch 参数。(1可能不会生效)

-Dsonar.branch=${currentBranches}

sonar 针对java项目分析。
1,可以不用上面到 scanner,直接使用 maven中到 sonar插件。
2, sonar-project.properties配置文件也可以没有,可以写在执行命令中。

mvn clean org.sonarsource.scanner.maven:sonar-maven-plugin:3.2:sonar -Dsonar.java.binaries=target/classs

需要在maven setting文件中,配置sonar URL 账号 密码

  <profile>
               <id>sonar</id>
               <activation>
                   <activeByDefault>true</activeByDefault>
               </activation>
               <properties>
                   <!-- Optional URL to server. Default value is http://localhost:9000 -->
                   <sonar.host.url>
                     http://ip:9000
                   </sonar.host.url>
                 <sonar.login>
                   admin
                 </sonar.login>
                 <sonar.password>
                   admin
                 </sonar.password>
               </properties>
       </profile>

jenkin中使用sonar

1,安装使用

sonar-scanner  插件

2,只是使用maven 命令

mvn org.sonarsource.scanner.maven:sonar-maven-plugin:3.2:sonar -Dsonar.projectName=${JOB_NAME} -Dsonar.java.binaries=target/sonar -Dsonar.host.url=http://host:端口/

目前配置在maven setting中的sonar配置不生效 不知道什么情况
所以需要在 命令行中指定 URL地址。 密码配置在Jenkins全局变量中 就OK了。 执行命令时他会自动去找,如果没有配置就会报错。不知道什么情况。

Q1:Dsonar.java.binaries 未设置问题 (设置后如果出现报错情况 如下)

Please provide compiled classes of yourproject with sonar.java.binaries property
执行sonar 代码扫描时. 出现以下问题时

mvn clean org.sonarsource.scanner.maven:sonar-maven-plugin:3.2:sonar

Please provide compiled classes of yourproject with sonar.java.binaries property
然后在网上大多是命令行添加如下

-Dsonar.java.binaries=target/classs

完整如下,

mvn clean org.sonarsource.scanner.maven:sonar-maven-plugin:3.2:sonar -Dsonar.java.binaries=target/classs

但是指定了后,运行期间并没有生产classs文件,所以需要修改如下。

mvn clean org.sonarsource.scanner.maven:sonar-maven-plugin:3.2:sonar -Dsonar.java.binaries=target/sonar

sonar 支持的插件表
https://blog.csdn.net/lxlmycsdnfree/article/details/78282698
参考:https://www.jianshu.com/p/ba49384733c2
lamada表达式 jacoco可以支持
https://blog.csdn.net/oschina_41790905/article/details/82627728
参考:
https://baijiahao.baidu.com/s?id=1597641627421414107&wfr=spider&for=pc
https://www.jianshu.com/p/78ec15d2f332
https://www.cnblogs.com/7tiny/p/11269774.html

原文地址:https://www.cnblogs.com/trimphNuan/p/13864750.html