设为首页 收藏本站
查看: 1063|回复: 0

[经验分享] 使用Jenkins+Calabash+Cocoapods搭建iOS持续集成环境

[复制链接]

尚未签到

发表于 2018-1-9 19:21:47 | 显示全部楼层 |阅读模式




  
使用jenkins+calabash+cocoapods搭建ios持续集成环境


持续集成

  
持续集成到底是什么呢?依据敏捷大师Martin Fowler的定义:

  
持续集成是一种软件开发实践。
  在持续集成中,团队成员频繁集成他们的工作成果。一般每人每天至少集成一次,也能够多次。
  每次集成会经过自己主动构建(包含自己主动測试)的检验,以尽快发现集成错误。
  很多团队发现这样的方法能够显著降低集成引起的问题,并能够加快团队合作软件开发的速度。

  
仅仅要是开发就有分工,哪怕是自己一个写也要分成多个模块。
  随着项目越来越大,模块也越来越多,各个模块能否够征程协作就成了问题,有了持续集成,能够有例如以下优点:



  • 持续集成中的不论什么一个环节都是自己主动完毕的。无需太多的人工干预,有利于降低反复过程以节省时间、费用和工作量;

  • 持续集成保障了每一个时间点上团队成员提交的代码是能成功集成的。换言之。不论什么时间点都能第一时间发现软件的集成问题,使随意时间公布可部署的软件成为了可能;

  • 持续集成还能利于软件本身的发展趋势,这点在需求不明白或是频繁性变更的情景中尤其重要,持续集成的质量能帮助团队进行有效决策,同一时候建立团队对开发产品的信心。
  
以下就给大家介绍,怎样使用Jenkins+Calabash搭建持续集成开发环境。


环境

  
XCode 5.0
  
Mac OS X 10.9.2


Cocoapods



CocoaPods简单介绍

  
CocoaPods是一个负责管理iOS项目中第三方开源代码的工具。CocoaPods项目的源代码在Github上管理。该项目開始于2011年8月12日。经过一年多的发展。如今已经超过1000次提交,而且持续保持活跃更新。
  开发iOS项目不可避免地要使用第三方开源库。CocoaPods的出现使得我们能够节省设置和更新第三方开源库的时间。


安装Cocoapods



安装Homebrew

  
Homebrew是Mac下著名的包管理工具,RVM和以后用到xctool都须要用这个来安装,相当于Ubuntu的Apt-get。
  
安装方法是在命令行中键入
  

ruby -e "$(curl -fsSL https://raw.github.com/Homebrew/homebrew/go/install)"  

  

  
之后运行环境检查
  

brew doctor  

  

  
检查没有错误就能够使用了,假设出现错误。请參考提示进行修正。
  
确认无误后,能够安装第一个应用curl,一个用来下载的工具。
  使用命令
  

brew install curl  

  


安装RVM

  
尽管Mac默认都带有Ruby,可是有些时候使用起来非常麻烦(比如必须使用sudo来安装gem)而且仅仅有一个版本号,所以我们使用RVM来管理ruby的版本号,ruby是自己主动化測试工具calabash的执行环境,所以必需要有。
  
安装方法是命令行中键入
  

\curl -sSL https://get.rvm.io | bash -s stable  

  

  
过程中可能须要输入sudopassword。
  
使用淘宝源替换
  

sed -i .bak 's!cache.ruby-lang.org/pub/ruby!ruby.taobao.org/mirrors/ruby!' $rvm_path/config/db  

  


安装Ruby

  
使用rvm下载ruby2.0版本号
  

rvm install 2.0.0  

  

  
选用2.0.0版本号的ruby,并设置为默认
  

rvm use 2.0.0 --default  

  

  
使用淘宝源替换gem源
  

rvm source --add http://ruby.taobao.org/  
rvm source --remove https://rubygems.org/
  

  


安装Cocoapods

  
CocoaPods是一个用来帮助我们管理第三方依赖库的工具。
  它能够解决库与库之间的依赖关系。下载库的源码,同一时候通过创建一个Xcode的workspace来将这些第三方库和我们的project连接起来,供我们开发使用。
  
通过Gem安装Cocoapods
  

gem install cocoapods  

  

  
运行cocoapods的初始化
  

pod setup  

  

  
该过程须要到github上拉取specs。速度非常慢,能够喝杯咖啡慢慢等


使用Cocoapods

  
首先创建一个普通项目来演示下怎样使用Cocoapods。
  

  

  
之后在命令行里面,进入到你的项目路径
  

cd /path/to/your/project  
pod init
  

  

  
之后会在项目根文件夹下创建好Podfile,改动下Podfile的内容
  

1  
2
  
3
  
4
  

  

  

# #为Podfile的凝视行。Podfile实际上是一个ruby代码段  

platform :ios, "6.0" # platform后面跟平台和版本,这里是ios6平台  

  

# pod 'MKNetworkKit' 像这样写就能够引入第三方库了。为了简化。这里没有引入不论什么库  

  

  
在文件夹运行pod插件install命令
  

pod install  

  

  
每次使用pod install,它都会到github上更新spec库,耗费了不少时间。能够使用以下的命令跳过这个过程
  

pod install --no-repo-update  

  

  
运行之后,会提示没有引入不论什么的第三方库,不要操心(由于我们真的没有引入)。你会发现文件夹上多了integration_test.xcworkspace这个工作区文件。以后我们就都使用这个打开项目了。
  
打开后如图所看到的
  

  
恭喜您,已经能够正常使用Cocoapods了。下一步就是使用Calabash进行自己主动化測试了。


Calabash

  
Calabash是一款开源的跨平台UI測试工具。眼下支持iOS和Android。
  它使用Cucumber作为測试核心,Cucumber是一个在敏捷团队十分流行的自己主动化的功能測试工具,它使用接近于自然语言的特性文档进行用例的书写和測试,支持多语言和多平台。


安装Calabash

  

gem install calabash-cucumber  

  


安装Calabash中文支持包

  

gem install calabash-cucumber-cn  

  


新建集成測试的Target

  
又一次打开工作区,然后选择integration_test这个project。打开配置,targets中integration_test上右键进行复制。
  

  
假设出现Duplicate iPhone Target对话框。选择Duplicate Only就能够,另外一个选项是复制并转换成iPad程序。
  
之后改动目标的名称
  

  
改动项目配置
  
改动scheme
  

  

  
共享scheme,目的是在版本号管理中。让其它用户也能够获取到这些scheme
  

  
这样新的測试目标就创建好了,为什么要创建新的目标呢?



  • 不希望在公布的产品中包括測试代码

  • calabash默认启动-cal结尾的目标

引入Calabash包

  
改动Podfile文件,增加新的pod
  

1  
2
  
3
  

  

  

target 'integration_test-cal', exclusive: false do  

pod 'Calabash'  

end  

  
到命令行里。进入到自己的文件夹。运行
  

pod install --no-repo-update  

  

  
运行成功后,创建用例模板
  

calabash-ios gen  

  

  
屏幕会出现
  

1  
2
  
3
  
4
  
5
  

  

  

----------Question----------  

I'm about to create a subdirectory called features.  

features will contain all your calabash tests.  

Please hit return to confirm that's what you want.  

---------------------------  

  
按回车确认。就生成了features目录。我们的用例和測试配置都在这里了。
  你能够把features这个目录拖到项目中,方便使用xcode直接编辑,注意不要选择不论什么目标。以为这些文件根本没有必要编译和存到app中。


编写用例

  
Cucumber是使用gherkin来进行用例描写叙述的。这是一种近乎自然语言的脚本。而且对多语言有非常好的支持。详细的语法能够查阅它的官方wiki。
  
这里我们先写一个简单用例,改动features/my_first.feature
  

1  
2
  
3
  
4
  
5
  
6
  
7
  
8
  
9
  

  

  

# language: zh-CN  

功能: 执行基准測试  

做为一个iOS开发人员  

我希望有一个简单的基准測试  

使我能够高速的开启測试  

  

场景: 基准測试  

假如 应用正在执行  

那么 我把应用切到后台3秒  

  
是的。就是这种用例!
  你能够书写自然语言来描写叙述一个功能。calabash就使用cucumber帮您測试了,奇妙吧。
  
接下来还须要改动features/step_definitions/calabash_steps.rb,在这里包括中文解析,在最以下加上
  

require 'calabash-cucumber-cn/calabash_steps.rb'  

  

  
这个包里面带有中文的功能说明,详细能够看文档。


运行用例

  
激动人心的时刻最终到了。首先编译integration_test-cal这个scheme,然后使用模拟器执行一下。在模拟器打开Accessibility Inspector。模拟器->设置(Settings)–>通用(General)–>辅助功能(Accessibity)–>Accessibility Inspector开启。
  
打开命令行。进到文件夹中运行命令
  

cucumber  

  

  
可能须要输入password。之后就看到模拟器又一次载入,并依照我们的用例開始自己主动运行了。
  
运行结束后。会有下图的结果。
  

  
恭喜我们的2个步骤都成功了。快点用很多其它的功能和用例来測试吧^_^。
  
到这里,每一个开发者都能够通过cucumber命令来对自己写的内容进行測试了。这和我们的持续集成另一段距离,那么接下来,我们介绍Jenkins这个持续集成web工具,实现真正的持续集成。


Jenkins

  
Jenkins 是一个开源项目,提供了一种易于使用的持续集成系统,使开发人员从繁杂的集成中解脱出来,专注于更为重要的业务逻辑实现上。同一时候 Jenkins 能实施监控集成中存在的错误,提供具体的日志文件和提醒功能,还能用图表的形式形象地展示项目构建的趋势和稳定性。


XCTool

  
使用Jenkins进行持续集成之前,另一个前提,就是编译这个过程须要自己主动化,中途用xcode手动点的不行,所以我们须要有命令能够一次编译我们的project。这里我们使用xctool这个工具。是facebook写的一个集成工具,用来编译和打包程序的。
  
安装方法是使用homebrew。在命令行运行
  

brew install xctool  

  

  
安装好在程序文件夹下測试一下能否够编译
  

xctool -workspace integration_test.xcworkspace -scheme integration_test-cal -sdk iphonesimulator7.1 clean build  

  

  
注意这里的sdk每一个人可能不同。要依据本机安装的sdk来写 。 查看的方法是运行命令
  

xcodebuild -showsdks  

  

  
假设显示**BUILD SUCCEEDED **那么能够进入下一步了。


Jenkins

  
安装jenkins还是使用brew
  

brew install jenkins  

  

  
安装好之后,能够通过使用命令行启动
  

java -jar /usr/local/opt/jenkins/libexec/jenkins.war  

  

  
假设想自己主动启动。须要先运行下面命令。创建启动项
  

ln -sfv /usr/local/opt/jenkins/*.plist ~/Library/LaunchAgents  

  

  
能够编辑一下~/Library/LaunchAgents/homebrew.mxcl.jenkins.plist这个文件
  

open ~/Library/LaunchAgents/homebrew.mxcl.jenkins.plist  

  

  
想要让局域网都能够訪问,须要把—httpListenAddress=127.0.0.1改成自己的局域网IP
  
手动启动启动项能够运行
  

launchctl load ~/Library/LaunchAgents/homebrew.mxcl.jenkins.plist  

  

  
之后用浏览器就能够訪问http://localhost:8080/来登录jenkins了
  

  
Jenkins启动之后,能够配置用户权限,可是我们为了简单。先不配置用户。


Jenkins Plugin

  
Jenkins有一个非常方便的功能,就是能够通过插件形式进行扩展,为了支持我们的持续集成。我们须要先安装必要的插件。
  
进入Jenkins网页的系统管理->插件管理->高级。找到右下角的“马上获取”就能够获得全部的插件信息了。
  

  
更新好之后,在可选插件里面,安装例如以下插件
  

Git Server Plugin               #Git的支持,假设用svn就不须要了  
Git Client Plugin               #Git的支持。假设用svn就补须要了
  
Rvm                             #载入RVM环境变量以有用ruby的cucumber命令
  
Cucumber Test Result Plugin     #解析Cucumber的測试报告
  

  

  
记得安装时勾选更新完自己主动重新启动
  
至此,我们持续集成的全部环境应该都满足了。


托管你的项目

  
Jenkins一定要从一个地方获得一份软件副本的,所以,要想使用持续集成,必需要有一个版本号管理工具,在Jenkins中成为scm。我们的样例使用git。而且我已经将測试project上传到CODEserver上,地址在这里:https://code.csdn.net/zangcw/integration_test


创建一个项目

  
当你的源码已经在代码托管server上之后,如今就能够在jenkins创建一个项目了。
  
我们创建一个自由风格的软件项目
  

  
而且对其配置
  

  
主要配置例如以下内容:



  • 源代码管理,演示样例中配置为https://code.csdn.net/zangcw/integration_test.git

  • 构建环境。要勾选RVM,否则没有办法在脚本中运行cucumber这个命令

  • 构建脚本,选择Execute shell,内容例如以下。请依据须要自行改动
  

1  
2
  
3
  
4
  

  

  

cd $WORKSPACE  

/usr/local/bin/xctool -workspace integration_test.xcworkspace -scheme integration_test-cal -sdk iphonesimulator7.1 clean build  

mkdir -p test-reports  

cucumber --format json -o test-reports/cucumber.json  




  • 构建后的操作,选择Publish Cucumber test result report。指定报告的文件夹test-reports/cucumber.json
  
之后点击应用,即完毕了配置
  



马上构建

  
还在等什么?立即点击立即构建吧。
  。。
  

  
等待构建的过程中,我们能够查看控制台输出
  

  
模拟器也会在中途弹出。然后自己主动关闭
  
构建结束后,我们能够看到构建结果
  

  
结果展示了变更、由谁触发的构建和測试报告,很多其它的信息大家能够自行挖掘。总之构建是完毕了。
  
想要进行持续构建。须要设置成每一个一段时间自己主动构建。在Build periodically中配置就可以。


下一步该做什么?

  
在淌通了这一整套流程之后,事实上还是有非常多事情等着我们来做的。以下是几个样例:



  • 为Jenkins创建用户管理

  • 改动脚本,自己主动存放ipa并上传到特定server

  • 配置构建策略,每日1次,或者多次,或者监听git变化,有上传就构建

  • 配置邮件策略,使大家及时获得反馈
  
总之,拥抱集成測试吧
  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-433327-1-1.html 上篇帖子: 使用Jenkins自动编译 .net 项目 下篇帖子: CentOS6下搭建jenkins+maven+git持续集成系统
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表