摘要
手動打包、手動上傳是一件非常煩瑣的事件,通常會浪費開發者大量的時間,這時候自動打包與分發就起到的重要的角色。本文主要分為4個部分
- 講述jenkins在mac下的安裝與任務創建
- fastlane安裝與應用
- 自動上傳到蒲公英并郵件通知相關人員去下載安裝
- xcode打包原理
一、mac環境下jenkins的安裝與配置
1.1 手動下載安裝
- jenkins,安裝與我們平時安裝別的軟件差不多
1.2 通過終端安裝
- 安裝 homebrew
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
- 安裝 jenkins
brew install jenkins
jenkins-1.png - 查看jenkins目錄:
cd /Users/用戶名/.jenkins
jenkins11.png
1.3 啟動jenkins與配置
- 在終端輸入:jenkins即可后臺啟動服務,然后用瀏覽器啟動頁面如下:
- 直接在命令行中輸入:jenkins即可啟動。下面三個為常用的jenkins啟停方法
http://localhost:8080 // 打開jenkins可視化頁面
http://localhost:8080/exit //退出Jenkins
http://localhost:8080/restart //重啟
http://localhost:8080/reload //重新加載
-
啟動時,需要解鎖jenkins,按照提示去目錄下打開文件,把密碼復制出來填入輸入框,如果碰到權限問題,需要進行操作: 右鍵 - 顯示簡介 - 修改權限。
jenkins-3.png -
啟動后,選擇安裝推薦插件等,即下圖中的第一項
jenkins-4.png -
設置管理員信息
jenkins2.png -
進入主面,如下
jenkins3.png
1.34 jenkins鑰匙串插件,訪問地址與端口號更改等
-
地址修改
進入上面中系統管理->系統設置
如下:
jenkins-5.png -
全局屬性設置
jenkins5.png
上圖中,PATH參數獲取方法:
終端輸入echo $PATH
jenkins-8.png -
打包成功或失敗,郵件通知
![Uploading jenkins-6_671804.png . . .]
jenkins-6.png
1.4 jenkins插件安裝
上面我們選擇推薦安裝,對于ios開發,其實大部分已經默認安裝,這里我們以keychain為例安裝一個(后續fastlane用到match匹配同步開發證書時,會訪問鑰匙串)
-
在jenkins主面,系統管理->控件管理
jenkins11.png -
選擇可選插件,右邊搜索框輸入keychain,勾先安裝完成后重啟jenkins,點擊安裝
jenkins10.png - 設置keychain相關,在jenkins主面,系統管理->控件管理,點擊keychain。。。,然后來點頁面:
jenkins12.png
打開keychain位置的命令:open ~/Library/Keychains/
如果不設置這個,那么在創建任務中,在Excute shell中就要加上這句:security unlock-keychain -p 你的電腦密碼 login.keychain
1.5 jenkins任務創建與任務配置
-
創建,新建->選擇構建一個自由風格的軟件項目。如下圖
jenkins7.png
然后主面右邊就會出現剛創建好的。點擊進去。來到任務主頁。
-
任務主頁
jenkins13.png -
配置相關信息
-
配置構建存留周期次數、Git等,如下圖
jenkins14.png -
配置運行腳本,這里主要配置一些你打包的命令腳本。
jenkins15.png
這里的腳本,可以參照下文第二部分fastlane中fastfile配置,里面實現了fastlane matchDev與fastlane dev操作。 -
定期自動構建
jenkins18.png
常用的poll scm設置
每15分鐘構建一次:H/15 * * * * 或*/5 * * * *
每天8點構建一次:0 8 * * *
每天8點~17點,兩小時構建一次:0 8-17/2 * * *
周一到周五,8點~17點,兩小時構建一次:0 8-17/2 * * 1-5
每月1號、15號各構建一次,除12月:H H 1,15 1-11 *
-
構建后操作,郵件通知等
jenkins16.png
操作步驟: 增加構建后操作->Editable Email Notification,然后點擊下面的Advanced Settings,就會出現上面的圖,填寫好標題兩天內容即可。
-
郵件發送成功示例
jenkins17.png -
構建過程中,可通過點擊當前構建,點擊console output查看打包過程中的輸出日志。
jenkins20.png
-
建議把jenkins頁面右上角的允許自動刷新打開
二、fastlane安裝與配置
fastlane是一個完全開源的項目,包含一組 Ruby 實現的工具集,能完成 iOS 和 Android 工程 的自動化構建\測試和發布,用來執行某一特定的任務,可以通過配置文件將不同的工具靈活的結合在一起,從而形成一個完整的自動化流程,實現一鍵上傳 ITC,從而縮短用于構建發布的時間,其主要工具集如下:
- sigh: 開發證書和描述文件下載
- produce: 使用命令行在iTunes Connect上創建新的app和開發入口
- cert: 自動創建和配置iOS代碼簽名證書
- spaceship: Ruby 庫訪問 Apple開發者中心和 iTunes Connect
- pilot: 最好的方式管理你的TestFlight 測試人員和從終端構建
- boarding: 最簡單的方式邀請你的TestFlight beta測試人員
- gym: iOS app打包簽名自動化工具
- match: 使用Git同步你的團隊證書和配置文件
- scan: 最簡單方式測試你的 iOS 和 Mac apps
查看所有的工具集:fastlane actions
單獨查看某一個action的功能: fastlane action [action_name]
2.1 fastlane的安裝
- 檢查xcode-select 是安裝
xcode-select --install // 若未安裝則會自動安裝,若已經安裝,則提示:xcode-select: error: command line tools are already installed, use "Software Update" to install updates
- 安裝fastlane
sudo gem install -n /usr/local/bin fastlane
- 查看版本
fastlane --version
2.2 為項目配置的fastlane
- 在工程目錄在,用終端初始化
cd 工程目錄
fastlane init
-
init過程,由于我的帳號關聯了兩個開發者帳號,于是會彈出讓我選擇哪一個的選項。
fastlane1.png
上述過程中,會要求你填寫開發者帳號密碼等信息。完成后,會在你的工程目錄在創建一個fastlane文件夾
-
文件夾如圖所示
fastlane2.png
各文件描述:
- Appfile:用于存儲應用程序標識符和Apple ID 等信息
- Fastfile:配置管理 lane
我們打包主要是配置這個文件
- Deliverfile:配置應用在 iTunes Connect 中的各種信息,和 ICC 中的數據是一一對應的
- metadata:包含應用在 iTunes Connect 中的各種信息
- screenshots:包含截圖數據
項目工程中,Edit Scheme打開的頁面,Shared前的勾選框,應該打上勾。不然jenkins打包過程中,可能報錯。
接下來主要講述Fastfile文件配置
2.3 fastfile文件編寫
下面用到的工具match、gym、deliver、gpyer等,均可以通過:fastlane 工具名 --help
查看里面的參數如何寫等
- match匹配證書
-
首先要一個倉庫來存放證書與profile文件
fastaneMatch1.png - 在工程目錄下執行
fastlane match init
,過程中會要求你填入一個git倉庫。把上面創建好的填入即可。
fastaneMatch2.png -
這樣,在fastlane文件夾會添加一個Matchfile文件。
fastaneMatch3.png -
內容如下
fastaneMatch4.png - 在fastfile文件中,添加匹配證書的執行塊:
fastaneMatch6.png
其中,match函數中的參數key與參數值value,可在終端執行:fastlane match --help
或者 github上查看:match - 在終端執行
fastlane matchDev
后,倉庫上,keychain中,jenkins環境中,均會有證書相關文件
fastaneMatch5.png
執行fastlane matchDev,途中會要求訪問鑰匙串,要輸入電腦密碼。如果把這腳本寫到jenkins Excute shell中,那么會碰到超時,提示未輸入username,于是我們會在shell中添加:security unlock-keychain -p 你的電腦密碼 login.keychain
或者在插件管理中,把login.keychain先配置好
- registerDevice 添加新設備UUID
-
desc "添加新設備UUID"
desc "This will also make sure the profile is up to date"
lane :registerDev do
register_device(
name: "名字",
udid: "227a4********1349e27***c211e**69")
end
--------------這樣,在匹配證書時,就要用到:force_for_new_devices屬性---------------
desc "匹配生成證書"
desc "This will also make sure the profile is up to date"
lane :matchAppstore do
match(type: "appstore",keychain_password: ENV['PASSWORD'],force_for_new_devices:true) # 匹配開發證書
end
- gym打包
- 在fastfile中配置打包,這里用到gym工具,可通過
fastlane gym --help
或github查看gym用法
fastaneMatch7.png
其中,首先匹配證書。像里面用到的increment_build_number 這些都可通過fastlane actions查看到。
下面這樣,省去build版本自增等,更為簡潔。
- 在fastfile中配置打包,這里用到gym工具,可通過
desc "打包測試"
lane :dev do
match(git_url:"https://git.oschina.net/yang***/cer.git",type: "development",keychain_password:"123",app_identifier:"cn.com.**") # 匹配開發證書
# 打包,具體參數可fastlane gym -h查看
gym(clean: true,scheme:"GC",configuration:"Debug",output_name:"GC_Test",export_method:"development")
# 上傳到薄公英,可以去薄公英官網查看插件安裝方法
pgyer(api_key: "6ef35de7a3c4c60***dd48825eac3a", user_key: "ce1e4c***c27232fcde878db3",password: "a**23", install_type: "2")
# 發布
# deliver(force: true,skip_screenshots:true,skip_metadata: true) # 不上傳截屏文件和元數據。
end
上面有用到上傳蒲公英,接下來第三部分講述pgyer的用法。
三、pgyer插件安裝與配置
pgyer安裝與使用官方文檔:使用 Fastlane 上傳 App 到蒲公英
在工程目錄在,用終端鍵入:
fastlane add_plugin pgyer
-
安裝后,工程目錄下會有Gemfile文件,fastlane文件下,會多出pluginfile文件
pgyer1.png -
pluginfile如下
pgyer2.png - fastlane ,在fastlfile中配置上傳蒲公英操作
lane :uploadPgyer do
pgyer(api_key: "7f15xxxxxxxxxxxxxxxxxx141", user_key: "4a5bcxxxxxxxxxxxxxxx3a9e", password: "123456", install_type: "2")
end
-
上面,api_key與user_key獲取如下:
pgyer3.png
四、xcode打包原理
xcode打包,用的就是xcodebuild命令完成的??梢酝ㄟ^man xcodebuild
命令查看文檔
此部分參考了兩位同事的文章:xcodebuild自動打包,發布應用與xcodebuild 自動化構建
- xcode打包發布流程
- xcodebuild clean
- archive
- exportArchive導出文件
- altool上傳
- archive打包
xcodebuild archive -workspace 項目名稱.xcworkspace
-scheme 項目名稱
-configuration 構建配置
-archivePath archive包存儲路徑
CODE_SIGN_IDENTITY=證書
PROVISIONING_PROFILE=描述文件UUID
- configuration構建配置,可參考以前寫的文章:Xcode通過Build Configuration配置多套域名方法,一般情況下,我們這里打測試包寫:Debug,生產包:Release.
- CODE_SIGN_IDENTITY獲?。?br>
鑰匙串訪問->選中證書->上方的標題就是我們需要的Identity(括號也算),如:
iPhone Developer: ** *** (WS4F**K**)
- PROVISIONING_PROFILE:這個獲取方法如下:
/Users/用戶名/Library/MobileDevice/Provisioning Profiles
找到對應的provisioning Profiles
如果文件較多,可在命令終端輸入
security cms -D -i xxxx.mobileprovision // 解析描述文件,可以得到里面所有的信息(TeamId,ProvisionedDevices,TeamName,UUID,Version,AppIDName等等)。以確定哪一個是此項目所用到的
注意要 在CODE_SIGN_IDENTITY,PROVISIONING_PROFILE賦值時要加""號
- 導出ipa包
xcodebuild -exportArchive -archivePath archive文件的地址.xcarchive
-exportPath 導出的文件夾地址
-exportOptionsPlist exprotOptionsPlist.plist
CODE_SIGN_IDENTITY=證書
PROVISIONING_PROFILE=描述文件UUID
- archive文件的地址.xcarchive
這個地址為打包后,生成**.xcarchive文件的地址。 - exportOptionsPlist
這是一個plist文件,我們可以在項目中手動創建一個,然后把這個文件地址拖進來。plist具體有哪些參數,用命令:xcodebuild exportOptionsPlist --help
查看,在輸出的Available keys for -exportOptionsPlist項:
jenkins12.png - ipa包上傳,我們工作中一般用的是Application Loader或xcode 打包后的upload按鈕,但是它們的本質其實都是用:altool來實現。
altool工具的位置:
/Applications/Xcode.app/Contents/Applications/Application\ Loader.app/Contents/Frameworks/ITunesSoftwareService.framework/Versions/A/Support/altool
命令設置別名:
在~/.bash_profile 中設置別名
alias altool='/Applications/Xcode.app/Contents/Applications/Application\ Loader.app/Contents/Frameworks/ITunesSoftwareService.framework/Versions/A/Support/altool'
設置別名后在終端
輸入 source ~/.bash_profile 以使其生效。
再輸入 altool 就會有它的一些用法提示,否則就是設置別名失敗了
同理,別的工具也可以用此方法實現別名處理,以快速在終端打開工具。
altool 用法:
驗證 ipa
altool --validate-app -f file -u username [-p password] [--output- format xml]
上傳 ipa
altool --upload-app -f file -u username [-p password] [--output- format xml]
具體參數說明:
--validate-app
您要驗證的應用程序。
--upload-app
您要上傳的應用程序。
-f file
您正在驗證或上傳的應用程序的路徑和文件名。
-u username
您的用戶名。
-p password
您的用戶密碼。
--output-format [xml | normal]
您要 Application Loader 以結構化的 XML 格式還是非結構化的文本格式返回輸出信息。Application Loader 默認以文本格式返回輸出信息。