sonar代码检查_sonar-iOS的实践

架构与整合(Architecture and Integration)
iOS开发交流技术群:563513413,不管你是大牛还是小白都欢迎入驻 ,分享BAT,阿里面试题、面试经验,讨论技术, 大家一起交流学习成长!
先简单介绍一下SonarQube的总览
SonarQube是由四部分组成的,如下图所示:

a1d44ee1322f85c18635bb8ae9ca824e.png


1.SonarQube Server
2.一个SonarQube的数据库
3.服务器上安装了多个SonarQube插件,可能包括语言,SCM,集成,身份验证和管理插件
4.在构建/持续集成服务器上运行一个或多个SonarScanner,以分析项目
SonarQube在CI中位置
以下架构显示了SonarQube如何与其他ALM工具集成以及使用SonarQube的各种组件的位置

5e24fde8f74e27dae8e35813a43c547c.png


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

12
复制代码
MacOS:10.15.5 java:1.8.0_111
复制代码
12
复制代码
MacOS:10.15.5 java:1.8.0_111
复制代码
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

84a993f2724063d557a8527a33ad0688.png


环境配置大致分为以几个步骤
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目录下,建议重新命名删掉版本后缀。
如下图所示

e03e0c9019b6715608af4011f025b97d.png


3.配置环境变量
打开命令行工具

12
复制代码
cd ~/ open .bash_profile
复制代码
12
复制代码
cd ~/ open .bash_profile
复制代码
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
复制代码
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
复制代码
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
复制代码
1
复制代码
source ~/.bash_profile
复制代码
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
复制代码
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
复制代码
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
复制代码
1
复制代码
mysql Ver 14.14 Distrib 5.7.18, for macos10.12 (x86_64) using EditLine wrapper
复制代码
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;
复制代码
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;
复制代码
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 |+--------------------+
复制代码
12345
复制代码
+--------------------+| Database |+--------------------+| sonar |+--------------------+
复制代码
12345
复制代码
+--------------------+| Database |+--------------------+| sonar |+--------------------+
复制代码


Sonarqube目录下找到conf/sonar.properties文件,编辑文件加入对应数据库的配置。

71332263eee1e4b2aaa5ba91e8f9cb30.png


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
复制代码
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
复制代码
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 版本,如下图所示

1cb7067b0006ece89868664f34b706fd.png


将下载下来的backelite-sonar-swift-plugin-0.4.6.jar,放到SonarQube/extensions/plugins/目录下,如图所示

330c969bc156e851bca62c30189d0816.png


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)
复制代码
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)
复制代码
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
复制代码
12
复制代码
# User configurationsource ~/.bash_profile
复制代码
12
复制代码
# User configurationsource ~/.bash_profile
复制代码


6.启动SonarQube server

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


浏览器输入http://localhost:9000/,可以看到管理台界面。如下图所示

6515c8ce75618a1037a193d04e2cb7e0.png


输入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 从插件官网下图所示的地方下载:

6c5fd696b4fe754ca97209afcc691cd5.png


到了最激动人心的时候了,我们cd到工程中。执行 sh run-sonar-swift.sh -v
执行完成,浏览器登录http://localhost:9000/,就可以看到如下结果

794f1b8fda87bc2f3f8f9c2caef45895.png

26903c6b2d56aebeb6c8519c85a464bd.png


待研究和实践的事项

  1. 自定义扫描规则 如何新增规则
  2. sonarQube部署在一台服务器(lunix)上,而SonarScanner在另外一台服务器(mac os)上,并尝试使用Docker安装。
  3. 示范视频(Demonstration video)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
这段代码是一个条件语句,根据条件的结果来执行相应的操作。如果前面的条件不满足,则执行else语句块中的操作。 首先,调用函数vd_OBJCMN_UPDATE_REF来更新引用值,参数为u2_TFTWARNING_ANIM_STS_TBL[TFTWARNING_ANIM_TYPE9_CSR_BASE][u1_a_anim_sts]和OBJCMN_SET_ON_REF。 然后,进行一个for循环,循环变量为u1_t_cnt从0到TFTWARNING_SIDE_SONAR_NUM。 在循环体内部,首先调用函数u1_s_TftWarningSonarSideDispSts来获取u2_TFTWARNING_SONAR_SIDE_TBL[u1_t_cnt]对应的状态值,并将结果存储在u1_t_sonar_side_sts中。 接下来,再次进行条件判断。如果u1_t_sonar_side_sts大于TFTWARNING_SONAR_STS_OFF并且小于TFTWARNING_SIDE_SONAR_NUM,则执行一系列操作。 如果u1_t_sonar_side_sts等于TFTWARNING_SONAR_STS_NEAR,并且u1_t_csr_sts等于TFTWARNING_SONAR_STS_4500_NEAR,则调用函数vd_OBJCMN_UPDATE_REF来更新引用值,参数为u2_TFTWARNING_SONAR_PID_TBL[u1_t_cnt][u1_a_anim_sts]和OBJCMN_SET_ON_REF。 否则,如果u1_t_sonar_side_sts不等于TFTWARNING_SONAR_STS_NEAR,则调用函数vd_OBJCMN_UPDATE_REF来更新引用值,参数为u2_TFTWARNING_SONAR_PID_TBL[u1_t_cnt][u1_a_anim_sts]和OBJCMN_SET_ON_REF。然后,调用函数vd_OBJCMN_UPDATE_STT来更新状态值,参数为u2_TFTWARNING_SONAR_PID_STT_TBL[u1_t_cnt][u1_a_anim_sts]和u1_TFTWARNING_SONAR_SIDE_STT_TBL[u1_t_sonar_side_sts]。 总体来说,这段代码根据一定条件更新一些引用值和状态值,并且在循环中进行了多次操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值