【网易严选】iOS持续集成打包(Jenkins+fastlane+nginx)
本文來自網(wǎng)易云社區(qū)
作者:孫嬌
嚴(yán)選iOS客戶端的現(xiàn)有打包方式是通過遠(yuǎn)程連接打包機(jī)執(zhí)行腳本去打包,打完包會輸出相應(yīng)的ipa的二維碼,掃一掃二維碼可以安裝,但是隨著測試隊伍的壯大,外包同學(xué)越來越多,在打包機(jī)輸入命令的方式可用度越來越低,手動輸入命令的缺陷有:
1、必須手動輸入分支名,和buildversion(手動計算自增)
2、遠(yuǎn)程連接打包機(jī)不穩(wěn)定,經(jīng)常斷線,影響效率
3、切換分支不方便(還經(jīng)常切換失敗)
基于以上的各個問題,我決定改造一下現(xiàn)有的打包方式,讓任何一個新來的測試同學(xué)都可以直接動手自己打包,最終定下的方案是:底層使用fastlane來執(zhí)行打包(不要問我選它的原因,畢竟github上有2w的star,好處自然是多到不用說),然后使用Jenkins來執(zhí)行打包腳本,最終依然生成二維碼以供方便的掃碼安裝。
因此主要步驟分為:
1、安裝fastlane,編寫打包腳本(網(wǎng)上的教程多到數(shù)不過來,請自行搜索),主要的目錄結(jié)構(gòu)如下:
主要的就是Appfile和Fastfile文件,Appfile里主要存寫的是app包的bundleID,teamID等內(nèi)容(內(nèi)容涉及app機(jī)密就不貼出來了),Fastfile里主要是存儲打包的腳本,我的腳本參考:
default_platform:iosPROJECT_FILE_PATH?=?"./NeteaseYanxuan.xcodeproj"PLIST_FILE_PATH?=?"NeteaseYanxuan/NeteaseYanxuan.plist"OUTPUT_DIRECTORY?=?"/usr/local/var/www/Yanxuan"platform?:ios?dobefore_all?do?|lane,?options|git_switch_branch(branch:?options[:branch])git_pullend??#debug?Buildlane?:debug?do?|options|update_info_plist(plist_path:?"#{PLIST_FILE_PATH}",display_name:?"網(wǎng)易嚴(yán)選push" )update_app_identifier(xcodeproj:?PROJECT_FILE_PATH,plist_path:?"#{PLIST_FILE_PATH}",app_identifier:?"com.ntes.yanxuan")??branch_dir?=?options[:branch]version_number?=?options[:version]??increment_version_number(version_number:?"#{version_number}")gym(???????clean:?"true",scheme:?"NeteaseYanxuan",?export_method:"enterprise",??????export_options:?{provisioningProfiles:?{?"com.ntes.yanxuan"?=>?"YanXuan_enterprise",??????????"com.ntes.yanxuan.ServiceExtension"?=>?"yanxuan_pushextension",??????????"com.ntes.yanxuan.todayExtension"=>?"yanxuantodayExtension"}?},output_directory:?"#{OUTPUT_DIRECTORY}/#{branch_dir}",output_name:?"NeteaseYanxuan.ipa")end end還有一個非常好用的小工具可以推薦, 關(guān)于切換分支的一個fastlane的插件,奉上github地址:fastlane切換分支插件,安裝方法和使用方法上面有很詳細(xì)的介紹,但是我在安裝中遇到一個坑,就fastlane install_plugins安裝之后,顯示安裝成功,但是使用的過程中一直報錯,說找不到git_switch_branch,找了好久的原因最后只能將這個插件加到gemFile里去,然后手動執(zhí)行安裝,具體步驟:
將“gem 'fastlane-plugin-git_switch_branch”加到Gemfile里
然后執(zhí)行bundle install
然后再去執(zhí)行fastlane ?laneName去打包,就可以正常的使用這個插件了!?
2、fastlane的打包腳本只能輸出ipa的iOS包,這個包是沒有辦法直接安裝的,需要對生成對ipa包裝一下,生成可以掃描的二維碼,這樣的二維碼每個人都可以直接掃描二維碼然后下載安裝,具體的方法是本地寫好一個靜態(tài)頁面,每次將新生成的ipa去替換這個靜態(tài)頁面里的各個參數(shù),安裝客戶端所需要的plist文件我們是存放在七牛上去管理,放在哪個平臺是無所謂的,全憑你的資金決定!
這部分使用shell去做的,在腳本里調(diào)用fastlane去打包,然后再去替換各個參數(shù),具體代碼參考如下:
腳本里需要用到qiuniupy,所以你的機(jī)器還是要安裝好python相關(guān)的環(huán)境,安裝的過程中遇到缺啥就直接安裝啥,但是這個過程中我也遇到了一個坑,我pip install qiniu系統(tǒng)提示我安裝成功,import的時候一直提示沒有這個module,最終還是通過系統(tǒng)自帶的easy_install qiniu來安裝成功的。
到了這一步,所有的腳本都準(zhǔn)備完成了,可以先在命令行里執(zhí)行這個打包腳本,看是否能打包成功,到這步就成功了一半啦~~
3、有了腳本,如何方便的執(zhí)行腳本,這時候就是Jenkins上場的時候到啦,Jenkins的安裝就不多說了,網(wǎng)上的資料一抓一大把,但是!但是!但是!
Mac的同學(xué)請注意!注意!意!在Mac上安裝Jenkins要額外關(guān)注權(quán)限的問題,我曾經(jīng)就因為這個問題耗費了好幾個美妙的夜晚,抓耳撓腮的解決權(quán)限的問題,各種不能訪問,各種不能執(zhí)行。發(fā)生這種問題的前提是下載和安裝的從jenkins官網(wǎng)下載的pkg安裝包,安裝后會直接啟動jenkins的web容器,然后你會發(fā)現(xiàn)jenkins的目錄是默認(rèn)安裝在/Users/Shared/jenkins的(就是共享文件夾),也就是在你的用戶目錄之外,好像這時候Jenkins各種權(quán)限都沒有,就各種執(zhí)行失敗了。解決辦法就是盡量使用命令行安裝,然后自己創(chuàng)建Jenkins的配置文件去啟動Jenkins,那么一切都是受你的控制啦~~
配置文件的路徑:/Library/LaunchDaemons,在這個路徑下創(chuàng)建:org.jenkins-ci.plist,配置內(nèi)容如下:
其中的JENKINS_HOME 就是你的路徑,我這里放在了文稿下,因為我的其他腳本也放在文稿下,避免出現(xiàn)其他權(quán)限問題一了百了,放在同一文件夾下,解決所有問題。
配置完成啟動Jenkins,接下來創(chuàng)建job的步驟網(wǎng)上的教程很多也很簡單,就直接創(chuàng)建一個,我這邊就不多說了。
主要是配置可執(zhí)行的腳本,我的配置內(nèi)容如下:
到此所有打包的腳本,執(zhí)行都準(zhǔn)備完成了,包生成的文件是存放在你的打包機(jī)上的,如何讓其他用戶能直接通過域名訪問你的打包機(jī)器來獲取包的內(nèi)容呢,這時候你就需要在你的機(jī)器上配置一下Nginx,Nginx的配置教程也很簡單,網(wǎng)上的教程也很多,我這邊就不贅述了 ,配置完Nginx,其他用戶就可以通過域名去訪問你的打包文件啦~~
最終打包生成的結(jié)構(gòu)如下所示:
用戶打開這個html文件,就可以直接掃碼二維碼去安裝最新的iOS測試包啦,頁面效果如下:
哈哈哈哈,頁面是不是很美膩啊(已經(jīng)把我會寫的前端代碼全都用上去啦)~~~
最終我們的一鍵打包功能就完成了,任何一個新來的同學(xué)都可以在Jenkins上去操作打包了,只要勾選各個參數(shù),然后去點擊立即構(gòu)建,等打包完去收割二維碼就可以了,簡單方便。。。
網(wǎng)易云免費體驗館,0成本體驗20+款云產(chǎn)品!
更多網(wǎng)易研發(fā)、產(chǎn)品、運營經(jīng)驗分享請訪問網(wǎng)易云社區(qū)。
相關(guān)文章:
【推薦】?消息推送平臺高可用實踐(上)
【推薦】?在Android中使用Protocol Buffers(中篇)
【推薦】?使用QUIC
轉(zhuǎn)載于:https://www.cnblogs.com/163yun/p/9680960.html
總結(jié)
以上是生活随笔為你收集整理的【网易严选】iOS持续集成打包(Jenkins+fastlane+nginx)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 习题3-11 Kickdown UVA
- 下一篇: DNS 预解析