热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Sonarqube&ObjectiveC环境搭建

前言团队开发中,代码质量的把关,往往决定了一个团队的开发维护效率。成员的增长,业务的扩大,不同风格、不严谨的代码,直接导致后续维护的高成本。每个团队都有自己的一套代码检查方式。对于

前言

团队开发中,代码质量的把关,往往决定了一个团队的开发维护效率。成员的增长,业务的扩大,不同风格、不严谨的代码,直接导致后续维护的高成本。
每个团队都有自己的一套代码检查方式。对于小团队,也有很多高效可扩展的开源工具。结合自己的实践,介绍下一种解决方案:sonarqube + gerrit + Jenkins。
本篇介绍Mac上sonarqube的安装,以及添加开源plugin对objective c支持。环境配置比较多,文字较长…

所需安装工具一览
  • homebrew
  • Java JDK (推荐jdk而不是jre,最新的即可)
  • maven
  • xcode
  • xcpretty
  • sonarqube
  • sonar-scanner
  • oclint
  • SonarQube Plugin for Objective C

注: 安装顺序推荐如上排序。建议先阅读下文,了解各工具作用后再进行安装

sonarqube 安装与使用

SonarQube® software (previously called Sonar) is an open source quality management platform, dedicated to continuously analyze and measure technical quality, from project portfolio to method. If you wish to extend the SonarQube platform with open source plugins, have a look at our plugin library.

1. 环境要求(具体见官网)

* at least 2GB of RAM to run efficiently and 1GB of free RAM for the OS
* disk space you need will depend on how much code you analyze
* Database: [MySQL](http://www.mysql.com/)
* Web Browser

2. 安装sonarqube
  • download Download Page
  • Unzip & execute: sonar.sh console(解压后目录里有系统对应脚本)

# 主要命令一览, 建议添加alias到~/.bash_profile
./sonar.sh console #Debug信息
./sonar.sh start #启动服务
./sonar.sh stop #停止服务
./sonar.sh restart #重启服务

  • Log in to http://localhost:9000 & 默认登录/密码: admin/admin
  • follow the tutorial to analyze your first project (无法添加project,需要安装数据库和scanner)
  • 汉化方式:setting->market->搜Chinese
3. 安装 & 配置数据库(这里使用MySQL)

sonarqube内嵌有数据库,但不能有额外操作,所以需要另外添加数据库

# 直接使用homebrew,homebrew安装方式请自查
brew install mysql #安装
mysql.server start #启动
mysql_secure_installation #基本配置
brew services start mysql #配置为系统服务

mysql管理gui,optional:

  • sequelpro
  • phpmyadmin

配置sonar的用户和数据库实例:

  • 创建sonar用户和数据库sonar,赋予sonar权限

mysql -u root -p #进入MySQL, root默认密码为空
CREATE DATABASE sonar;
CREATE USER 'sonar'@'localhost' IDENTIFIED BY '你要设置的密码’;
GRANT ALL PRIVILEGES ON sonar_qube.* TO 'sonar'@'localhost’;
FLUSH PRIVILEGES;

修改sonarqube数据库配置

  • 到sonarquebe目录配置\conf\sonar.properties中数据库设置,原文件相应行被注释

sonar.jdbc.username=sonar
sonar.jdbc.password=你要设置的密码
sonar.jdbc.url=jdbc:mysql://localhost:3306/sonar_qube?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useCOnfigs=maxPerformance&useSSL=false

  • restart sonarqube server,正常启动,且不再有内嵌数据库提示
4. 安装sonar-scanner & 配置

The SonarQube Scanner is recommended as the default launcher to analyze a project with SonarQube.

  • Installation
  • 解压到安装目录,推荐添加bin目录路径到$PATH

export PATH=`pwd`/bin:$PATH >> ~/.bash_profile # 或直接copy bin路径到~/.bash_profile

  • 配置安装目录下的sonar-scanner.properties & 添加host.url

sonar.host.url=http://localhost:9000

对需检测project执行scanner命令
到project所在目录,添加sonar-project.properties(注意命名不要错😪)。添加project相关信息sonar-project.properties中,例如

sonar.projectKey=testOC #projectKey required
sonar.sources=/Users/hotacool/dev/RACTest #project source required
sonar.projectName=test OC #server 展示名字
sonar.projectVersion=1.0 # version

在该工程sonar-project.properties所在目录下,执行sonar-scanner,进行扫描
打开server(http://localhost:9000/projects),可以看到projects扫描结果

5. oclint 安装 & 使用

sonarqube对objectivec的代码检测,需要依赖oclint对xcode工程的编译log的分析结果。简单说下过程,对xcode工程进行xcodebuild,输出编译log,oclint对编译log进行分析,输出xml,sonarqube根据xml来显示可视化结果。
OCLint is a static code analysis tool for improving quality and reducing defects by inspecting C, C++ and Objective-C code and looking for potential problems.

  • 安装方式见官网。
    • Homebrew 简单,但可能外网连不上
    • 推荐直接download包,解压执行文件路径加入$PATH
  • 安装完毕,终端执行oclint
    • xcodebuild | tee xcodebuild.log | xcpretty -r json-compilation-database
    • 编译工程并输出log,格式化log为json文件
    • Xcodebuild 指令需要添加编译相关参数

xcodebuild archive -workspace 项目名称.xcworkspace
-scheme 项目名称
-configuration 构建配置
-archivePath archive包存储路径
CODE_SIGN_IDENTITY=证书
PROVISIONING_PROFILE=描述文件UUID

  • oclint的执行,需要依赖xcpretty
  • Xcpretty 是编译log format工具,直接gem安装

sudo gem install xcpretty

  • -r json-compilation-database 制定的数据的输出格式为json格式。输出的数据为build/reports/compilation_db.json
  • 使用oclint时需要将build/reports/compilation_db.json 重新命名为 compile_commands.json 并移动至当前目录(工程文件目录),执行:

oclint-json-compilation-database -- -report-type pmd -o oclint.xml #输出xml
oclint-json-compilation-database -e Pods -v -- -report-type html -o report.html #输出HTML,oclint使用xml

6. SonarQube Plugin for Objective C
  • Sonarqube market有收费plugin可供安装,but,感受一下:

    《Sonarqube & ObjectiveC 环境搭建》 image.png

  • 选用开源https://github.com/Backelite/sonar-objective-c(还在保持更新的),不过可能存在一些坑,需要自填。笔者fork了一下,更新了一下rule:Hotacool/sonar-objective-c。下面以Backelite为例:
    • github download sonar-objective-c,unzip
    • Java代码,需要maven来编译jar包,安装maven:

    brew install maven

    • sonar-objective-c 目录(pom.xml所在目录)编译:

    mvn package

    • /sonar-objective-c-plugin/target 目录下输出backelite-sonar-objective-c-plugin-0.6.2.jar
    • Copy jar包到sonarqube安装目录下的/extensions/plugins文件夹
    • 修改project的sonar-project.properties(参照sonar-objective-c-plugin的/sample/sonar-project.properties)

    sonar.objectivec.oclint.report=oclint.xml
    sonar.objectivec.project=myApp.xcodeproj
    sonar.objectivec.appScheme=myApp
    sonar.objectivec.excludedPathsFromCoverage=.*Tests.*

    • 重启sonarqube server & 重新运行sonar-scanner
    • 在server上可看到objectivec代码被检查,bingo~
    • 可能存在问题:
      • ERROR: The rule ‘OCLint:compiler warning’ does not exist.
      • 原因是开源的sonar-objective-c plugin没有包含这条rule,而oclint检出了这个问题。几种解决方案:
        • oclint.xml 去掉相关报错
        • 修改sonar-objective-c plugin,添加rule并打包—推荐
          • 实际上,rule文件被存放在/sonar-objective-c-plugin/src/main/resources/org/sonar/plugins/oclint文件夹下,包含两个文件:profile-oclint.xml 和 rules.txt
          • 参照其他rule,添加compiler warning即可
          • 重新打jar包、替换、重启server 、 sonar-scanner…

参考链接:

  1. iOS 测试 iOS 静态代码扫描平台 Sonarqube 实战 Objective-C、Swift
  2. jenkins和sonar环境配置MAC版
  3. ERROR: The rule ‘OCLint:compiler warning’ does not exist.
  4. Objective C静态代码扫描和代码质量管理 OClint + SonarQube

推荐阅读
  • 本文由编程笔记#小编为大家整理,主要介绍了logistic回归(线性和非线性)相关的知识,包括线性logistic回归的代码和数据集的分布情况。希望对你有一定的参考价值。 ... [详细]
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • r2dbc配置多数据源
    R2dbc配置多数据源问题根据官网配置r2dbc连接mysql多数据源所遇到的问题pom配置可以参考官网,不过我这样配置会报错我并没有这样配置将以下内容添加到pom.xml文件d ... [详细]
  • 搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的详细步骤
    本文详细介绍了搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的步骤,包括环境说明、相关软件下载的地址以及所需的插件下载地址。 ... [详细]
  • 本文详细介绍了MysqlDump和mysqldump进行全库备份的相关知识,包括备份命令的使用方法、my.cnf配置文件的设置、binlog日志的位置指定、增量恢复的方式以及适用于innodb引擎和myisam引擎的备份方法。对于需要进行数据库备份的用户来说,本文提供了一些有价值的参考内容。 ... [详细]
  • 使用Ubuntu中的Python获取浏览器历史记录原文: ... [详细]
  • 关于我们EMQ是一家全球领先的开源物联网基础设施软件供应商,服务新产业周期的IoT&5G、边缘计算与云计算市场,交付全球领先的开源物联网消息服务器和流处理数据 ... [详细]
  • Tomcat/Jetty为何选择扩展线程池而不是使用JDK原生线程池?
    本文探讨了Tomcat和Jetty选择扩展线程池而不是使用JDK原生线程池的原因。通过比较IO密集型任务和CPU密集型任务的特点,解释了为何Tomcat和Jetty需要扩展线程池来提高并发度和任务处理速度。同时,介绍了JDK原生线程池的工作流程。 ... [详细]
  • 本文介绍了在Windows环境下如何配置php+apache环境,包括下载php7和apache2.4、安装vc2015运行时环境、启动php7和apache2.4等步骤。希望对需要搭建php7环境的读者有一定的参考价值。摘要长度为169字。 ... [详细]
  • Java学习笔记之面向对象编程(OOP)
    本文介绍了Java学习笔记中的面向对象编程(OOP)内容,包括OOP的三大特性(封装、继承、多态)和五大原则(单一职责原则、开放封闭原则、里式替换原则、依赖倒置原则)。通过学习OOP,可以提高代码复用性、拓展性和安全性。 ... [详细]
  • Java在运行已编译完成的类时,是通过java虚拟机来装载和执行的,java虚拟机通过操作系统命令JAVA_HOMEbinjava–option来启 ... [详细]
  • mysql-cluster集群sql节点高可用keepalived的故障处理过程
    本文描述了mysql-cluster集群sql节点高可用keepalived的故障处理过程,包括故障发生时间、故障描述、故障分析等内容。根据keepalived的日志分析,发现bogus VRRP packet received on eth0 !!!等错误信息,进而导致vip地址失效,使得mysql-cluster的api无法访问。针对这个问题,本文提供了相应的解决方案。 ... [详细]
  • 本文讨论了Kotlin中扩展函数的一些惯用用法以及其合理性。作者认为在某些情况下,定义扩展函数没有意义,但官方的编码约定支持这种方式。文章还介绍了在类之外定义扩展函数的具体用法,并讨论了避免使用扩展函数的边缘情况。作者提出了对于扩展函数的合理性的质疑,并给出了自己的反驳。最后,文章强调了在编写Kotlin代码时可以自由地使用扩展函数的重要性。 ... [详细]
  • 浏览器中的异常检测算法及其在深度学习中的应用
    本文介绍了在浏览器中进行异常检测的算法,包括统计学方法和机器学习方法,并探讨了异常检测在深度学习中的应用。异常检测在金融领域的信用卡欺诈、企业安全领域的非法入侵、IT运维中的设备维护时间点预测等方面具有广泛的应用。通过使用TensorFlow.js进行异常检测,可以实现对单变量和多变量异常的检测。统计学方法通过估计数据的分布概率来计算数据点的异常概率,而机器学习方法则通过训练数据来建立异常检测模型。 ... [详细]
author-avatar
萧鸿锵_976
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有