架构与整合(Architecture and Integration)

iOS开发交流技术群:563513413,不管你是大牛还是小白都欢迎入驻 ,分享BAT,阿里面试题、面试经验,讨论技术, 大家一起交流学习成长!

先简单介绍一下SonarQube的总览

SonarQube是由四部分组成的,如下图所示:
[](https://kingdomrain002.github...

[architecture-scanning

](https://kingdomrain002.github...

1.SonarQube Server
2.一个SonarQube的数据库
3.服务器上安装了多个SonarQube插件,可能包括语言,SCM,集成,身份验证和管理插件
4.在构建/持续集成服务器上运行一个或多个SonarScanner,以分析项目

SonarQube在CI中位置

以下架构显示了SonarQube如何与其他ALM工具集成以及使用SonarQube的各种组件的位置
[](https://kingdomrain002.github...

[architecture-integrate

](https://kingdomrain002.github...

说明:开发人员提交代码到SCM(代码管理平台),CI服务器会触发自动构建,并执行运行SonarQube分析所需的SonarScanner,并推送分析报告到SonarQube Server,数据存储到SonarQube配置的数据库。开发人员通过SonarQube UI评审,评论他们的问题,以管理和减少技术债务。并且经理从分析中接收报告。

Mac环境安装Sonar

Mac环境

12
复制代码
MacOS:10.15.5   java:1.8.0_111
复制代码

重点说明
安装不同版本的SonarQube有不同的要求。
1.例如SonarQube 7.9之后数据库就不再支持MySQL了。所以按照本文安装要先看下你要安装SonarQube对应版本的要求。这个也是我一开始,安装最新版本SonarQube,数据库配置了MySQL,所以服务一直没有起来的原因。
2.Sonar 7.9及更高版本需要JAVA 11。

同事和我说安装SonarQube用Docker方便一些,我为了在我自己电脑上搭建Sonar的环境,选择了低一点的版本。

我使用的是SonarQube:7.5 和 sonar-scanner-4.3.0.2102
[](https://kingdomrain002.github...

[

](https://kingdomrain002.github...

环境配置大致分为以几个步骤
1.下载SonarQube server
2.下载SonarScanner
3.配置环境变量
4.配置数据库
5.下载Swift/OC的插件
6.启动SonarQube server

1.下载SonarQube server

将sonarqube-enterprise-7.5.zip解压,放在/usr/local目录下,建议重新命名删掉版本后缀。

2.下载SonarScanner

将sonar-scanner-cli-4.4.0.2170-macosx.zip解压,放在/usr/local目录下,建议重新命名删掉版本后缀。

如下图所示
[](https://kingdomrain002.github...

[

](https://kingdomrain002.github...

3.配置环境变量

打开命令行工具

12
复制代码
cd ~/   open .bash_profile
复制代码

添加如下配置,并保存。

1234567
复制代码
# add sonar-scannersSONAR_RUNNER_HOME=/usr/local/sonar-scannerPATH=$PATH:$SONAR_RUNNER_HOME/bin# add sonarqubeSONARQUBE_HOME=/usr/local/sonarqube/PATH=$PATH:$SONARQUBE_HOME/bin/macosx-universal-64
复制代码

在终端中执行一下命令

1
复制代码
source ~/.bash_profile
复制代码

终端输入命令 sonar-scanner -v,显示如下

12345
复制代码
INFO: Scanner configuration file: /usr/local/sonar-scanner/conf/sonar-scanner.propertiesINFO: Project root configuration file: NONEINFO: SonarScanner 4.3.0.2102INFO: Java 11.0.3 AdoptOpenJDK (64-bit)INFO: Mac OS X 10.15.5 x86_64
复制代码

4.配置数据库

我本机MySQL的版本如下

1
复制代码
mysql  Ver 14.14 Distrib 5.7.18, for macos10.12 (x86_64) using  EditLine wrapper
复制代码

打开终端,输入 mysql -u root -p ,再输入数据库密码,进入MySql,输入下面sql语句创建sonar所需的数据库。

12345
复制代码
CREATE DATABASE sonar CHARACTER SET utf8 COLLATE utf8_general_ci; CREATE USER 'sonar' IDENTIFIED BY 'sonar';GRANT ALL ON sonar.* TO 'sonar'@'%' IDENTIFIED BY 'sonar';GRANT ALL ON sonar.* TO 'sonar'@'localhost' IDENTIFIED BY 'sonar';FLUSH PRIVILEGES;
复制代码

继续输入输入 mysql> show databases ; 检查sonar所需的数据库是否创建成功。如果创建成功,显示如下表。

12345
复制代码
+--------------------+| Database           |+--------------------+| sonar              |+--------------------+
复制代码

Sonarqube目录下找到conf/sonar.properties文件,编辑文件加入对应数据库的配置。
[](https://kingdomrain002.github...

[0.4.6

](https://kingdomrain002.github...

sonar.properties文件,如下配置

123456789
复制代码
sonar.jdbc.username=rootsonar.jdbc.password=yourMySQLPasswordsonar.jdbc.url=jdbc:mysql://localhost:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance&useSSL=falsesonar.jdbc.maxActive=60sonar.jdbc.maxIdle=5sonar.jdbc.minIdle=2sonar.jdbc.maxWait=5000sonar.jdbc.minEvictableIdleTimeMillis=600000sonar.jdbc.timeBetweenEvictionRunsMillis=30000
复制代码

说明:刚下载下来的Sonarqube,conf/sonar.properties的文件里面的内容都是注释掉的。需要根据自己情况配置sonar.properties中的信息。

5.下载Swift/OC的插件

下载Swift/OC的插件

我是用的是 0.4.6 版本,如下图所示
[](https://kingdomrain002.github...

[0.4.6

](https://kingdomrain002.github...

将下载下来的backelite-sonar-swift-plugin-0.4.6.jar,放到SonarQube/extensions/plugins/目录下,如图所示
[](https://kingdomrain002.github...

[

](https://kingdomrain002.github...

swift插件使用,还有一些需要安装的要求,如下所示:

123456789
复制代码
a Mac with Xcode 7 or +SonarQube and SonarQube Scannerxcpretty (see instructions below)SwiftLint (HomeBrew installed and brew install swiftlint). Version 0.3.0 or above.Tailor (HomeBrew installed and brew install tailor). Version 0.11.1 or above.slather (gem install slather). Version 2.1.0 or above (2.4 since Xcode 8.3).lizard (PIP installed and sudo pip install lizard)OCLint installed. Version 0.11.0 recommended (0.13.0 since Xcode 9).Faux Pas command line tools installed (optional)
复制代码

推荐使用HomeBrew安装,比如lizard不支持brew安装,就按照lizard文档的步骤进行安装。

说明:
如果你使用了zsh,并且已经安装了lizard,但是终端运行报错原因zsh: command not found

解决这个方案:在.zshrc中添加一行

12
复制代码
# User configurationsource ~/.bash_profile
复制代码

6.启动SonarQube server

1
复制代码
sonar.sh console
复制代码

浏览器输入http://localhost:9000/,可以看到管理台界面。如下图所示
[](https://kingdomrain002.github...

[管理台界面

](https://kingdomrain002.github...

输入admin/admin 登录管理台。

iOS Demo工程(demo project)

demo project

iOS工程创建和配置可以参考这篇文章sonarqube-integration-with-ios的Integrate with XCode project部分。

重点说明一下:工程中需要sonar-project.properties,最好从插件的官网下载。我发现sonarqube-integration-with-ios文章链接里面的sonar-project.properties文件和最新插件的官网提供sonar-project.properties已经有点不一样了。我们这里还是按照插件官网提供的为准。

sonar-project.properties和run-sonar-swift.sh 从插件官网下图所示的地方下载:
[](https://kingdomrain002.github...

[

](https://kingdomrain002.github...

到了最激动人心的时候了,我们cd到工程中。执行 sh run-sonar-swift.sh -v

执行完成,浏览器登录http://localhost:9000/,就可以看到如下结果
[](https://kingdomrain002.github...

[

](https://kingdomrain002.github...

[

](https://kingdomrain002.github...

待研究和实践的事项

  1. 自定义扫描规则 如何新增规则
  2. sonarQube部署在一台服务器(lunix)上,而SonarScanner在另外一台服务器(mac os)上,并尝试使用Docker安装。
  3. 示范视频(Demonstration video)

蓝天
32 声望5 粉丝