coder們大家好呀,XCode的手動打包能滿足我們的日常需求但是手動打包這過程中就是機械化的操作。我們還不能同時做一些其他的事情(電腦配置好的就當看看0。0)。所以希望有一套持續集成的方案,因為之前就是使用到了fastlane這個工具進行腳本打包,已經方便了很多,每次打包只要輸入一個自定義好的lane上傳蒲公英就完事了,在這基礎上能不能更方便一點了。查閱了一些資料后有一個Jenkins+fastlane+蒲公英的方案。下面就記錄一下我的采坑記錄:
fastlane我這里就不詳細說了,可以查閱一些文章安裝,安裝以后先執行一下lane看能否正常運行。
一些安裝的資料:
fastlane官方文檔
蒲公英上的文檔
下面的步驟是mac上已經有fastlane,并且可以執行lane打包上傳蒲公英的情況下進行的
安裝 Jenkins
強烈建議不要使用pkg安裝!新建了一個用戶(不知道啥操作).然后最后開始構建的時候報一大堆錯誤,實在頭疼。
后來我改成了用war包安裝
分享一個下載的war包 提取碼: 4pnv
jenkins官網下載地址
在 Mac 環境下,我們需要先安裝 JDK,下載最新的 war 包。下載完成后,打開終端,進入到 war 包所在目錄,執行以下命令:
java -jar jenkins.war --httpPort=8080
命令行工具不要關閉 會有一個密碼在上面顯示
待Jenkins啟動后,在瀏覽器頁面輸入以下地址:
http://localhost:8080
首次安裝會讓你輸入密碼,密碼命令行中復制或者打開路徑復制
然后安裝推薦插件,這里安裝失敗的話后面可以自己在系統管理里面手動安裝插件的
后面就是設置賬戶信息了
后面就進入的jenkins的頁面了
插件安裝可以在左側系統管理->插件管理中 按需要安裝
新建Jenkins任務
1.選擇構建一個自由分格的軟件項目
2.輸入倉庫的SSH地址
這里需要一個SHH的私鑰,點擊add增加,在Key的位置添加私鑰
~/.ssh
打開ssh文件夾地址,選擇自己配置的私鑰復制
(這邊我嘗試了https+用戶名密碼的方式不可行,還是用SSH的方式吧)
回到外層選擇設置的私鑰報錯就消失了
下面紅線的部分選擇你需要構建的分支
3.設置定時觸發器
Poll SCM它會定時檢查源碼變更(根據SCM軟件的版本號),如果有更新就checkout最新code下來,然后執行構建動作
這里設置了10分鐘檢查一次
4.選擇執行Shell
shell腳本:
cd 這里寫上工程目錄(我這里是JenkinsTest)
MSG=`git log -1 --pretty=%B`
echo "===commit msg: ${MSG}==="
fastlane jenkinsPgyer desc:${MSG}
點擊保存
回到外層,進入工程中點擊立即構建就可以了
遇到的問題
1.工程的WorkSpaceSetting明明設置了LegacyBuildSystem而且在fastlane打包的時候,本地執行lane沒問題,jenkins執行還是lane報錯:
? error: Multiple commands produce '/Users/sunjun/Library/Developer/Xcode/DerivedData/JenkinsTest-ecfawsdtsuhlqtcavnduyotilsux/Build/Intermediates.noindex/ArchiveIntermediates/JenkinsTest-iOS/InstallationBuildProductsLocation/Applications/JenkinsTest-iOS.app'
錯誤原因:
Jenkins打包時默認使用的是New build system,而不管你Xcode里是如何設置的。
https://stackoverflow.com/questions/51205221/how-can-i-use-the-legacy-build-system-with-xcode-10s-xcodebuild/51205222#51205222
解決方法:
在Fastfile中加入
xcargs: "-UseModernBuildSystem=NO"
附上打包上傳蒲公英的lane
desc "Submit a new Beta Build to pgyer by Jenkins"
lane :jenkinsPgyer do|option|
#如果你用 pod install
cocoapods
#這個action很重要cert就是下載和安裝匹配的Provision Profile文件,不用你去管那些證書不匹配的事情啦,下載的文件會存在項目根目錄的build文件夾下
#cert(output_path:"build")
#這一步就是簽名了
#sigh(
# adhoc: true
#)
#最后就是打包,adhoc企業版打包
gym(
#設置LegacyBuildSystem
xcargs: "-UseModernBuildSystem=NO",
#這里填寫你工程的的名字
scheme: "工程名",
output_directory: "./build/pgyer“, # 打包后的 ipa 文件存放的目錄
export_options: {
method:"ad-hoc",
thinning: "<none>"
}
)
#上傳蒲公英
pgyer(api_key: "這里填寫蒲公英的apiKey", user_key: "這里填寫蒲公英的userKey”, update_description:"#{option[:desc]}")
#在上傳完ipa后,打開ipa的存放文件夾,起到提示上傳完成的作用
system "open ../build/pgyer"
end
2.新建jenkins任務的時候沒有發現上面的選項?
錯誤原因:
插件沒有安裝
解決方法:
在系統管理->插件管理中選擇需要安裝的插件