日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【网易严选】iOS持续集成打包(Jenkins+fastlane+nginx)

發(fā)布時間:2024/4/15 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【网易严选】iOS持续集成打包(Jenkins+fastlane+nginx) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

本文來自網(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ù),具體代碼參考如下:

#!/bin/bashfunction?help() {??echo?"Example:?sh?deploy.sh??--branch=master?--version=1.0.0\n"echo?"參數(shù)說明:"echo?"????--branch????????????分支,可選,不填默認(rèn)為master"echo?"????--version???????????大版本號,可選,不填使用代碼里指定的版本"exit?1}if?[?$#?-eq?0?]??thenhelpfi#default?configbranch="master"version=""#check?argumentsfor?var?in?"$@"doif?[[?$var?==?--branch=*?]];?thenbranch=${var#--branch=}elif?[[?$var?==?--version=*?]];?thenversion=${var#--version=}????fidone#__filePath即為當(dāng)前腳本存放路徑__filePath=$(dirname?"$0") qiniupy=$__filePath/qbox.py html_folder=$__filePath/htmlworkspace_name="NeteaseYanxuan"onlineBaseUrl="https://dn-ios-deploy.qbox.me/"testBaseUrl="https://*******"?#這個地方主要是你存放數(shù)據(jù)的路徑function?build_app() {fastlane?debug?version:$version?branch:$branchdist_dir="/usr/local/var/www/Yanxuan/$branch"}function?sync_template() {mkdir?$dist_dir/htmlcp?$html_folder/app.html?$dist_dir/html/$workspace_name.htmlcp?$html_folder/app.plist?$dist_dir/html/$workspace_name.plistcp?$html_folder/appios8.plist?$dist_dir/html/$workspace_name-ios8.plistcp?$html_folder/version.json?$dist_dir/html/version.jsonsed?-i?''?s/@@version@@/$buildVersion/g?$dist_dir/html/*sed?-i?''?s/@@name@@/$name/g?$dist_dir/html/*sed?-i?''?s/@@bundleId@@/$bundleId/g?$dist_dir/html/*local?html=$onlineBaseUrl/$workspace_name/$branch/app.htmllocal?plist=$onlineBaseUrl/$workspace_name/$branch/app.plistlocal?ios8fixplist=$onlineBaseUrl/$workspace_name/$branch/app-ios8.plistlocal?ipa=$testBaseUrl/$branch/$workspace_name.ipased?-i?''?s#@@html@@#$html#g?$dist_dir/html/*sed?-i?''?s#@@plist@@#$plist#g?$dist_dir/html/*sed?-i?''?s#@@ios8fixplist@@#$ios8fixplist#g?$dist_dir/html/*sed?-i?''?s#@@ipa@@#$ipa#g?$dist_dir/html/*python?$qiniupy?$dist_dir/html/$workspace_name.html?$workspace_name/$branch/app.html?python?$qiniupy?$dist_dir/html/$workspace_name.plist?$workspace_name/$branch/app.plist?python?$qiniupy?$dist_dir/html/$workspace_name-ios8.plist?$workspace_name/$branch/app-ios8.plistcp?$dist_dir/html/version.json?$dist_dir/../version.json }echo?"****?Package?Application"build_appechoecho?"****?Update?html/plist"sync_templateechoecho?"****?Complete?@?`date?+"%Y-%m-%d?%T"`!"

腳本里需要用到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)容如下:

<?xml?version="1.0"?encoding="UTF-8"?> <!DOCTYPE?plist?PUBLIC?"-//Apple//DTD?PLIST?1.0//EN"?"http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist?version="1.0"><dict><key>StandardOutPath</key><string>/var/log/jenkins/jenkins.log</string><key>StandardErrorPath</key><string>/var/log/jenkins/jenkins.log</string><key>EnvironmentVariables</key><dict><key>JENKINS_HOME</key><string>/Users/leon/Documents/IOSJenkins/Jenkins/Home</string></dict><key>GroupName</key><string>daemon</string><key>KeepAlive</key><true/><key>Label</key><string>org.jenkins-ci</string><key>ProgramArguments</key><array><string>/bin/bash</string><string>/Library/Application?Support/Jenkins/jenkins-runner.sh</string></array><key>RunAtLoad</key><true/><key>UserName</key><string>jenkins</string><key>SessionCreate</key><true/></dict> </plist>

其中的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)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。