Xcode Server是蘋果官方提供的持續(xù)集成方案,在Xcode9之前就已經存在,不過需要從MAC App Store下載并安裝OS X Server(付費軟件),使用起來比較繁瑣。在Xcode9中,Xcode Server被內置在了Xcode中,于是整個的CI環(huán)境搭建過程也大大的簡化了。
搭建基本的持續(xù)集成環(huán)境
接下來我們要搭建一個基本的持續(xù)集成環(huán)境,這個集成環(huán)境可以:
- 拉取指定倉庫的特定分支的代碼
- 指定觸發(fā)CI的條件
- 執(zhí)行Archive操作,并導出Ad-Hoc簽名的安裝包
- 將此安裝包上傳到蒲公英,供測試人員去下載安裝
這里以筆者自己的一個GitHub上的公有倉庫作為例子,倉庫地址為:https://github.com/buptwsg/iOSCoreAnimation
首先Clone此倉庫到本地。
第1步,開啟Xcode Server
打開Xcode->Preferences->Server & Bots,點擊顯示為OFF的開關,輸入管理員密碼后,在彈出的窗口中選擇Integration User。蘋果建議是使用一個特定的,非管理員權限的用戶,不過也可以使用當前登錄的用戶。在這里,可以直接選擇當前登錄用戶。

點擊Continue后,會去配置并啟動Server,完成以后,界面如下:

至此,Xcode Server就已經啟動了??梢愿鶕约旱男枰?,對Server進行配置,暫時我們不用修改任何設置。
第2步,創(chuàng)建Bot
2.1 在Xcode中打開項目,點擊Product->Create Bot...
要創(chuàng)建Bot,必須在打開項目的狀態(tài)下,否則'Product->Create Bot...'項是灰色的,無法點擊。
2.2 連接到服務器
在彈出窗口中,可以為Bot命名,然后從下拉框中選擇'Add New Server...'。
在接下來的界面中,從列表中選擇Server,然后點擊'Next'。
然后,輸入用戶名,密碼,點擊'Add'。

在這里,我選擇的是作為'Registered user'的身份連接到Server,然后輸入當前登錄用戶的用戶名和密碼。回想一下,在開啟Server的時候,我們選擇的Integration User是當前登錄用戶。
如果選擇'Guest',雖然也可以,但是之后會發(fā)現,無法對創(chuàng)建好的Bot進行編輯。
這一步的結果,實質上是創(chuàng)建了一個Xcode Server類型的Account,并添加到Xcode中。

在寫這篇文章的時候,Xcode有bug,添加了Xcode Server的Account以后,會發(fā)現之前添加的Apple ID類型的賬戶都沒有了。
2.3連接到代碼倉庫
由于當前打開的項目,是Clone下來的Git倉庫,所以Xcode很智能的讀取出了倉庫的信息。在下面的界面中,可以從下拉框中選擇具體的分枝,然后點擊Next。

2.4設置構建配置

Scheme: 選擇要構建哪個scheme,被構建的scheme必須是共享的。所以如果scheme是未共享的狀態(tài),請保持'Share and commit scheme'被選中。
Actions:指定要執(zhí)行哪些動作。一共有3類,Analyze(代碼靜態(tài)分析),Test(測試), Archive(打包)。
針對Export,筆者選擇的是'Use Custom Export Options Plist',原因是因為如果不選擇這項,打出來的包總是用iPhone Developer的證書進行的簽名,無法打出Ad-Hoc類型的包。
至于ExportOptions.plist,可以通過下面的辦法得到:手動執(zhí)行Product->Archive,然后導出Ad-Hoc安裝包,在導出的目錄中,就包含了一個ExportOptions.plist文件,直接用這個文件即可。
Configuration: 這里選擇Release版本。
2.5設置構建觸發(fā)器
可以選擇的類型:周期性構建,每次提交構建,手動構建。這里筆者選擇的是手動構建。
另外還可以設置每次構建前是否Clean。

2.6設置簽名信息

在這里可以將指定的證書和Provisioning Profiles添加到Server。
另外要將Xcode工程設置為手動管理簽名,也就是不選中'Automatically Manage Signing'。
2.7 設置環(huán)境變量以及傳遞給xcodebuild的參數
這一步可以根據需要進行設置,目前我們不需要。
2.8 設置觸發(fā)器
該步驟中,可以設置構建前執(zhí)行的腳本,構建后執(zhí)行的腳本,以及郵件相關的觸發(fā)器。由于我們需要將構建出的IPA包上傳到蒲公英,因此需要添加一個構建后執(zhí)行的腳本,并指定只在構建成功時才執(zhí)行。

點擊Done,一個基本的Bot就配置好了,第一次的Integration自動開始。在集成結束的時候,打包出的IPA文件會被上傳到蒲公英。
查看集成的結果并管理Bots, Integrations
在Xcode中,轉到Report Navigator,選擇Bot或是某次集成,在右側的窗口區(qū)域,可以查看集成結果,觸發(fā)一次新的集成,以及對Bots進行管理,如編輯,刪除等。

構建時的一些目錄
/Library/Developer/XcodeServer/IntegrationAssets:這個目錄會保存所有的Bot的每一次的集成結果,IPA文件,符號文件都可以在目錄中找到。
~/Library/Caches/XCSBuilder/Bots/xxx/:xxx代表一個Bot的ID,在該目錄下的Source目錄,存放的是從倉庫中拉到的代碼。
接下來
現在雖然可以滿足基本的持續(xù)集成需求,但是缺少了重要的郵件通知功能。在下一篇中,會講述如何配置郵件功能,來對開發(fā)人員和測試人員進行通知。