代码扫描工具
1. sonar
2.ali的stc平台用的是:findbugs 和 pmd
参考:
测试框架:使用SONAR分析代码质量
配置sonar、jenkins进行持续审查
1、Sonar介绍
Sonar是一个用于代码质量管理的开源平台,用于管理Java源代码的质量。通过插件机制,Sonar 可以集成不同的测试工具,代码分析工具,以及持续集成工具,比如pmd-cpd、checkstyle、findbugs、Jenkins。通过不同的插件对这些结果进行再加工处理,通过量化的方式度量代码质量的变化,从而可以方便地对不同规模和种类的工程进行代码质量管理。
同时 Sonar 还对大量的持续集成工具提供了接口支持,可以很方便地在持续集成中使用 Sonar。
此外,Sonar 的插件还可以对 Java 以外的其他编程语言提供支持,对国际化以及报告文档化也有良好的支持。
它主要的核心价值体现在如下几个方面:
检查代码是否遵循编程标准:如命名规范,编写的规范等。
检查设计存在的潜在缺陷:SonarQub e 通 过插 件 F indbugs、Checkstyl e 等 工具检测代码存在的缺陷。
检测代码的重复代码量:SonarQub e 可 以展示项目中存在大量复制粘贴的代码。
检测代码中注释的程度:源码注释过多或者太少都不好,影响程序的可读可理解性。
检测代码中包、类之间的关系:分析类之间的关系是否合理,复杂度情况。
SonarQub e 平 台是 由 4 个 部分组成:
SonarQube Server
SonarQube Database
SonarQube Plugins
SonarQube Scanner
2、配置数据库
Apache Derby 是Sonar自带并且默认安装使用的数据库,此外Sonar对如下数据库提供支持:MySQL 5.x, Oracle 10g XE, Postgresql, MS SqlServer等,本文以mysql为例介绍如何配置数据库:
1)创建数据库
在mysql中执行如下脚本创建数据库及mysql用户
$ ${SONAR_HOME}/war/build-war.sh
c. 启动Tomcat, 通过 http://localhost:8080/sonar 访问.
Tomcat安装配置参见:CenOS系统中安装Tomcat7并设置为自启动服务
4.启动服务
sudo /opt/sonarqube-6.2/bin/linux-x86-64/sonar.sh stop sudo /opt/sonarqube-6.2/bin/linux-x86-64/sonar.sh start sudo /opt/sonarqube-6.2/bin/linux-x86-64/sonar.sh restart sudo /opt/sonarqube-6.2/bin/linux-x86-64/sonar.sh console sudo tail -f /opt/sonarqube-6.2/logs/sonar.log
5、配置插件
浏览器访问 http://centos:9000/sonar,用预设的管理员账号(admin/admin)登陆;
在线安装:进入插件中心 (Administration / System / Update Center / Available Plugins) 找到所需的插件,点击右侧的 “Install” 开始安装;
![代码扫描工具](data:image/png;base64,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<a title=)
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qT49OnxWbPic+f2LlrUe/fdsVWrYr/9bWzjxtiTT/Y880x3e3vPjh4de/d279/fSU5CpSHlAAimrs8+637nne5XXulpa4s99FDs/vvjixfHb7qpb+rU/vHj+0eOTFRXx6+4ov/88/tHjOi7+OL++vq+q6+OT5sWv+GG3tmz47ff3rtsWe9998UefDD20EOxxx7raWvrefHFntde696zp/uPf+w6eLDryBG/lzI/XX/+c9fBg91//GP3nj09r73W88ILPW1tscceiz30UOzBB3vvvbd32bL47bf3zp4dv+GG+LRpfVdf3T9+fN/FF/ePGNF//vl99fWJ6ur+kSP7x4/vmzYtfvPNvYsWxe6/P/bQQz1tbd2vvNL9zjtdn33m91ICOaQcAJVp//7uV17p2bw51tLSe9998YUL47Nm9U2e3H/55f3DhyfOOSdxzjn9w4f3X3553+TJ8Wg0vmBB7333xVpaejZv7m5v737rra5PPvF7GSpP1yefdL/1Vnd7e8/mzb0tLb333htfsCAejZrX/IgR/XV1fZMnx2fNii9cmFvzr7zSvX+/3wuBECHlAChrXQcO9Lz2WmzTptj998fnzu2bMqXvoosS55zTf8EF8Rtv7Js6NX7TTfHFi2P33Rd76KGerVtpUfBd12efde/d2/3yyz1bt8Yeeih3331aK1rvjTf2n39+4pxz+saM6ZsyJX7rrbH77489/njPa691HTjgd8ERQKQcAGWh7+DBno6O2JNPxpqb4/PmxadN67vkkkR1deK88/rGjYs3NMQXLIg9+GDPli09O3cSYipa12ef9bzxRs+WLbE1a+ILFsQbGvrGjUtEIonq6r5LL41PmxafPz/W3BzbvLmno4MmNwwGKQeA17o6O3t27Ii1tvYuW9Z7221948YlzjsvUV3dd8kl8WnT4vPmxZqbY08+2dPR0XXwoN+FhXe6Dh7s+cMfYk8+GVu9Oj5vXp8x6cZuu6132bJYa2vPG2/4XVJUDFIOgJLr2rkz9thjvXfdFb/uur6LLkp8//t9F18cv/763rvv7n7ySa5WwF7XgQPdr77avXlz7913x6+/vm/MmOQZZ/RddFH8uut677ortmlT165dfpcRZYqUA6D4enbvjm3cGJ8/v2/ChMQ558SnT49Pn957552xRx/t4YSEYujZuTP26KO9d94Zb2iINzQkzjmnb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G/Kgjvv2eyilpM+FVD2kDz9T0QJn2tsCRQ2P4lQrJRjjAm65+zoWnbcPAPQ+ZnJ2b5MdpnDslS6ubu6CGXb1Vg3hdxCVOa1rfSOHanm5uSUKYmzzkpec03qd78b+FRyby5Kg5Rjfq1w+UhV/XNx7K5YeZdyrGd0y+uB+S/rBrNc5bF01821cAyZuGJIriuuPmd4lQBefvx8h5zS3d2dbZjZUJnLGEr2KUej74UzEI9vWvXYuit/ues/L42feVZyypTU+vXp9vaBzk7RqKKUkznXq1HBfOrMnLF1w+SbcuyGlQ9u++xjc6bQPTbH+sge+a3iTj/uKZiy26VqWzljxrx58nvULfeC5a5cCdZvpaacgSNH0i+9lGppSU6enDjzzOSECak770y/+OJAX5/fRQspUk75vjxbRX5hGdHtOuVY3dN+sHb17p//Zlf6xReTa9YkJ01K/PjHiQsvTM6cmXrwwfQrr2SfHmtOOdZrL8YTs3oG156SLLmk45RydP1OLKdmd4/XsXmijfCak76fjM01KfFELU1DhqWwjCPsw2wzC/NdXMYmJX2P74oz0N2dfuWV1Jo1yZkzEz/9aSJo79q2AAAatklEQVQSSU6alFyzJr19+0B/v9+lAymnjF+erSK/sIzoHkTKURTljYM9pt95GNi/P71lS2rp0uQ11ySqq5PTpyevu3pn3ZitC58ceOedgR3rhBditGaL7Ml6Xkubds2pwB68dsroyTCSdCMbSmv/yjUgCcbW5arspbXs4sp7Q9k3HpWLgWRyYO/e9JNPplasSE6fnrz++kR1dfKaa1LLlqW3bh3gq035IeWU78uzVeQXlhHdg0s5jtIffJDeti21alUyGk2MHZs444zEmDHJGTNSK1emtm1L79o1cNjdz0QglAYOH07v3Jnati21cmVyxozERRclfvCDxNixyWg0tWpV+pln0vvd/2os/EHKKd+XZ6vILywjukuccqwG/vjH9FNPpe69N7FoUfKKKxI1NYlzzklcfHHy2mtTt9+e+vWv0089NfDmmwNHjnhZKvhr4MiR9J496aeeSj34YOr225PTpiUuvjhxzjmJmprkFVck77gjde+96aeeGti3z++SIm+knPJ9ebaK/MIyotvzlGM10Ns78N576d//PtXSklqyJDljRqKuLnHeeYnq6sTYscnp01OLFqV++9v0M88M7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">
离线安装:在线安装容易失败,可尝试离线安装,下载插件 jar 文件至插件目录下,并重启 SonarQube 生效;
插件 jar 文件的下载地址,可以到在线安装页找到插件的 Homepage 再找 releases,如下:
- Git: 已自带安装;
- SVN: 已自带安装;
- Java: 已自带安装,Java 源代码解析,计算指标等;
- JavaScript: 已自带安装;
- Chinese Pack:SonarQube 页面汉化;
- Findbugs
- Checkstyle
- PMD
- SonarGraph
插件的离线安装脚本如下:
-
cd /opt/sonarqube-6.2/extensions/plugins/
-
sudo rm -rf sonar-csharp-plugin-*.jar
-
sudo wget https://github.com/SonarQubeCommunity/sonar-l10n-zh/releases/download/sonar-l10n-zh-plugin-1.13/sonar-l10n-zh-plugin-1.13.jar
-
sudo wget https://github.com/SonarQubeCommunity/sonar-findbugs/releases/download/3.4.4/sonar-findbugs-plugin-3.4.4.jar
-
sudo wget https://github.com/SonarQubeCommunity/sonar-checkstyle/releases/download/2.4/sonar-checkstyle-plugin-2.4.jar
-
sudo wget https://github.com/SonarQubeCommunity/sonar-pmd/releases/download/2.6/sonar-pmd-plugin-2.6.jar
-
sudo wget https://github.com/SonarQubeCommunity/sonar-sonargraph/releases/download/sonar-sonargraph-plugin-3.5/sonar-sonargraph-plugin-3.5.jar
-
sudo /opt/sonarqube-6.2/bin/linux-x86-64/sonar.sh restart ## 重启服务
-
## 注意:不完整的 wget 下载文件必须删掉,否则会导致 SonarQube 启动失败!
a)插件介绍
Sonar支持多种插件,将下载后的插件上传到${SONAR_HOME}extensions\plugins目录下,重新启动sonar。
sonar默认集成了Java Ecosystem插件,该插件是一组插件的合集
-
Java [sonar-java-plugin]:java源代码解析,计算指标等
-
Squid [sonar-squid-java-plugin]:检查违反Sonar定义规则的代码
-
Checkstyle [sonar-checkstyle-plugin]:使用CheckStyle检查违反统一代码编写风格的代码
-
FindBugs [sonar-findbugs-plugin]:使用FindBugs检查违反规则的缺陷代码
-
PMD [sonar-pmd-plugin]:使用pmd检查违反规则的代码
-
Surefire [sonar-surefire-plugin]:使用Surefire执行单元测试
-
Cobertura [sonar-cobertura-plugin]:使用Cobertura获取代码覆盖率
-
JaCoCo [sonar-jacoco-plugin]:使用JaCOCO获取代码覆盖率
生成认证令牌(Token)
外部系统(比如 Jenkins)访问 SonarQube 时要用到;
进入:Administration(配置) / Security(权限) / User(用户),找到用户 admin,点击 “Tokens” 一列;
弹出界面里:输入 TokenName=”admin”, 点击 “Generate”, 生成 “8687b74188c446f2e02ec6eb5ee9d80b88048406”
部署至 Tomcat
上面是 Sonar 以独立 server 方式运行,也可以改为集成至 Tomcat:
## 注意修改 $TOMCAT_HOME/bin/catalina.sh 初始内存 1G+ sudo /opt/sonarqube-6.2/war/build-war.sh ## 将sonar达成一个war包 sudo cp /opt/sonarqube-6.2/war/sonar.war %TOMCAT_BASE/web-apps/
二、与jenkins集成
1、通过Maven进行集成
修改maven的主配置文件(${MAVEN_HOME}/conf/settings.xml文件或者 ~/.m2/settings.xml文件),在其中增加访问Sonar数据库及Sonar服务地址,添加如下配置:
-
<profile>
-
-
<id>sonar</id>
-
-
<properties>
-
-
<sonar.jdbc.url>jdbc:mysql://localhost:3306/sonar
-
-
<sonar.jdbc.driver>com.mysql.jdbc.Driver</sonar.jdbc.driver>
-
-
<sonar.jdbc.username>sonar</sonar.jdbc.username>
-
-
<sonar.jdbc.password>sonar</sonar.jdbc.password>
-
-
<sonar.host.url>http://localhost:9000
-
-
</properties>
-
-
</profile>
-
-
<activeProfiles>
-
-
<activeProfile>sonar</activeProfile>
-
-
</activeProfiles>
此处注意sonar.host.url地址应根据sonar部署情况修改
同样,为了避免内存溢出,推荐增加内存堆栈的大小。设置MAVEN_OPTS环境变量:
set MAVEN_OPTS=”-Xmx512m -XX:MaxPermSize=256m”
使用Sonar
a. 运行Sonar服务器;
b. 通过 mvn sonar:sonar 将代码注入到Sonar中进行分析处理,并将处理结果以XML的形式保存在数据库中;
c. 通过浏览器访问,显示分析结果;
d. 持续运行Maven构建,会迭代显示分析结果;
e. 可以显式指定sonar插件的版本,如下:
-
<project>
-
<build>
-
<plugins>
-
<plugin>
-
<groupId>org.codehaus.sonar</groupId>
-
<artifactId>sonar-maven-plugin</artifactId>
-
<version>3.5.1</version>
-
</plugin>
-
</plugins>
-
</build>
-
</project>
f. 可以显式的将sonar绑定到Maven生命周期中,如下:
-
<plugin>
-
<groupId>org.codehaus.sonar</groupId>
-
<artifactId>sonar-maven-plugin</artifactId>
-
<version>3.5.1</version>
-
<executions>
-
<execution>
-
<id>sonar</id>
-
<phase>site</phase>
-
<goals>
-
<goal>sonar</goal>
-
</goals>
-
</execution>
-
</executions>
-
</plugin>
此时,指定Maven的site声明周期时,则会自动调用sonar.sonar 命令.
2、直接与Jenkins集成
在jenkins的插件管理中选择安装SonarQube Plugin,该插件可以使项目每次构建都调用sonar进行代码度量。
安装完毕后,进入:系统管理 / 系统设置 / SonarQube servers, 点击 “Add SonarQube” 按钮:
- Name: SonarQube-6.2
- Server URL: http://centos:9000/sonar
- Server version: 5.3 or higher
- Server authentication token: 8687b74188c446f2e02ec6eb5ee9d80b88048406(前面 SonarQube 生成的)
Jenkins 会把构建结果通过 URL和认证令牌发送给 SonarQube
调整 Jenkins 构建设置
构建设置 Build 中,指定 Maven goals: “sonar:sonar”
项目构建时就会自动上报构建报告给 Sonar
构建错误排查
构建如有报错,可查看 SonarQube 日志来分析:
Caused by: com.mysql.jdbc.PacketTooBigException: Packet for query is too large (6428688 > 4194304).
You can change this value on the server by setting the 'max_allowed_packet' variable.
含义是 MySQL Server 的参数值设置过小,调整并重启 mysqld:
## sudo vim /etc/my.cnf ## sudo systemctl restart mysqld [mysqld]
max_allowed_packet=64M ## default 4M
查看报告
进入登陆 SonarQube 查看:
http://centos:9000/sonar
应用程序构建时就会自动触发Sonar对代码的检查
![代码扫描工具](data:image/png;base64,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)