關(guān)于iOS 自動(dòng)打包的 jenkins +SVN 干貨!

背景描述


本文不適合手把手教你集成 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哈哈~

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末锥余,一起剝皮案震驚了整個(gè)濱河市腹纳,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌驱犹,老刑警劉巖嘲恍,帶你破解...
    沈念sama閱讀 222,590評(píng)論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異雄驹,居然都是意外死亡佃牛,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,157評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén)医舆,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)俘侠,“玉大人,你說(shuō)我怎么就攤上這事蔬将∫伲” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 169,301評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵霞怀,是天一觀的道長(zhǎng)惫东。 經(jīng)常有香客問(wèn)我,道長(zhǎng)里烦,這世上最難降的妖魔是什么凿蒜? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 60,078評(píng)論 1 300
  • 正文 為了忘掉前任禁谦,我火速辦了婚禮胁黑,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘州泊。我一直安慰自己丧蘸,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,082評(píng)論 6 398
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著力喷,像睡著了一般刽漂。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上弟孟,一...
    開(kāi)封第一講書(shū)人閱讀 52,682評(píng)論 1 312
  • 那天贝咙,我揣著相機(jī)與錄音,去河邊找鬼拂募。 笑死庭猩,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的陈症。 我是一名探鬼主播蔼水,決...
    沈念sama閱讀 41,155評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼录肯!你這毒婦竟也來(lái)了趴腋?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 40,098評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤论咏,失蹤者是張志新(化名)和其女友劉穎优炬,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體厅贪,經(jīng)...
    沈念sama閱讀 46,638評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡穿剖,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,701評(píng)論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了卦溢。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片糊余。...
    茶點(diǎn)故事閱讀 40,852評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖单寂,靈堂內(nèi)的尸體忽然破棺而出贬芥,到底是詐尸還是另有隱情,我是刑警寧澤宣决,帶...
    沈念sama閱讀 36,520評(píng)論 5 351
  • 正文 年R本政府宣布蘸劈,位于F島的核電站,受9級(jí)特大地震影響尊沸,放射性物質(zhì)發(fā)生泄漏威沫。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,181評(píng)論 3 335
  • 文/蒙蒙 一洼专、第九天 我趴在偏房一處隱蔽的房頂上張望棒掠。 院中可真熱鬧,春花似錦屁商、人聲如沸烟很。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,674評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)雾袱。三九已至恤筛,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間芹橡,已是汗流浹背毒坛。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,788評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留林说,地道東北人粘驰。 一個(gè)月前我還...
    沈念sama閱讀 49,279評(píng)論 3 379
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像述么,于是被迫代替她去往敵國(guó)和親蝌数。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,851評(píng)論 2 361

推薦閱讀更多精彩內(nèi)容