在 macOS 下用 Bamboo 实现可持续集成

Xcode 8.2.1

几经磨难以后,终于在 KVM 中跑起了 macOS 虚拟机

当初答应过大家会做一个自动化编译的后记,说到做到。还是老样子,继续使用 Atlassian 全家桶配套的 Bamboo 来做可持续集成。

准备工作

在进入正题之前,我们需要做以下的准备工作:

  • 安装 Xcode
  • 安装 Brew
  • 安装 Ruby
  • 安装 Shenzhen

安装 Xcode

这个没有什么好说的了,Mac App Store 直接下载安装。如果是公共服务器,不想用自己的 Apple ID 登录的话,也可以登录 Apple Developer 网站下载。

Stack Overflow 有个不错的回答,大家可以参考下:http://stackoverflow.com/questions/10335747/how-to-download-xcode-4-5-6-7-8-and-get-the-dmg-or-xip-file?answertab=votes#tab-top

安装 Brew

Brew 也介绍过好多次了,不了解的同学可以看这里

一行命令搞掂。

/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

安装 Ruby

为了不破坏系统自带的 Ruby,我还是习惯性安装一个新版本的,另外升级什么的也比较方便。

$ brew install ruby
$ ruby -v
ruby 2.4.0p0 (2016-12-24 revision 57164) [x86_64-darwin16]

更新 Ruby Gem 镜像

官方的镜像经常无法访问或者出现各种各样的异常,所以使用 Ruby China 的镜像就好了。

$ gem sources --add https://gems.ruby-china.org/ --remove https://rubygems.org/
$ gem sources -l
*** CURRENT SOURCES ***

https://gems.ruby-china.org

今天写文章才发现,原来的大阿里淘宝镜像也合并到 Ruby China 了,有意思。

安装 Shenzhen

Shenzhen 并不是我们理解的深圳市,而是一个基于 Xcode 6 API 的命令行编译工具。嗯,好像 Xcode 6 是有点旧了……

写这篇文章的时候发现了一个新的叫做 gym 的东东,看来稍后要有新的东西研究了,毕竟现在都开始往 Swift 3 迁移了。似乎 Shenzhen 并不能很好的支持一些新的特性了。

安装依然很简单很粗暴:

$ gem install shenzhen
$ ipa --version
ipa 0.14.3

自动化编译

这个步骤比较啰嗦和繁琐,但是基本上都是基于 Apple 的要求。

简单说,就是参考其他文章生成签名的证书或者是导入已有证书。

然后打开需要自动化编译的项目,配置好 Team 和 Bundle ID。

有了 Shenzhen 这个工具,我们只需要一个命令行就可以解决编译的问题了。

命令行进入项目目录,运行 ipa build 命令来编译 iOS App:

$ cd project
$ ipa build
Successfully built:
/Users/builder/project/Project.ipa

就是这么简单,就可以命令行编译 iOS 的应用了。

自动启动 Bamboo Agent

最后是配置 Bamboo Agent,好让 Bamboo Server 可以把任务发到 Mac 上编译。

之前都是先启动好 Mac,然后登录,然后开终端,手动运行 Bamboo Agent,但是这个真的是太傻缺了。

所以新搭建的环境,要再自动化一点。看了下文章,编写了如下配置文件:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
  <dict>
   <key>Label</key>
   <string>com.atlassian.bamboo-agent</string>
   <key>ProgramArguments</key>
   <array>
   <string>/Users/builder/bamboo-agent-home/bin/bamboo-agent.sh</string>
   <string>console</string>
   </array>
   <key>RunAtLoad</key>
   <true/>
   <key>ServiceDescription</key>
   <string>Atlassian Bamboo Agent for macOS</string>
   <!--
   <key>StandardErrorPath</key>
   <string>/Users/builder/bamboo-agent-home/logs/bamboo-agent.err</string>
   <key>StandardOutPath</key>
   <string>/Users/builder/bamboo-agent-home/logs/bamboo-agent.out</string>
   -->
   <key>KeepAlive</key>
   <true/>
   <key>UserName</key>
   <string>builder</string>
   <key>SessionCreate</key>
   <true/>
</dict>
</plist>

将该文件保存为 com.atlassian.bamboo-agent.plist 便可,当然也可以是你自己喜欢的名字。

注意:这里的 SessionCreate 一定要加,否则 security cms 无法提取 provisioning 文件中的信息,一直报 write permission 错误,导致无法正确签名,这里查了好久。
另外注释了两个 log 输出,因为 Bamboo Server 本身也会记录,有需要的可以自行打开。

在设置守护进程之前,记得务必要先用 builder 用户单独运行一次 Bamboo Agent,以便生成用户目录下的 bamboo-agent-home 目录。相关的操作直接按照 Bamboo Server 上 Remote Agent 安装说明一步一步操作就好了。

最后把写好的配置文件扔到系统守护进程目录里面,并启动之:

$ sudo mv com.atlassian.bamboo-agent.plist /Library/LaunchDaemons/
$ sudo chown root:wheel /Library/LaunchDaemons/com.atlassian.bamboo-agent.plist
$ sudo launchctl load /Library/LaunchDaemons/com.atlassian.bamboo-agent.plist

检查一下看看是不是已经在运行了:

$ ps aux | grep bamboo
builder  43  0.0  0.1  2442612  2324  ??  Ss  11:55AM  0:00.03 /bin/sh /Users/builder/bamboo-agent-home/bin/bamboo-agent.sh console

一切正常,在 Bamboo Server 上配置一个 Plan,运行一下编译,成功生成 IPA 文件,收工。

参考

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

推荐阅读更多精彩内容