OS X Server搭建Bots持续集成环境

说到持续集成环境,当然少不了大名鼎鼎的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相当于一个远程管理客户端;


4OS 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.3Xcode服务:

a、选择”服务“下面的”Xcode”选项;

b、选择Xcode,服务器必须安装Xcode作为集成测试的编译环境;


c、点击开启服务按钮,直到出现绿色小点标志表示已经开启;

d、点击”编辑“权限,设置Bot权限,一般可以设置成”Adminstrators可以创建Bot,已登录的用户可以查看Bot”,表示管理员可以创建Bot,其他用户使用Bot集成测试即可;


e、”储存库”:即repository代码仓库,可以在服务器上直接添加创建repository,但是不建议这种方式,配置麻烦,后面介绍直接在客户机Xcode上面建立remote repository的方式。编辑权限设置为:可以通过HTTPS和SSH进行访问,Adminstrators可以创建储存库;


4.4DNS服务:

最好开启DNS服务,使用默认设置即可,方便局域网其他Mac找到Server。在”高级“项目下面的”DNS“,点击开启即可。

5、开发macXcode设置和操作

这里做了局域网mac开发机连接Server的demo,Internet上面需要配置域名等。

5.1、开发mac机登陆Server

通过Xcode界面上的Xcode>preferences>accounts进行添加Server以连接到服务器,直接选取Server,然后输入用户名和密码;


5.2Adminstrators将工程加入Serverremote 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.4commitcheck 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集成环境,还是买个机子做服务器吧,别像我们老板那么抠门。。。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,736评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,167评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,442评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,902评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,302评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,573评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,847评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,562评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,260评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,531评论 2 245
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,021评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,367评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,016评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,068评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,827评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,610评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,514评论 2 269

推荐阅读更多精彩内容