iOS Sonar集成流程详解

简介:

所有文章目录:http://my.oschina.net/ChenTF/blog/677112

本篇文章地址:  http://my.oschina.net/ChenTF/blog/708646

对您有帮助的话, 还请"赞" 一下哦, 有问题可留言或加QQ群:323276186

关于XCode8的兼容方案, 请看我的这篇文章:https://my.oschina.net/ChenTF/blog/80656

1. Sonar介绍

行业内提到"代码质量管理, 自动化质量管理", 一般指的都是通过Sonar来实现。本文的目标是实现在Sonar上显示出iOS项目, 先看张最终的效果图:

1240

用Sonar能够实现什么?

技术债务(sonar根据"规则"扫描出不符合规则的代码)

覆盖率(单元测试覆盖率)

重复(重复的代码, 有利于提醒封装)

结构

问题1: "规则"指的是什么?

在Sonar工具中配置检测工具(规则), 然后sonar根据规则检测"质量报告文件", 得出问题数目。 比如本文配置的规则是OCLint

问题2: 技术债务的天数怎么得出?

每个规则都有对应的处理时间, 最后:问题类型1数目 * 对应时间 + 问题类型2数目 * 对应时间 +... 得到时间。

2. 概述

Sonar原生并不支持iOS, 所以就需要我们自己按照Sonar原理来安装各个工具, 并将各个工具连接起来, 生成质量结果, 并由Jenkins来实现自动化执行。

但由于涉及到的知识范围很广, 不仅需要iOS开发技术, 还需要运维知识和各个命令工具的使用方法。 而且国内外的资料少的相当可怜, 没有最佳实践, 没有专门的第三方平台, 造成很多东西都是一步步试错出来的, 一步一坎, 所以用了很长时间。

不过最后都将每个工具, 每个步骤打通, 将各个工具连接起来, 整理成.sh脚本 和 .properties配置文件, 这样在后续新添项目时会很轻松。

3. 宏观介绍

3.1 配置关系图

1240

3.2 涉及到的知识点

XCTool工具

OClint工具

Gcovr工具

Git, SVN命令

Linux命令

Jenkins工具

Sonar工具

Shell语法

Sonar-runner工具

3.3 关系逻辑讲解

每个项目添加一个配置文件(.properties), 为了在Jenkins上调用命令时能自动填充项目设置;

在Jenkins上安装各个工具(XCTool, OCLint, gcovr, sonar-runner) 与 .sh脚本, Jenkins服务器可以从代码仓库clone下代码, 然后通过.sh脚本与.properties配置文件来调用各个“工具”, 然后每个项目生成对应的“文件”;

在 .sh脚本 最后会通过sonar-runner将生成的 ”文件” 传给Sonar服务器, Sonar服务器以图形化的形式显示出对应的结果。

具体传递给哪个sonar服务器与项目名, 都是在.properties中进行配置

4.环境配置

4.1 基础知识

其实Sonar的展示是将一系列的报告文件转换得到的, 文件又是通过各个工具生成的, 所以需要先安装工具。

涉及到的工具包括(1.xctool 2.oclint, 3.gcovr, 4.sonar-runner), 虽然涉及的工具比较多, 每个用法都可详细的单独讲, 但不建议在开始时就深入了解这些, 本文会将用到的地方进行讲解, 后续深入了解请看给出的推荐资料。

在接下来的步骤中, 需要具备基础的Linuxl知识与Shell知识, 建议有空的话先学学。

Linux教程:http://c.biancheng.net/cpp/html/2726.html

Shell教程:http://c.biancheng.net/cpp/view/6994.html

4.2 工具-HomeBrew

“gem管理器”, 通过该工具可以安装别的gem工具, 类似cocoapods。

安装方法:http://brew.sh/index_zh-cn.html

详细介绍:https://github.com/Homebrew/brew/blob/master/share/doc/homebrew/README.md#readme

有了此工具后, 以下的工具都可通过该工具来安装, 正确的使用方式是先search 工具, 再install工具

4.3 工具-XCTool

此工具是用来代替XCode在服务器上执行Build, Test等命令, 类似xcodebuild。

安装方法:$brew install xctool

详细介绍:https://github.com/facebook/xctool

4.4  工具-OCLint

OCLint是一个静态分析工具, 可以检测OC代码, 发现语法漏洞。用该工具来生成代码质量报告(技术债务)。

安装方式:

$ brew install Caskroom/cask/oclint

$ brew tap oclint/formulae

$ brew install oclint  (不走上面的命令直接install oclint的话, 下载的版本不是最新版, 文档将不能正常生成)

4.5 工具-Gcovr

该工具是用来生成单元测试覆盖率的文档的

安装方式: $brew install gcovr

4.6 环境-JDK

教程:http://jingyan.baidu.com/article/ce09321b7c111f2bff858fea.html

5.Jenkins

Jenkins一般被称为"构建器", 说简单点就是 "定时触发 + 配置任务"。Jenkins可以通过协同很多别的工具工作, 本文就是通过.sh(脚本)来协同SVN/Git 与 各个工具, 来生成文件并传给Sonar服务器。

更多Jenkins的知识具体看这两篇教程。

http://www.cnblogs.com/zz0412/p/jenkins02.html

http://www.cnblogs.com/horizonli/p/5330073.html

5.1 新建一个工程

1240

5.2 代码仓库设置

5.2.1 SVN

1240

关于credential:

Jenkins检测到当前服务器访问不了代码仓库时, 会提示你设置权限, 进入Credential, 设置账号密码就可以了。

5.2.2 Git方式

1240

git的Credentials设置:

1240

设置好username与private key(能访问git电脑的私钥)就可以了, Passphrase会自动生成。

关于公钥私钥的介绍:

一般的SSH方式是在git服务器的SSH设置里面添加自己当前电脑的公钥(id_rsa.pub)。然后当前电脑访问Git服务器时就能直接访问了。

但Jenkins需要在Git上设置好当前电脑的私钥后, 还需要将当前电脑的私钥(id_rsa)保存在Jenkins配置中。猜测是访问git时是以别的电脑来访问的。

附:

Git教程 :http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000

5.3 构建设置

Jenkins支持通过脚本构建, 一般再次设置一些环境与变量, 然后执行脚本。一般此处的设置要结合具体的脚本调用方式来决定, 所以再第六节再详细介绍。

1240

我当前的设置是这样的:

先设置环境变量

跳转到工程根目录下

把脚本copy到当前目录下

执行脚本

5.4 定时构建

可以指定每天几点执行一次, 或每周五执行一次, 当然也可以点击左上角的"立即构建"立即执行。

例: 设置为周一到周五的9点30~9点45之间进行

1240

6.更多说明

6.1 Sonar配置

本项目的配置指导来源于"https://github.com/octo-technology/sonar-objective-c", 后发现教程中的配置不好用, 最后找到这篇Fork的文章"https://github.com/mjdetullio/sonar-objective-c", 最后是按照第二篇的设置进行的。sonar的配置具体看第二篇文章

其实我对Sonar的配置不是很清楚, 先留个坑吧。 只知道最后通过runner-sonar工具将生成的文件传给了Sonar服务器, 至于Sonar的配置参数, 则是从.sonar-project.properties文件里面获取的。

附:

Sonar官网:http://www.javatips.net/blog/sonarqube-tutorial

Sonar安装:http://www.uml.org.cn/jchgj/201307251.asp

6.2 工程配置

按照教程的指导, 将run-sonar.sh和sonar-project.properties放到根目录下, 修改.properties文件的内容, 然后执行run-sonar.sh就可以了。

我是将.properties随项目走, 因为每个项目的配置不一样, 而run-sonar.sh是固定不变的, 所以放在了Jenkins服务器上, 再执行构建时将其拷贝到当前目录下。

介绍些配置过程中用到的命令, 方便大家:

$ ssh 用户名@服务器地址     // 通过bash访问远程服务器

$ scp /Users/xxx/Documents/svn/run-sonar.sh pmo-mini@111.222.2.444:~/opt/iosShell/run-sonar.sh  // 将本地的sh文件copy到远程服务器对应的位置

$ chmod u=rxw run-sonar.sh // 修改文件权限, 使其为可读可写可执行

6.3 脚本执行流程与生成物介绍

clear

build

test        :     TEST-report.xml

gcovr     :     coverage-xxx.xml

oclint     :      oclint.xml

TEST-report.xml 是通过xctool的test命令生成的, 如果生成失败会有2, 3行的默认文本, 这时就可以证明是执行到test时失败了, 建议先用xcode执行测试, 把环境调通了, 更多单元测试文章, 请看我的 "iOS单元测试入门与配置"篇;

coverage-XiangMu.xml 是单测覆盖率报告, 如果你的单测覆盖率有误, 看这个文档。走完test后, 在XCode的路径文件下, 会生成项目的覆盖率报告, 然后gcovr命令根据这些报告生成覆盖率报告。 一般覆盖率报告有问题都是test环节有问题

oclint.xml 是技术债务报告, 一般build环节没有问题, 这个报告就没问题。

6.4 脚本分享

因为github上的脚本执行时到test命令就错误了, 所以将我修改后的分享出来。

没有找到能上次文件的地方, 把脚本所以内容全贴出来太浪费地方了, 就分享修改的地方吧, 大家从github上下载, 然后修改吧..

elseecho-n'Running tests using xctool'# runCommand sonar-reports/TEST-report.xml

$xctoolCmdPrefix -scheme "$testScheme" -reporter junit GCC_GENERATE_TEST_COVERAGE_FILES=YES GCC_INSTRUMENT_PROGRAM_FLOW_ARCS=YES test

# ctf:这个命令出错, 用下面的命令代替

$xctoolCmdPrefix-scheme"$testScheme"-reporter junit:TEST-report.xml GCC_GENERATE_TEST_COVERAGE_FILES=YES GCC_INSTRUMENT_PROGRAM_FLOW_ARCS=YES 

testecho-n'Computing coverage report'

# We do it for every xcodeproject (in case of workspaces)

7.成果

7.1 技术债务

1240

不仅可以显示出有多少不符合”规则”的代码片段,还能根据代码仓库的提交历史对应到时谁的问题

7.2 覆盖率

1240

可以检测到单元测试的覆盖范围,监督单元测试覆盖范围。

7.3 重复

1240

检测到相似的代码片段,提醒将常用的功能封装起来,提高重用性。

7.4 结构

1240

项目的文件结构

7.5 代码

1240

7.6 问题

1240

8.未来接入方式与成本

项目中添加.properties配置文件, 修改配置项;

在Jenkins添加对应的项目;

然后? 没有然后了。








本文转自ljianbing51CTO博客,原文链接:http://blog.51cto.com/ljianbing/1930273 ,如需转载请自行联系原作者



相关文章
|
11天前
|
安全 数据安全/隐私保护 Android开发
【05】2025年1月首发完整版-篇幅较长-苹果app如何上架到app store完整流程·不借助第三方上架工具的情况下无需花钱但需仔细学习-优雅草央千澈详解关于APP签名以及分发-们最关心的一篇来了-IOS上架app
【05】2025年1月首发完整版-篇幅较长-苹果app如何上架到app store完整流程·不借助第三方上架工具的情况下无需花钱但需仔细学习-优雅草央千澈详解关于APP签名以及分发-们最关心的一篇来了-IOS上架app
139 75
|
5月前
|
持续交付 jenkins Devops
WPF与DevOps的完美邂逅:从Jenkins配置到自动化部署,全流程解析持续集成与持续交付的最佳实践
【8月更文挑战第31天】WPF与DevOps的结合开启了软件生命周期管理的新篇章。通过Jenkins等CI/CD工具,实现从代码提交到自动构建、测试及部署的全流程自动化。本文详细介绍了如何配置Jenkins来管理WPF项目的构建任务,确保每次代码提交都能触发自动化流程,提升开发效率和代码质量。这一方法不仅简化了开发流程,还加强了团队协作,是WPF开发者拥抱DevOps文化的理想指南。
116 1
|
4月前
|
图形学 iOS开发 Android开发
从Unity开发到移动平台制胜攻略:全面解析iOS与Android应用发布流程,助你轻松掌握跨平台发布技巧,打造爆款手游不是梦——性能优化、广告集成与内购设置全包含
【8月更文挑战第31天】本书详细介绍了如何在Unity中设置项目以适应移动设备,涵盖性能优化、集成广告及内购功能等关键步骤。通过具体示例和代码片段,指导读者完成iOS和Android应用的打包与发布,确保应用顺利上线并获得成功。无论是性能调整还是平台特定的操作,本书均提供了全面的解决方案。
183 0
|
5月前
|
持续交付 jenkins C#
“WPF与DevOps深度融合:从Jenkins配置到自动化部署全流程解析,助你实现持续集成与持续交付的无缝衔接”
【8月更文挑战第31天】本文详细介绍如何在Windows Presentation Foundation(WPF)项目中应用DevOps实践,实现自动化部署与持续集成。通过具体代码示例和步骤指导,介绍选择Jenkins作为CI/CD工具,结合Git进行源码管理,配置构建任务、触发器、环境、构建步骤、测试及部署等环节,显著提升开发效率和代码质量。
112 0
|
5月前
|
Java 测试技术 容器
从零到英雄:Struts 2 最佳实践——你的Web应用开发超级变身指南!
【8月更文挑战第31天】《Struts 2 最佳实践:从设计到部署的全流程指南》深入介绍如何利用 Struts 2 框架从项目设计到部署的全流程。从初始化配置到采用 MVC 设计模式,再到性能优化与测试,本书详细讲解了如何构建高效、稳定的 Web 应用。通过最佳实践和代码示例,帮助读者掌握 Struts 2 的核心功能,并确保应用的安全性和可维护性。无论是在项目初期还是后期运维,本书都是不可或缺的参考指南。
63 0
|
5月前
|
SQL 存储 数据管理
掌握SQL Server Integration Services (SSIS)精髓:从零开始构建自动化数据提取、转换与加载(ETL)流程,实现高效数据迁移与集成——轻松上手SSIS打造企业级数据管理利器
【8月更文挑战第31天】SQL Server Integration Services (SSIS) 是 Microsoft 提供的企业级数据集成平台,用于高效完成数据提取、转换和加载(ETL)任务。本文通过简单示例介绍 SSIS 的基本使用方法,包括创建数据包、配置数据源与目标以及自动化执行流程。首先确保安装了 SQL Server Data Tools (SSDT),然后在 Visual Studio 中创建新的 SSIS 项目,通过添加控制流和数据流组件,实现从 CSV 文件到 SQL Server 数据库的数据迁移。
761 0
|
5月前
|
iOS开发 Perl
IOS集成flutter_boost 3.0常见问题
IOS集成flutter_boost 3.0常见问题
97 0
|
7月前
|
人工智能 数据安全/隐私保护 iOS开发
苹果在WWDC24上宣布的所有内容:Apple Intelligence、集成ChatGPT的Siri、iOS 18
苹果在WWDC24上宣布的所有内容:Apple Intelligence、集成ChatGPT的Siri、iOS 18
|
7月前
|
机器学习/深度学习 定位技术 开发工具
必知的技术知识:ios个推推送集成
必知的技术知识:ios个推推送集成
125 0
|
8月前
|
安全 数据管理 测试技术
网络安全与信息安全:防范漏洞、加强加密与提升安全意识深入探索自动化测试框架的设计原则与实践应用化测试解决方案。文章不仅涵盖了框架选择的标准,还详细阐述了如何根据项目需求定制测试流程,以及如何利用持续集成工具实现测试的自动触发和结果反馈。最后,文中还将讨论测试数据管理、测试用例优化及团队协作等关键问题,为读者提供全面的自动化测试框架设计与实施指南。
【5月更文挑战第27天】 在数字化时代,网络安全与信息安全已成为维护国家安全、企业利益和个人隐私的重要环节。本文旨在分享关于网络安全漏洞的识别与防范、加密技术的应用以及提升安全意识的重要性。通过对这些方面的深入探讨,我们希望能为读者提供一些实用的建议和策略,以应对日益严峻的网络安全挑战。 【5月更文挑战第27天】 在软件开发周期中,自动化测试作为保障软件质量的关键步骤,其重要性日益凸显。本文旨在剖析自动化测试框架设计的核心原则,并结合具体案例探讨其在实际应用中的执行策略。通过对比分析不同测试框架的优缺点,我们提出一套高效、可扩展且易于维护的自动

热门文章

最新文章