以往每次編譯打包 iOS 項(xiàng)目 都需要花費(fèi) 2 分多鐘数尿,這時(shí)候電腦就會(huì)很卡(電腦:配置不高怪我咯)赦肃,讓我們怎么愉快地進(jìn)行其他的工作呢适室?打包完了還得提交 ipa 文件發(fā)給測試,或者手動(dòng)上傳蒲公英 / fir 等馏艾。最近劳曹,由于公司產(chǎn)品增多,對項(xiàng)目的快速開發(fā)琅摩、測試铁孵、分發(fā)、上線提出了更高的要求……就不能讓這一切簡單一點(diǎn)房资?
答案是可以库菲。使用 Jenkins 可以輕松地幫我們完成很多工作,讓常規(guī)任務(wù)實(shí)現(xiàn)自動(dòng)化志膀。
持續(xù)集成的概念
持續(xù)集成熙宇,即 Continuous integration
,簡稱 CI
溉浙。
隨著軟件開發(fā)復(fù)雜度的不斷提高烫止,團(tuán)隊(duì)開發(fā)成員間如何更好地協(xié)同工作以確保軟件開發(fā)的質(zhì)量已經(jīng)慢慢成為開發(fā)過程中不可回避的問題。尤其是近些年來戳稽,敏捷(Agile) 在軟件工程領(lǐng)域越來越紅火馆蠕,如何能再不斷變化的需求中快速適應(yīng)和保證軟件的質(zhì)量也顯得尤其的重要。
持續(xù)集成的特點(diǎn)
它是一個(gè)自動(dòng)化的周期性的集成測試過程惊奇,從檢出代碼互躬、編譯構(gòu)建、運(yùn)行測試颂郎、結(jié)果記錄吼渡、測試統(tǒng)計(jì)等都是自動(dòng)完成的,無需人工干預(yù)乓序;
需要有專門的集成服務(wù)器來執(zhí)行集成構(gòu)建寺酪;
需要有代碼托管工具支持坎背;
持續(xù)集成的作用
保證團(tuán)隊(duì)開發(fā)人員提交代碼的質(zhì)量,減輕了軟件發(fā)布時(shí)的壓力寄雀;
持續(xù)集成中的任何一個(gè)環(huán)節(jié)都是自動(dòng)完成的得滤,無需太多的人工干預(yù),有利于減少重復(fù)過程以節(jié)省時(shí)間盒犹、費(fèi)用和工作量懂更;
Jenkins 是什么
簡單的說,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 文件安裝
安裝過程不難命黔,照著提示操作就行
Jenkins 安裝完畢后悍募,會(huì)在系統(tǒng)中創(chuàng)建一個(gè) jenkins 用戶,后續(xù)要導(dǎo)入證書文件到 jenkins
導(dǎo)出公司開發(fā)和發(fā)布證書洋机,得到 2 個(gè) p12 文件
打開終端為用戶 jenkins 設(shè)置一個(gè)密碼,以便我們接下來的登錄操作
sudo dscl . passwd /Users/jenkins YourPassword
注銷當(dāng)前用戶坠宴,登錄 jenkins ,雙擊前面得到的 p12 文件導(dǎo)入證書
安裝完畢绷旗,進(jìn)入 http://localhost:8080
喜鼓,來到 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)目和描述文件是否對應(yīng)
以上就是我最近學(xué)習(xí)使用 Jenkins 的小結(jié)链峭,寫的比較簡單,只介紹了幾個(gè)最基本的步驟又沾,后續(xù)有時(shí)間再來完善下熏版。
另外纷责,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