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

點(diǎn)擊Continue后,會(huì)去配置并啟動(dòng)Server,完成以后,界面如下:

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

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

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

2.4設(shè)置構(gòu)建配置

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

2.6設(shè)置簽名信息

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

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

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