说到持续集成环境,当然少不了大名鼎鼎的Jenkins,当然在苹果的Mac平台上,也可以搭建Jenkins持续集成环境,这里我不多说,网上书上都有教程。苹果自家也搞了一个持续集成的工具:OS X Server,当然OS X Server的功能远不止持续集成,还可以缓存分发下载,邮件服务器等等,OS X Server界面相当简单,操作也基本上都是傻瓜式的。前些时刚来公司,老大让我自己学学搭建集成测试环境,所以才去网上自己摸索。虽然最终老大的老大并不愿意掏银子买一个好点的Mac当服务器(呵呵。。。),以至于最终公司并没有建成iOS开发的持续集成环境。但是这里还是把我这一段时间的摸索记录下来,好歹干了活的。
实际上网上关于OS X Server的文章并不多,最权威的是苹果的官方文档了:Xcode Server and Continuous Integration Guide: Install OS X Server and Configure Xcode Server,但是这个文档还是有点简略,实际用的时候还是有些坑的。
基于OS X Server的集成测试架构如下所示,基本流程是在服务器建立代码仓库进行版本控制,一般Source Code Server和OSX Server为同一个Server,Developement Mac从Server上面Pull/Push Source Code,Server进行Intergrate,同时集中管理多个Developement Mac,并将Report发送到Developement Mac。
b、直接在mac上面进入app store下载;
1、OS X Server版本:
目前有OS X Server 4.1(要求服务器系统版本OS X 10.10.3以上),和老版本的OS X Server 3.2.2。
2、安装方法(安装最新的OS X Server4.1):
a、进入developer.apple.com,通过apple的开发者账号进入下载,免掉下载码输入等阶段,直接下载dmg安装文件进行安装,网址:https://developer.apple.com/devcenter/ios/index.action((推荐这种方法);
b、直接在mac上面进入app store下载;
3、登陆Server方式:
启动Server App,会出现2种登陆Server的方式:
a、本机Mac作为Server:即安装OS X Server的mac主机同时作为服务器,输入管理员账号密码之后即可配置本机mac作为Server;
b、其他Mac作为Server:登陆其他mac服务器,前提是要登陆的mac已经安装OS X Server并且开启服务,允许访问,而且需要登陆mac的管理员账号和密码。此时本机mac上面的OS X Server相当于一个远程管理客户端;
4、OS X Server服务器配置
提供的服务选项统一在侧列表显示,需要开启相应的服务,点击服务列表,选择开启开关即可。
4.1、服务器基本配置:
a、选择左侧“服务器”项目下面的第一个选项,例如我的mac电脑作为服务器时,名称为”kevin的iMac”;
b、在“概览”下面可以设置主机名称,电脑名称等;
c、在“设置”下面可以设置服务器的基本访问选项,勾选“允许使用SSH远程登录”,表示允许3中b登录方式,即允许其他电脑通过ssh登陆此服务器;
d、“访问”选项下面可以设置访问选项,一般默认即可;
4.2、用户和群组:
a、选择”账户“下面的”用户“选项,服务器mac主机上面已经存在的用户会出现在用户列表,可以添加用户,这里可以为项目组的每个成员创建一个账户和密码;
b、选择”账户“下面的”群组“选项,可以创建群组,服务器mac主机的管理员账号默认属于Adminstrators群组,可以创建common users群组,将其他用户放入,一般可以设置一个管理员用户,其他作为普通用户;
c、用户权限,用户群组设置
4.3、Xcode服务:
a、选择”服务“下面的”Xcode”选项;
b、选择Xcode,服务器必须安装Xcode作为集成测试的编译环境;
c、点击开启服务按钮,直到出现绿色小点标志表示已经开启;
d、点击”编辑“权限,设置Bot权限,一般可以设置成”Adminstrators可以创建Bot,已登录的用户可以查看Bot”,表示管理员可以创建Bot,其他用户使用Bot集成测试即可;
e、”储存库”:即repository代码仓库,可以在服务器上直接添加创建repository,但是不建议这种方式,配置麻烦,后面介绍直接在客户机Xcode上面建立remote repository的方式。编辑权限设置为:可以通过HTTPS和SSH进行访问,Adminstrators可以创建储存库;
4.4、DNS服务:
最好开启DNS服务,使用默认设置即可,方便局域网其他Mac找到Server。在”高级“项目下面的”DNS“,点击开启即可。
5、开发mac机Xcode设置和操作
这里做了局域网mac开发机连接Server的demo,Internet上面需要配置域名等。
5.1、开发mac机登陆Server:
通过Xcode界面上的Xcode>preferences>accounts进行添加Server以连接到服务器,直接选取Server,然后输入用户名和密码;
5.2、Adminstrators将工程加入Server的remote repository:
Adminstrators配置为可以创建Bot和repository,其他用户只能使用不能创建。以下三种方式为管理员创建在Xcode上创建Server上的remote repository的不同情况:
a、创建新工程:勾选”Create Git repository on",选择服务器为刚才登陆的Server,创建完工程之后,一般会在Server上自动创建一个remote repository(通过Source Control >ProjectName– BranchName>ConfigureProjectName查看),同时会将repository自动添加到Xcode>preferences>accounts中,如果没有的话,通过Source Control >ProjectName–BranchName>ConfigureProjectName,选择Remotes,点击左下角”+”,“Create New Remote”手动在Server上创建repository;
b、本地git管理工程加入Server集成管理:如果创建工程的时候,选择的是”Create Git repository on"到“My Mac”,此时通过Source Control >ProjectName–BranchName>ConfigureProjectName,选择Remotes,点击左下角”+”,“Create New Remote”手动在Server上创建repository;
c、没有git管理的工程加入Server集成管理:必须将工程加入git的source control,才能创建bot,如若开始没有勾选”Create Git repository on",那么可以根据下面命令在“终端”中创建git(git在本地)
cd 目录
git init
git add .
git commit -m 'Initial commit'
然后同样如b中所示“Create New Remote”
5.3、Adminstrators创建Bot:
通过Product>Create Bot进行创建。在创建bot的时候需要进行设置,后续Adminstrators也可以修改这些设置。
a、需要勾选Shared scheme;
b、或者直接在Manage Schemes勾选Share;
c、点击change,输入账号密码进行验证;
d、选择集成方式:三种方式,Periodically,On Commit,Manual;
e、勾选执行的集成动作,还有是否进行clean;
f、选择test设备;
g、填写集成前后的triggers,包括执行脚本,发送邮件等等;
5.4、commit和check out:
所有用户都可以commit和check out工程。一般模式是Adminstrators根据5.2和5.3配置好remote repository和Bot,并且将project Commit和Push到Server上面,其他用户先Check Out到本地,然后修改project,commit和push之后Server执行integrate,然后在开发mac机上查看bot。
a、Commit:Source Control > Commit进行提交,必须勾选Push to remote,或者commit之后在外面单独push到Server,才能在服务器上面integrate;要注意git的commit只是提交到本地,并没有推送到服务器,所以一定要push一次。
b、Check Out:Source Control > Check Out,选取相应的Repository,然后Check Out到本地;
6、查看日志和测试结果
a、在Xcode的信息导航栏可以看到bots和相应的日志测试结果
b、也可以在浏览器上直接查看https://地址//xcode
7、遇到问题和解决办法:
a、普通用户在push时存在权限问题:insufficient permission for adding an object torepository database objects,提示用户没有写repository的权限,修复权限方法如下:Server上终端中用命令行输入以下命令:
sudo chown -R userName:userGroup repositoryPath,
例如:sudo chown -R james:commonusers/Library/Developer/XcodeServer/HostedRepositories/demo1,修复普通用户写入repository的权限;
b、遇到某些文件(比如png,jason等文件)不能commit到git的问题解决办法:
进入git隐藏文件夹,编辑config,将ignorecase = true修改为ignorecase = false保存修改即可。
小结:1、Bots集成测试环境最显而易见的好处是,你可以在开发之前写好单元测试用例。然后后续分工合作开发的时候,下班之前提交代码,然后OS X Server自动运行一遍测试用例。第二天上班所有人都可以查看测试结果。。。2、如果把自己的Mac开发机当做OS X Server的宿主服务器来用,你会发现这绝对是一个坑,我的Mac 8G内存刷刷用掉5,6G,再开一个Xcode开发那是卡的相当的酸爽,要是真的想搞一个Bots集成环境,还是买个机子做服务器吧,别像我们老板那么抠门。。。