温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

代码扫描工具

发布时间:2020-08-08 07:39:38 来源:ITPUB博客 阅读:1629 作者:steven_hua 栏目:编程语言
代码扫描工具
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” 开始安装;
代码扫描工具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nati21cmVyxozERRclfvCDxNixyWg0tWpV+pln0vvd/2os/EHKKd+XZ6vILywjukuccqwG/vjH9FNPpe69N7FoUfKKKxI1NYlzzklcfHHy2mtTt9+e+vWv0089NfDmmwNHjnhZKvhr4MiR9J496aeeSj34YOr225PTpiUuvjhxzjmJmprkFVck77gjde+96aeeGti3z++SIm+knPJ9ebaK/MIyotvzlGM10Ns78N576d//PtXSklqyJDljRqKuLnHeeYnq6sTYscnp01OLFqV++9v0M88M7N070N3tb2kxGAPd3QNvv51+5pnUb36TWrQo2dCQGDs2UV2dOO+8RF1dcsaM1NKlqZaW9PPPD7z33kDc6UfvUQlIOeX78mwV+YVlRHcZpByZge7ugb170888k/rtb1OLFiWnT9fOiMmbbkpOnZq8+ebUkiWp5ub0ww+nn302/cYbA/v3E4N8NNDdPbB/f3rHjvSzz6YffjjV3JxasiR5883JqVOTs2YlIpFEdXXissuS06enFi9O/fa36WefHdi7N9tLHcFEyinfl2eryC+BX8ZX394f+GUcvLJNOTIDR46k33or/cIL6U2bUmvXpu68M3nLLcmGhuTPfpa48MJEdXXizDMTP/lJYty45KRJyVmzUosWpVatSm/cmN62Ld3RMfD++1wOK8DAkSMD77+f7uhIP/106n/+J7VqVWrRouSsWclJkxLjxiV+8pPEmWcmqqsTo0YlJ0xINjQkb7kldeedqbVr05s2pV94If3WW6z2EOrpTwU/5Xz7v+/3Pa+QcoSCvYxv7z+4YOMLFy/8H78LUu5mPL7vnvaDfleG/397d9sUxZXoATwfIR/lvvBNcmtr3d2zW50Ly467s5Mge2EiKxqfrglEXZksi6zWUjFcSF2SrjIKKQvU5Tq4g+L6gCZmQuAS43hFRbwyrjoYNvgAM1DDY98XPQ/nnD7d08MM0zPN/1f9gunpPn36zNj955zTmE3Lc3PLExPLIyNLAwNL588vnjix+MknCwcPLrz//sLmzfNO5zwhC2+/PU/IfHHxvMu1UFGxsHXrwrvvLuzfv9DQsHj48GJr6+KxY4snTiydObN04cLStWtL3367NDy8PDa2PD6+/PJlwT2ivByNLr98uTw+vjw2tjQ8vDQ0tHTt2tKFC0tnziyeOLF47Nhia+vi4cMLDQ0L+/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">


离线安装:在线安装容易失败,可尝试离线安装,下载插件 jar 文件至插件目录下,并重启 SonarQube 生效;
插件 jar 文件的下载地址,可以到在线安装页找到插件的 Homepage 再找 releases,如下:
- Git: 已自带安装;
- SVN: 已自带安装;
- Java: 已自带安装,Java 源代码解析,计算指标等;
- JavaScript: 已自带安装;
- Chinese Pack:SonarQube 页面汉化;
- Findbugs
- Checkstyle
- PMD
- SonarGraph

插件的离线安装脚本如下:


  1. cd /opt/sonarqube-6.2/extensions/plugins/
  2. sudo rm -rf sonar-csharp-plugin-*.jar
  3. sudo wget https://github.com/SonarQubeCommunity/sonar-l10n-zh/releases/download/sonar-l10n-zh-plugin-1.13/sonar-l10n-zh-plugin-1.13.jar
  4. sudo wget https://github.com/SonarQubeCommunity/sonar-findbugs/releases/download/3.4.4/sonar-findbugs-plugin-3.4.4.jar
  5. sudo wget https://github.com/SonarQubeCommunity/sonar-checkstyle/releases/download/2.4/sonar-checkstyle-plugin-2.4.jar
  6. sudo wget https://github.com/SonarQubeCommunity/sonar-pmd/releases/download/2.6/sonar-pmd-plugin-2.6.jar
  7. sudo wget https://github.com/SonarQubeCommunity/sonar-sonargraph/releases/download/sonar-sonargraph-plugin-3.5/sonar-sonargraph-plugin-3.5.jar
  8. sudo /opt/sonarqube-6.2/bin/linux-x86-64/sonar.sh restart ## 重启服务
  9. ## 注意:不完整的 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服务地址,添加如下配置:


  1. <profile>

  2. <id>sonar</id>

  3. <properties>

  4.     <sonar.jdbc.url>jdbc:mysql://localhost:3306/sonar

  5.     <sonar.jdbc.driver>com.mysql.jdbc.Driver</sonar.jdbc.driver>

  6.     <sonar.jdbc.username>sonar</sonar.jdbc.username>

  7.     <sonar.jdbc.password>sonar</sonar.jdbc.password>

  8.     <sonar.host.url>http://localhost:9000

  9. </properties>

  10. </profile>

  11. <activeProfiles>

  12.   <activeProfile>sonar</activeProfile>

  13. </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插件的版本,如下:


  1. <project>
  2.             <build>
  3.                 <plugins>
  4.                     <plugin>
  5.                         <groupId>org.codehaus.sonar</groupId>
  6.                         <artifactId>sonar-maven-plugin</artifactId>
  7.                         <version>3.5.1</version>
  8.                     </plugin>
  9.                 </plugins>
  10.             </build>
  11.         </project>

f. 可以显式的将sonar绑定到Maven生命周期中,如下:


  1. <plugin>
  2.             <groupId>org.codehaus.sonar</groupId>
  3.             <artifactId>sonar-maven-plugin</artifactId>
  4.             <version>3.5.1</version>
  5.             <executions>
  6.                 <execution>
  7.                     <id>sonar</id>
  8.                     <phase>site</phase>
  9.                     <goals>
  10.                     <goal>sonar</goal>
  11.                     </goals>
  12.                 </execution>
  13.             </executions>
  14.       </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 日志来分析:

## cat /opt/sonarqube-6.2/logs/web.log 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.
  • ## cat /opt/sonarqube-6.2/logs/web.log 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对代码的检查
代码扫描工具
向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI