學(xué)會(huì)使用 Jenkins 搭建 iOS 持續(xù)集成環(huán)境

以往每次編譯打包 iOS 項(xiàng)目 都需要花費(fèi) 2 分多鐘,這時(shí)候電腦就會(huì)很卡(電腦:配置不高怪我咯),讓我們?cè)趺从淇斓剡M(jìn)行其他的工作呢?打包完了還得提交 ipa 文件發(fā)給測(cè)試,或者手動(dòng)上傳蒲公英 / fir 等。最近,由于公司產(chǎn)品增多,對(duì)項(xiàng)目的快速開發(fā)、測(cè)試、分發(fā)、上線提出了更高的要求……就不能讓這一切簡(jiǎn)單一點(diǎn)?

答案是可以。使用 Jenkins 可以輕松地幫我們完成很多工作,讓常規(guī)任務(wù)實(shí)現(xiàn)自動(dòng)化。

持續(xù)集成的概念

持續(xù)集成,即 Continuous integration ,簡(jiǎn)稱 CI。
隨著軟件開發(fā)復(fù)雜度的不斷提高,團(tuán)隊(duì)開發(fā)成員間如何更好地協(xié)同工作以確保軟件開發(fā)的質(zhì)量已經(jīng)慢慢成為開發(fā)過程中不可回避的問題。尤其是近些年來(lái),敏捷(Agile) 在軟件工程領(lǐng)域越來(lái)越紅火,如何能再不斷變化的需求中快速適應(yīng)和保證軟件的質(zhì)量也顯得尤其的重要。

持續(xù)集成的特點(diǎn)

它是一個(gè)自動(dòng)化的周期性的集成測(cè)試過程,從檢出代碼、編譯構(gòu)建、運(yùn)行測(cè)試、結(jié)果記錄、測(cè)試統(tǒng)計(jì)等都是自動(dòng)完成的,無(wú)需人工干預(yù);
需要有專門的集成服務(wù)器來(lái)執(zhí)行集成構(gòu)建;
需要有代碼托管工具支持;
持續(xù)集成的作用

保證團(tuán)隊(duì)開發(fā)人員提交代碼的質(zhì)量,減輕了軟件發(fā)布時(shí)的壓力;
持續(xù)集成中的任何一個(gè)環(huán)節(jié)都是自動(dòng)完成的,無(wú)需太多的人工干預(yù),有利于減少重復(fù)過程以節(jié)省時(shí)間、費(fèi)用和工作量;

Jenkins 是什么

簡(jiǎn)單的說,Jenkins 是一種基于 Java 開發(fā)的持續(xù)集成工具,前身稱作Hudson,它是一個(gè)開源軟件項(xiàng)目,提供了用于監(jiān)控持續(xù)重復(fù)工作的軟件平臺(tái)。

Jenkins 搭建步驟

下載安裝

打開Jenkins官網(wǎng),點(diǎn)擊下載

我用的是 2.19.1 系統(tǒng)選擇 Mac OS X , 得到 pkg 文件安裝

安裝過程不難,照著提示操作就行

安裝過程中,要用到一個(gè)密碼解鎖 Jenkins,可在 /var/log/jenkins/jenkins.log 文件中找到

Jenkins 安裝完畢后,會(huì)在系統(tǒng)中創(chuàng)建一個(gè) jenkins 用戶,后續(xù)要導(dǎo)入證書文件到 jenkins

導(dǎo)出公司開發(fā)和發(fā)布證書,得到 2 個(gè) p12 文件
打開終端為用戶 jenkins 設(shè)置一個(gè)密碼,以便我們接下來(lái)的登錄操作

sudo dscl . passwd /Users/jenkins YourPassword

注銷當(dāng)前用戶,登錄 jenkins ,雙擊前面得到的 p12 文件導(dǎo)入證書
安裝完畢,進(jìn)入 http://localhost:8080 ,來(lái)到 Jenkins 使用界面,創(chuàng)建一個(gè)新項(xiàng)目

選擇“構(gòu)建一個(gè)自由風(fēng)格的軟件項(xiàng)目”
填寫 Git 項(xiàng)目的 URL 地址,當(dāng)然,如果使用 SVN 就選擇 subversion
增加構(gòu)建步驟:選擇Xcode
Target 填寫 iOS 工程中的 Target 名稱
打包需要使用到鑰匙串中的開發(fā)證書,選擇 Unlock Keychain, Keychain path 默認(rèn)是 /Users/Shared/Jenkins/Library/Keychains/login.keychain ,密碼為上面我們創(chuàng)建的用戶 jenkins 的登錄密碼
配置完畢保存,點(diǎn)擊開始構(gòu)建。紅色小圓點(diǎn)表示構(gòu)建失敗,藍(lán)色小圓點(diǎn)表示構(gòu)建成功

自己踩的一些坑,幾乎都是關(guān)于 Keychain 和 Provisioning Profiles

1、拷貝文件失敗
java.io.IOException: Failed to copy /Users/Shared/Jenkins/Home/kpp_upload/test.mobileprovision to /Users/Shared/Jenkins/Provisioning/d135cf91-b24e-7896-xv6i-6bd234945a99.mobileprovision
at hudson.FilePath.copyTo(FilePath.java:2018)

解決方法:檢查相關(guān)文件夾的讀寫權(quán)限

2、找不到描述文件
Code Sign error: No provisioning profiles found: No non–expired provisioning profiles were found.

解決方法:將相關(guān)描述文件拷貝到 /Users/Shared/Jenkins/Library/MobileDevice/Provisioning Profile 文件夾中

3、描述文件不匹配
Code Sign error: No matching provisioning profiles found: No provisioning profiles matching an applicable signing identity were found.
Code Sign error: No matching provisioning profiles found: No provisioning profiles with a valid signing identity (i.e. certificate and private key pair) matching the bundle identifier “com.abc.test” were found.

解決方法:檢查項(xiàng)目和描述文件是否對(duì)應(yīng)

以上就是我最近學(xué)習(xí)使用 Jenkins 的小結(jié),寫的比較簡(jiǎn)單,只介紹了幾個(gè)最基本的步驟,后續(xù)有時(shí)間再來(lái)完善下。
另外,Jenkins 還有很多強(qiáng)大的功能和特性值得我們?nèi)ヌ剿骱蛯W(xué)習(xí)。

參考

持續(xù)集成和Jenkins介紹
使用 Jenkins 實(shí)現(xiàn)軟件開發(fā)的持續(xù)集成
Jenkins Xcode 證書設(shè)置錯(cuò)誤 Code Sign error: No matching codesigning identity found: No codesigning identities
stackoverflow -- Xcode 5 continuous integration CodeSign fail

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容