背景描述
本文不適合手把手教你集成 Jenkins 的童鞋....本文則是一片問(wèn)題出現(xiàn)與解決的總結(jié)~!
首先,我要將一下為什么我們要用 Jenkins 這個(gè)平臺(tái)來(lái)構(gòu)建自動(dòng)打包平臺(tái):有人會(huì)有疑問(wèn),使用腳本在電腦上打包, 效率也是非常快的.為啥還要用這個(gè)開(kāi)源平臺(tái)呢? ? 我們的自動(dòng)打包需求并不是為了方便開(kāi)發(fā)人員, 而是為了減輕測(cè)試部門(mén)同事的工作量,去掉中間那么多的共同時(shí)間,讓他們可以在需要的時(shí)候去打包測(cè)試. 那問(wèn)題就來(lái)了, 要知道iOS 的打包是需要?jiǎng)?chuàng)建證書(shū)的那臺(tái)特定機(jī)子去打, 而其他人即使拿到 P12 文件也無(wú)法打包成功(相同的腳本,直接運(yùn)行會(huì)各種錯(cuò)誤),而 jenkins 就完美得解決可這一問(wèn)題.
網(wǎng)上也有很多 jenkins 的使用教程之類(lèi)的東西, 但是,通過(guò)自己做過(guò)這一遍,深感那些資料有寫(xiě)不能滿足我的需要, 很多資料都是交給你怎么成功得整合, 卻沒(méi)有說(shuō)明當(dāng)你在整合時(shí)會(huì)出現(xiàn)的問(wèn)題, 或者是出現(xiàn)了怎么解決(特別是在 使用了gitLab的項(xiàng)目).為了給后來(lái)者以方便,特寫(xiě)此文.
集成 Jenkins
我在這里不會(huì)詳細(xì)的介紹怎么安裝和搭建 jenkins 運(yùn)行環(huán)境, 網(wǎng)上有很多, 我只是提想下打算在Mac 上構(gòu)建Java 環(huán)境的開(kāi)發(fā)者, jenkins 的運(yùn)行不要構(gòu)建 Java HOME , 直接安裝 Java_JDK就可以了,然后到官網(wǎng)下載頁(yè)面,選擇? Mac os X 版本 .在安裝時(shí)躏筏,一定要按默認(rèn)的安裝板丽,不要自定義安裝, 網(wǎng)上有的資料是自定義安裝趁尼,不去創(chuàng)建jenkins用戶埃碱,這個(gè)很坑人,千萬(wàn)不要少裝了K峙ⅰQ獾睢!芝囤!
安裝完畢后似炎, 確保你的shared文件下存在jenkins用戶。
當(dāng)我們第一次進(jìn)入jenkins 時(shí)會(huì)讓我們安裝,等待頁(yè)面下載完畢,然后注冊(cè), 當(dāng)然要是忘記了密碼.是沒(méi)有找回密碼這一按鈕的, 你需要去刪除在/Users/Shared/Jenkins/Home/config.xml 以下代碼
然后重新啟動(dòng)jenkins? sudo service jenkins restart , 當(dāng)然,重啟電腦也行..哈哈..
打包項(xiàng)目構(gòu)建
進(jìn)入 jenkins 頁(yè)面后, 新建一個(gè)項(xiàng)目, 如何新建項(xiàng)目,網(wǎng)上自己百度吧..記住一點(diǎn),自己的項(xiàng)目名稱(chēng)或運(yùn)行腳本名不要出現(xiàn)空格, 因?yàn)榭崭駮?huì)被轉(zhuǎn)譯.這回在你使用命令在終端中調(diào)試時(shí)出現(xiàn)很多不必要的麻煩...
在項(xiàng)目配置中的"源碼管理"中選擇 Subversion , Repository URL里填寫(xiě) SVN 地址, 直接拷貝項(xiàng)目 URL粘進(jìn)去就可以, Credentials 中點(diǎn)擊添加, 選擇賬號(hào) 密碼連接類(lèi)型, ID , 描述什么的可以不寫(xiě).添加賬號(hào)后回到前一頁(yè)面Credentials,選擇該賬號(hào), 沒(méi)有連接上回報(bào)錯(cuò).
到這里如果你是使用腳本打包的,那構(gòu)建過(guò)程中的難點(diǎn)就沒(méi)有了, 如果你是使用 Xcode 構(gòu)建的話, 還是有一定難度在等你. 當(dāng)然如果你的本地項(xiàng)目工程使用Workspace來(lái)管理的, 那么請(qǐng)按照網(wǎng)上主流的資料進(jìn)行配置就可以了, 如果你的工程中沒(méi)有使用Workspace來(lái)管理,那么在Xcode Workspace File 輸入地址當(dāng)然會(huì)在打包時(shí)報(bào)錯(cuò)..這時(shí)候你會(huì)發(fā)現(xiàn)在頁(yè)面中還有幾個(gè)框, 其中一個(gè)是Xcode Project File,這樣你將你的項(xiàng)目運(yùn)行文件. xcodeproj放進(jìn)去,就可以了...
配置jenkins的關(guān)鍵
我們使用jenkins的目的是實(shí)現(xiàn)jenkins自動(dòng)打包svn 或git 托管的最新代碼凡人。而不是你電腦本地的工程名党。所以不管是腳本還是Xcode插件叹阔,build的工作區(qū)間必須是jenkins目錄下的workspace挠轴;使用腳本時(shí), 第一次我們不知道我們的目標(biāo)工程在哪里耳幢, 所以當(dāng)你配置差不多了岸晦,可以選擇構(gòu)建一次, 這樣jenkins下的workspace文件下就有了你的目標(biāo)文件睛藻。jenkins 首先會(huì)自己會(huì)檢出一份代碼启上, 將腳本也放在該工程文件下, 如果你構(gòu)建時(shí)報(bào)“沒(méi)有權(quán)限”的問(wèn)題店印, 那就使用命令給jenkins文件全部權(quán)限(chmod -R 777 /文件路徑)冈在。單單去改變腳本權(quán)限是沒(méi)有用的~!
要實(shí)現(xiàn)jenkins的自動(dòng)打包按摘,其實(shí)就是要jenkins用戶下可以正常打包包券,真機(jī)運(yùn)行纫谅。因?yàn)槟愕哪繕?biāo)工程是在shared目錄下的jenkins下, 所以溅固,首先你需要保證在你自己用戶下可以打包付秕,等。然后侍郭,切換用戶到j(luò)enkins下询吴, 通過(guò)shared可以找到目標(biāo)工程, 然后再這里面實(shí)現(xiàn)正常打包亮元,運(yùn)行等猛计。。完成這兩部苹粟,你就已經(jīng)離成功不遠(yuǎn)了~S谢(在jenkins中如果出現(xiàn)問(wèn)題, 請(qǐng)往下仔細(xì)閱讀)嵌削。
打包時(shí)的常見(jiàn)問(wèn)題
項(xiàng)目配置全部都 OK 了, 這時(shí)候我們點(diǎn)擊"立即構(gòu)建"按鈕, 第一次一般都會(huì)報(bào)錯(cuò),一下是集中常見(jiàn)報(bào)錯(cuò)的現(xiàn)象及原因以及解決方法:
如果你是使用 Xcode 構(gòu)建:
1. Jenkins Xcode 證書(shū)設(shè)置錯(cuò)誤 :
Code Sign error: No matching codesigning identity found: No code signing identities
?或者
Check dependencies
Code Sign error: No codesigning identities found: No codesigning identities (i.e. certificate and private key pairs) that match the provisioning profile specified in your build settings (“qingyunDeveloper”) were found.
或者報(bào)什么 UUID(***************)不匹配
原因: Xcode 現(xiàn)在的證書(shū)選項(xiàng)選擇不正確, 或者是 jenkins 的Xcode 證書(shū)沒(méi)有在其證書(shū)文件中找到相應(yīng)證書(shū)對(duì)應(yīng)項(xiàng).jenkins的打包是在jenkins用戶下進(jìn)行的毛好,所以,在本機(jī)用戶的證書(shū)環(huán)境要與jenkins用戶環(huán)境證書(shū)一致苛秕。
解決1: 叫你的老大給你把 P12文件傳給你,打開(kāi).選擇好證書(shū)類(lèi)型, 然后再構(gòu)建, 如果還是不行,找到你用戶下的Provisioning Profiles 文件肌访。目錄為 /Users/xxx/Library/MobileDevice/Provisioning Profiles? xxx表示你自己的用戶名
把這里面所有的證書(shū)復(fù)制到/Users/Shared/Jenkins/Library/MobileDevice/Provisioning Profile? 這個(gè)文件。然后再構(gòu)建..
2.構(gòu)建時(shí),輸出錯(cuò)誤為權(quán)限問(wèn)題..
原因:因?yàn)樵诎惭b jenkins 后, 會(huì)系統(tǒng)會(huì)自動(dòng)創(chuàng)建一個(gè) jenkins 的用戶, 你現(xiàn)在所使用的是自己的 MAC 用戶,所以操作 jenkins 會(huì)無(wú)權(quán)限,.
解決:你需要做的是找到報(bào)錯(cuò)的地址文件, 單擊右鍵,顯示簡(jiǎn)介中找到共享與權(quán)限, 全部給讀寫(xiě)權(quán)限, 并且查看根目錄其他文件是否是全部讀寫(xiě)權(quán)限...或者直接暴力(chmod -R 777 /路徑)
3.Xcode 編譯出錯(cuò) ,代碼不支持新的 SDK
原因:因?yàn)?jenkins 構(gòu)建時(shí),默認(rèn)是 APPStore 上最新的版本, 有的工程里第三方文件編譯時(shí),不支持最新 Xcode 版本, 所以需要更改 Xcode 的編譯 SDK.
解決:運(yùn)行 xcodebuild -showsdks 命令在終端中查看當(dāng)前版本, sudo xcode-select --switch /Applications/Xcode.app/Contents/Developer ?后面的地址是你需要的 Xcode 版本的地址,如你想更換為9.2的 SDK, 那么該地址則為 Xcode 7.2.1 的報(bào)內(nèi)容. ?更改完后構(gòu)建即可.
4.如果在jenkins用戶下艇劫,按第一條問(wèn)題解決方法操作吼驶,還是無(wú)法運(yùn)行,或者找不到想要的描述文件店煞。一直報(bào)證書(shū)的錯(cuò)蟹演。
原因:上次刪除jenkins時(shí)不規(guī)范, 文件有殘留顷蟀,導(dǎo)致這次安裝有問(wèn)題酒请。
解決:按照網(wǎng)上刪除jenkins的方法去刪除(都是命令語(yǔ)言),然后再裝鸣个, 重新按照步驟來(lái)做羞反。
5.兩個(gè)用戶下各自都能打包,運(yùn)行囤萤。但是回到本機(jī)使用jenkins網(wǎng)頁(yè)上的構(gòu)建按鈕構(gòu)建昼窗,提示:
原因:提示的意思是jenkins用戶沒(méi)有解鎖用戶交互。但是涛舍,如果你去網(wǎng)上按照那些方法添加“登陸鑰匙串”的解鎖命令澄惊,還是無(wú)法完成。其實(shí),這個(gè)問(wèn)題的實(shí)質(zhì)還是證書(shū)的問(wèn)題掸驱,但這個(gè)問(wèn)題不是描述文件的事窘哈,而是開(kāi)發(fā)或者發(fā)布證書(shū)沒(méi)有添加的問(wèn)題。
解決:進(jìn)入jenkins用戶下亭敢, 如果你直接雙擊打開(kāi)證書(shū)滚婉, 但是,系統(tǒng)會(huì)提示你 user interface is not allowed帅刀。 所以并不能這么直接添加让腹, 而是要打開(kāi)鑰匙串, 找到“system”---copy全部的證書(shū)-----“l(fā)ogin”---粘貼 ?扣溺。
再去構(gòu)建骇窍,OK 完美~!O(∩_∩)O哈哈~