Sonar 是一个用于代码质量管理的开放平台。通过插件机制,Sonar可以集成不同的测试工具,代码分析工具,以及持续集成工具。与持续集成工具(例如 Hudson/Jenkins 等)不同,Sonar 并不是简单地把不同的代码检查工具结果(例如 FindBugs,PMD 等)直接显示在 Web 页面上,而是通过不同的插件对这些结果进行再加工处理,通过量化的方式度量代码质量的变化,从而可以方便地对不同规模和种类的工程进行代码质量管理。

在对其他工具的支持方面,Sonar 不仅提供了对 IDE 的支持,可以在 EclipseIntelliJ IDEA 这些工具里联机查看结果;同时 Sonar 还对大量的持续集成工具提供了接口支持,可以很方便地在持续集成中使用 Sonar。

此外,Sonar 的插件还可以对 Java 以外的其他编程语言提供支持,对国际化以及报告文档化也有良好的支持

代码质量七宗罪

  1. # 编码规范:是否遵守了编码规范,遵循了最佳实践。
  2. # 潜在的 BUG:可能在最坏情况下出现问题的代码,以及存在安全漏洞的代码。
  3. # 文档和注释:过少(缺少必要信息)、过多(没有信息量)、过时的文档或注释。
  4. # 重复代码:违反了 Don’t Repeat Yourself 原则。
  5. # 复杂度:代码结构太复杂(如圈复杂度高),难以理解、测试和维护。
  6. # 测试覆盖率:编写单元测试,特别是针对复杂代码的测试覆盖是否足够。
  7. # 设计与架构:是否高内聚、低耦合,依赖最少。

Sonar的相关下载和文档可以在下面的链接中找到:http://www.sonarqube.org/downloads/。需要注意最新版的Sonar需要至少JDK 1.8及以上版本。

Sonar的功能就是来检查代码是否有BUG。除了检查代码是否有bug还有其他的功能,比如说:你的代码注释率是多少,代码有一些建议,编写语法的建议。所以我们叫质量管理.

  1. # jdk下载地址
  2. # http://www.oracle.com/technetwork/java/javase/downloads/java-archive-javase8-2177648.html
  3. # 卸载系统自带的java环境
  4. [root@jenkins-8 git-2.9.5]# rpm -qa |grep jdk
  5. [root@jenkins-8 git-2.9.5]# java
  6. bash: java: 未找到命令
  7. # 解压安装jdk
  8. tar xvf jdk-8u151-linux-x64.tar.gz -C /usr/local/
  9. cd /usr/local/
  10. mv jdk1.8.0_151/ jdk
  11. # 修改/etc/bashrc配置文件,末尾加入下面一行环境变量.
  12. tail -2 /etc/bashrc
  13. JAVA_HOME=/usr/local/jdk
  14. export PATH=$PATH:$JAVA_HOME/bin
  15. source /etc/bashrc
  16. java -version # 尽量不要用openjdk
  17. java version "1.8.0_151"
  18. Java(TM) SE Runtime Environment (build 1.8.0_151-b12)
  19. Java HotSpot(TM) 64-Bit Server VM (build 25.151-b12, mixed mode)
  20. # sonar下载地址
  21. # http://www.sonarqube.org/downloads/
  22. # 最新版的Sonar需要至少JDK1.8以上版本, 建议用国外网络下载,此处我使用5.6
  23. https://binaries.sonarsource.com/Distribution/sonarqube/
  24. unzip sonarqube-6.5.zip
  25. mv sonarqube-6.5 /usr/local/
  26. ln -s /usr/local/sonarqube-6.5/ /usr/local/sonarqube
  1. wget http://dev.mysql.com/get/mysql57-community-release-el7-8.noarch.rpm
  2. rpm -ivh mysql57-community-release-el7-10.noarch.rpm
  3. yum install -y mysql-community-server
  4. systemctl start mysqld.service
  5. # 修改Mysql密码下面有三种办法
  6. # 1.刚安装好的mysql,可以从/var/log/mysqld.log获取临时密码
  7. grep "password" /var/log/mysqld.log
  8. [root@mysql ~]# mysql -uroot -p
  9. Enter password:
  10. mysql> ALTER USER \'root\'@\'localhost\' IDENTIFIED BY \'ZHOUjian.22\';
  11. # 2.mysqladmin -uroot -p password "ZHOUjian.22"
  12. Enter password:
  13. # 3.实验环境不知道root密码操作方法如下
  14. sed -i \'/\[mysqld]/ a skip-grant-tables\' /etc/my.cnf
  15. systemctl restart mysqld
  16. mysql <<EOF
  17. update mysql.user set authentication_string=\'\' where user=\'root\' and Host=\'localhost\';
  18. flush privileges;
  19. EOF
  20. sed -i \'/skip-grant/d\' /etc/my.cnf
  21. systemctl restart mysqld
  22. mysqladmin -uroot -p password "ZHOUjian.20"
  23. Enter password: # 此处回车一下即可
  24. CREATE DATABASE sonar CHARACTER SET utf8 COLLATE utf8_general_ci;
  25. GRANT ALL ON sonar.* TO sonar@"%" IDENTIFIED BY "ZHOUjian.20";
  26. flush privileges;
  1. cd /usr/local/sonarqube/conf/
  2. vim sonar.properties
  3. sonar.jdbc.username=sonar
  4. sonar.jdbc.password=123456
  5. sonar.jdbc.url=jdbc:mysql://localhost:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance&useSSL=false
  6. sonar.web.host=0.0.0.0
  7. sonar.web.port=9000
  8. # 启动sonar
  9. /usr/local/sonarqube/bin/linux-x86-64/sonar.sh start
  10. Starting SonarQube...
  11. SonarQube is already running.
  12. # 验证端口
  13. ss -atnp |grep 9000
  14. LISTEN 0 25 *:9000 *:* users:(("java",pid=18028,fd=77))

默认admin/admin

/usr/local/sonarqube/extensions/plugins/ #插件本地路径安装中文插件:

  1. mv sonar-l10n-zh-plugin-1.11.jar /usr/local/sonarqube/extensions/plugins/

administration-system-update center-available,在后面的搜索框搜索插件名称,然后点 install 安装:

或 在 插 件 目 录 /usr/local/sonar/extensions/plugins 执 行以下命令:

  1. wget https://github.com/SonarQubeCommunity/sonar-l10n-zh/releases/download/sonar-l10n-zhplugin-1.11/sonar-l10n-zh-plugin-1.11.jar
  2. # 重启服务生效
  3. /usr/local/sonarqube/bin/linux-x86-64/sonar.sh restart
  4. # 刷新页面即可看到中文了

可以安装各种语言插件

  1. php,java,python

sonarqube 通过调用扫描器 sonar-scanner 进行代码质量分析,即扫描器的具体工作就是扫描代码:

下载地址:http://docs.sonarqube.org/display/SCAN/Analyzing+with+SonarQube+Scanner

  1. unzip sonar-scanner-2.6.1.zip
  2. mv sonar-scanner-2.6.1 /usr/local/
  3. ln -s /usr/local/sonar-scanner-2.6.1/ /usr/local/sonar-scanner
  4. cd /usr/local/sonar-scanner/
  5. grep "^[a-Z]" conf/sonar-scanner.properties
  6. sonar.host.url=http://149.129.38.117:9000
  7. sonar.sourceEncoding=UTF-8
  8. sonar.jdbc.username=sonar
  9. sonar.jdbc.password=ZHOUjian.21
  10. sonar.jdbc.url=jdbc:mysql://localhost:3306/sonar?useUnicode=true&amp;characterEncoding=utf8
  1. unzip sonar-examples-master.zip
  2. mv sonar-examples-master/ /usr/local/src/
  3. cd /usr/local/src/sonar-examples-master/
  4. cat projects/languages/python/python-sonar-runner/sonar-project.properties
  5. # Required metadata
  6. sonar.projectKey=org.sonarqube:python-simple-sonar-scanner
  7. sonar.projectName=Python :: Simple Project : SonarQube Scanner # 项目名称,会显示在仪表盘
  8. sonar.projectVersion=1.0
  9. # Comma-separated paths to directories with sources (required)
  10. sonar.sources=src # 代码目录
  11. # Language
  12. sonar.language=py # 语言格式
  13. # Encoding of the source files
  14. sonar.sourceEncoding=UTF-8
  1. # 注意看我当前目录
  2. [root@jenkins python-sonar-runner]# pwd
  3. /usr/local/src/sonar-examples-master/projects/languages/python/python-sonar-runner
  4. # 手动在当前项目目录执行扫描,一下是扫描过程中信息
  5. # sonar-project.propertie 每个项目都要有
  6. /usr/local/sonar-scanner/bin/sonar-scanner
  7. INFO: Scanner configuration file: /usr/local/sonar-scanner/conf/sonar-scanner.properties
  8. INFO: Project root configuration file: /usr/local/src/sonar-examples-master/projects/languages/python/python-sonar-runner/sonar-project.properties
  9. INFO: SonarQube Scanner 2.6.1
  10. INFO: Java 1.8.0_151 Oracle Corporation (64-bit)
  11. INFO: Linux 3.10.0-514.26.2.el7.x86_64 amd64
  12. INFO: User cache: /root/.sonar/cache
  13. INFO: Load global settings
  14. INFO: Load global settings (done) | time=252ms
  15. WARN: Property \'sonar.jdbc.url\' is not supported any more. It will be ignored. There is no longer any DB connection to the SQ database.
  16. WARN: Property \'sonar.jdbc.username\' is not supported any more. It will be ignored. There is no longer any DB connection to the SQ database.
  17. WARN: Property \'sonar.jdbc.password\' is not supported any more. It will be ignored. There is no longer any DB connection to the SQ database.
  18. INFO: User cache: /root/.sonar/cache
  19. INFO: Load plugins index
  20. INFO: Load plugins index (done) | time=30ms
  21. INFO: Download sonar-csharp-plugin-5.10.1.1411.jar
  22. INFO: Download sonar-python-plugin-1.8.0.1496.jar
  23. INFO: Download sonar-java-plugin-4.12.0.11033.jar
  24. INFO: Download sonar-l10n-zh-plugin-1.11.jar
  25. INFO: Plugin [l10nzh] defines \'l10nen\' as base plugin. This metadata can be removed from manifest of l10n plugins since version 5.2.
  26. INFO: Download sonar-flex-plugin-2.3.jar
  27. INFO: Download sonar-scm-git-plugin-1.2.jar
  28. INFO: Download sonar-xml-plugin-1.4.3.1027.jar
  29. INFO: Download sonar-php-plugin-2.10.0.2087.jar
  30. INFO: Download sonar-scm-svn-plugin-1.5.0.715.jar
  31. INFO: Download sonar-javascript-plugin-3.1.1.5128.jar
  32. INFO: SonarQube server 6.5.0
  33. INFO: Default locale: "en_US", source code encoding: "UTF-8"
  34. INFO: Process project properties
  35. INFO: Load project repositories
  36. INFO: Load project repositories (done) | time=199ms
  37. INFO: Load quality profiles
  38. INFO: Load quality profiles (done) | time=106ms
  39. INFO: Load active rules
  40. INFO: Load active rules (done) | time=1965ms
  41. INFO: Load metrics repository
  42. INFO: Load metrics repository (done) | time=202ms
  43. WARN: SCM provider autodetection failed. No SCM provider claims to support this project. Please use sonar.scm.provider to define SCM of your project.
  44. INFO: Publish mode
  45. INFO: Project key: org.sonarqube:python-simple-sonar-scanner
  46. INFO: ------------- Scan Python :: Simple Project : SonarQube Scanner
  47. INFO: Load server rules
  48. INFO: Load server rules (done) | time=277ms
  49. INFO: Language is forced to py
  50. INFO: Base dir: /usr/local/src/sonar-examples-master/projects/languages/python/python-sonar-runner
  51. INFO: Working dir: /usr/local/src/sonar-examples-master/projects/languages/python/python-sonar-runner/.sonar
  52. INFO: Source paths: src
  53. INFO: Source encoding: UTF-8, default locale: en_US
  54. INFO: Index files
  55. INFO: 9 files indexed
  56. INFO: Quality profile for py: Sonar way
  57. INFO: Sensor PythonXUnitSensor [python]
  58. INFO: Sensor PythonXUnitSensor [python] (done) | time=115ms
  59. INFO: Sensor Python Squid Sensor [python]
  60. INFO: Python unit test coverage
  61. INFO: Python integration test coverage
  62. INFO: Python overall test coverage
  63. INFO: Sensor Python Squid Sensor [python] (done) | time=1378ms
  64. INFO: Sensor SonarJavaXmlFileSensor [java]
  65. INFO: Sensor SonarJavaXmlFileSensor [java] (done) | time=0ms
  66. INFO: Sensor Analyzer for "php.ini" files [php]
  67. INFO: Sensor Analyzer for "php.ini" files [php] (done) | time=13ms
  68. INFO: Sensor Zero Coverage Sensor
  69. INFO: Sensor Zero Coverage Sensor (done) | time=27ms
  70. INFO: Sensor CPD Block Indexer
  71. INFO: Sensor CPD Block Indexer (done) | time=157ms
  72. INFO: No SCM system was detected. You can use the \'sonar.scm.provider\' property to explicitly specify it.
  73. INFO: 5 files had no CPD blocks
  74. INFO: Calculating CPD for 4 files
  75. INFO: CPD calculation finished
  76. INFO: Analysis report generated in 141ms, dir size=54 KB
  77. INFO: Analysis reports compressed in 26ms, zip size=27 KB
  78. INFO: Analysis report uploaded in 782ms
  79. INFO: ANALYSIS SUCCESSFUL, you can browse http://149.129.38.117:9000/dashboard/index/org.sonarqube:python-simple-sonar-scanner
  80. INFO: Note that you will be able to access the updated dashboard once the server has processed the submitted analysis report
  81. INFO: More about the report processing at http://149.129.38.117:9000/api/ce/task?id=AXK4TU1CIpzWVToFffwU
  82. INFO: Task total time: 20.514 s
  83. INFO: ------------------------------------------------------------------------
  84. INFO: EXECUTION SUCCESS
  85. INFO: ------------------------------------------------------------------------
  86. INFO: Total time: 38.804s
  87. INFO: Final Memory: 43M/105M
  88. INFO: ------------------------------------------------------------------------
  89. # 接下来我们到sonar仪表看查看一下

Jenkins安装请看上一篇文章

要想让Jenkins关联到sonarqube需要先安装插件,在jenkins插件安装SonarQubePlugin,其次配置SonarQube server.

  1. [root@jenkins ~]# cat /usr/local/src/sonar-examples-master/projects/languages/python/python-sonar-runner/sonar-project.properties
  2. # Required metadata
  3. sonar.projectKey=org.sonarqube:python-simple-sonar-scanner
  4. sonar.projectName=Python :: Simple Project : SonarQube Scanner
  5. sonar.projectVersion=1.0
  6. # Comma-separated paths to directories with sources (required)
  7. sonar.sources=src
  8. # Language
  9. sonar.language=py
  10. # Encoding of the source files
  11. sonar.sourceEncoding=UTF-8

版权声明:本文为you-men原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/you-men/p/13138749.html