技術資料分享www.jianshu.com/p/e162b6b19…html
公司產品版本比較多,不少版本都須要獨立化部署。致使產生了每一個地址須要打包,每次打包就是一件麻煩的事情,經常一下午的時間過去了卻都浪費在打包這件事情上了。So....研究了下Fastlane+Jenkins+蒲公英。能夠方便的發佈和管理版本。看到爬了不少坑。寫出來讓你們參考下,遇到問題了能夠私信我。盡我所能幫助你。java
若是你在安裝期間想很順利的話,請務必按照步驟去作,本教程只針對Mac。python
此文檔是二次更新的,由於第一次寫的時候,就根據安裝記錄寫出來了,第二次在別的機器上部署的時候,就出現了各類問題,就感受這是寫了個P啊。。。。P P P -_-~!git
因此此次就進行了二次加工,雖然變成了二手的,可是更有內涵哦~~~github
使用Mac的小夥伴都應該能感覺的OSX的好處,本人對Mac中毒很深,要是讓我說一點什麼很差的話,就是價格過高。web
各類環境,系統都自帶了,ruby,python等等,且不會出現全家桶的問候。shell
迴歸正體接着說ruby,Mac系統自帶ruby,可是是給系統本身使用,權限很小,因此在平時使用過程當中,會出現不少問題,並且版本通常都比較低,因此大多人都在本身使用RVM來管理本身使用的ruby.數據庫
參照此文檔來安裝 RVM使用ruby 使用RVM來管理rubybootstrap
ruby安裝完成以後,來進行下一步。api
xcode-select --install
複製代碼
方法 | os支持 | 描述 |
---|---|---|
Homebrew | 蘋果系統 | brew cask install fastlane |
安裝程序腳本 | 蘋果系統 | 下載zip文件。而後雙擊install腳本(或在終端窗口中運行)。 |
RubyGems | 帶有Ruby版本> 2.0.0 | gem install fastlane -NV |
若是使用的是系統自帶的ruby,可能會報錯沒有權限。
ERROR: While executing gem ... (Gem::FilePermissionError)
You don't have write permissions for the /Library/Ruby/Gems/2.3.0 directory. ERROR: While executing gem ... (Gem::FilePermissionError) You don't have write permissions for the /usr/bin directory.
複製代碼
查看本身是否使用的是本身管理的ruby
which ruby
> 返回/Users/seven/.rvm/rubies/ruby-2.4.1/bin/ruby
> 則說明已經使用RVM管理的Ruby了非系統自帶的。
> 若是是usr/bin這個目錄下的則說明還在使用系統自帶的,可能會出現一系列權限的問題,請更換。
複製代碼
若是你非要使用系統自帶的,也能夠,也可能出現問題,也可能沒事,跟系統版本也有關係,
下面給出系統自帶問題的一些些方法。如跟我同樣使用非系統自帶ruby,請跳過此步驟。
> 方法一:sudo gem install fastlane -NV //提高權限,部分系統權限仍是不夠。
> 方法二:安裝到別的目錄使用指定目錄安裝: sudo gem install -n /usr/local/bin fastlane
> 方法三:仍是使用RVM管理ruby
複製代碼
安裝完畢後,在終端進入到你的項目目錄下。初始化fastlane
fastlane init
複製代碼
若是沒有報錯,就跳過此條繼續 報錯Exit status of command 'bundle exec pod install' was 1 instead of 0. bundler: failed to load command: pod (/usr/local/bin/pod) 解決方法:在項目根目錄下 fastlane/Fastfile 修改文件中的cocoapods ' cocoapods(use_bundle_exec: false)'
按照提示輸入開發者帳號(付費帳號) 輸入Bundle Identifier 用於初始化配置,後期可在配置文件改。隨便輸入 根據提供的信息,fastlane會自動爲您生成一個配置。
您能夠看到新建立的./fastlane目錄,包含Appfile和Fastfile文件。
最有趣的文件是fastlane/Fastfile,其中包含分發您的應用程序所需的全部信息。
這樣就完成了初始化
初始化完畢後直接在終端輸入
//fastlane fastlane search_plugins//列出可用插件
fastlane add_plugin pgyer//安裝插件
複製代碼
插件安裝成功
./fastlane目錄下會生成Pluginfile的一個文件。
插件安裝不成功,就是fastlane安裝的有問題。
文件名 | 描述 |
---|---|
Appfile | 從 Apple Developer Portal 獲取和項目相關的信息 詳情 |
Fastfile | 核心文件,存放lane任務 |
Deliverfile | deliver的配置文件,從 iTunes Connect 獲取和項目相關的信息詳細 |
metadata | 同步iTC中的元數據 |
screenshots | 同步iTC中的截圖 |
文件名 | 描述 |
---|---|
match | 證書和配置文件管理工具會重置證書,推薦新項目使用。🌟🌟🌟🌟🌟 |
cert | 自動建立管理iOS代碼簽名證書,會去自動建立證書,永遠不會撤銷現有的證書。如不能建立會報錯。 |
sigh | 用來建立、更新、下載、修復Provisioning Profile的工具 |
gym | 自動化編譯打包工具.shenzhen的代替品.🌟🌟🌟🌟🌟 |
pem | 自動生成、更新推送配置文件 |
produce | 若是你的產品還沒在iTunes Connect(iTC)或者Apple Developer Center(ADC)創建,produce能夠自動幫你完成這些工做 |
deliver | 自動上傳截圖,APP的元數據,二進制(ipa)文件到iTunes Connect |
snapshot | 自動截圖(基於Xcode7的UI test) |
frameit | 能夠把截的圖片自動套上一層外邊框 |
pilot | 管理TestFlight的測試用戶,上傳二進制文件 |
boarding | 創建一個添加測試用戶界面,發給測試者,可自行添加郵件地址,並同步到iTunes Connect(iTC) |
scan | 自動運行測試工具,而且能夠生成漂亮的HTML報告 |
spaceship | 爲pilot,boarding和deliver等工具提供和 iTC 和 ADC 的交互API。spaceship原本是個獨立的項目,後來被Fastlane收編進來 |
WatchBuild | 是一個獨立的iTC監控工具,開啓WatchBuild能夠監控iTC上的文件狀態,彈出MacOS自帶的Notification |
supply | Android自動上傳到Google Play工具(若是有時間,我想把國內提供API的Android Store都寫個插件自動上傳,這個問題從10年我剛開始工做就以爲是個痛點) |
screengrab | Android的自動截圖工具 |
執行順序 | 方法名 | 說明 |
---|---|---|
1 | before_all | 在執行 lane 以前只執行一次 |
2 | before_each | 每次執行 lane 以前都會執行一次 |
3 | lane | 自定義的任務 |
4 | after_each | 每次執行 lane 以後都會執行一次 |
5 | after_all | 在執行 lane 成功結束以後執行一次 |
6 | error | 在執行上述狀況任意環境報錯都會停止並執行一次 |
定義 | 是否必須 | 說明 | 備註 |
---|---|---|---|
desc | false | 方法描述 | 可屢次使用打到換行的目的 |
name | true | 方法名 | 符號化的方法名 |
options | false | 方法參數 | 返回 Hash 類型 |
task | true | 方法主體 | 參考 ruby 的方法代碼且支持 ruby 代碼 |
lane :deploy do
# 執行 pod instasll
cocoapods
# 執行 carthage bootstrap
carthage
# 增長build版本號
increment_build_number
# 編譯代碼
gym
# 發佈到Apple Store
deliver(force: true)
end
複製代碼
只須要項目根目錄下執行便可
fastlane topgyer desc:更新內容
複製代碼
desc "上傳到測試版本到蒲公英"
desc "生成本地版本"
lane :topgyer do|option|
#自動增長build
# increment_build_number
#自動生成證書
cert
#自動生成配置文件
# sigh(force: true)//我使用的是手動配置關閉這個。如需自動則打開便可
#gym配置,打包輸出。
#fastlane gym --export_method ad-hoc
#fastlane gym --export_method enterprise
#fastlane gym --export_method app-store
scheme_name = "xxxx"//應用名詞
#獲取version和build版本號
version = get_info_plist_value(path: "./#{scheme_name}/Info.plist", key: "CFBundleShortVersionString")
build = get_info_plist_value(path: "./#{scheme_name}/Info.plist", key: "CFBundleVersion")
#導出路徑
output_directory = "./build"
#導出名稱
output_name = "#{scheme_name}_#{version}_#{build}_#{option[:desc]}_#{Time.now.strftime('%Y%m%d%H%M%S')}.ipa"
gym(
export_method: "enterprise",//企業帳號
scheme: scheme_name, //名詞
clean: true,//是否清理上次編譯
output_directory: output_directory,//導出路徑
output_name: output_name//導出名詞
)
pgyer(api_key: "1212121", user_key: "121212", update_description: "#{option[:desc]}")//蒲公英設置查看key
end
複製代碼
手動配置證書。 fastlane初始化Gym
fastlane gym init
會生成一個Gymfile的文件。增長下面代碼,同時不要使用自動生成配置文件這個選項sigh(force: true)
export_options(
provisioningProfiles: {
"com.xxx.xxx" => "profilesName",#包名 證書配置文件名稱
"com.xxx.xxxxxx" => "profilesName1"
})
複製代碼
fastlane topgyer desc:更新內容
使用過程當中出現了不少問題,大部分問題都已經有人躺過水了,因此有問題先去看看issues
問題 | 解決方案
---|--- ruby -v 版本低於2.0.0 | gem版本不對 請升級ruby請更新gems cocoapods沒有放到Gemfile中| Gemfile文件中增長cocoapods fastlane init 提示sudo|請檢查ruby路徑。若是沒問題請檢查user目錄下.bash_profile。環境變量設置是否有效。export PATH="PATH" 若是初始化成功|其餘的問題大部分都是證書問題了。 The generated archive is invalid, this can have various reasons:Usually it's caused by the Skip Install
option in Xcode, set it to NO
|xcode中修改build settings Skip Install 選項爲NO
在持續集成(Continuous integration,簡稱CI)這塊,Jenkins無疑是目前使用的比較多的一個開源框架
系統要求:必須安裝JDK 1.5以上版本,推薦安裝最新版本的JDK[注意不支持java9]。能夠經過如下命令查看是否安裝JDK和JDK版本。JDK下載連接 如需卸載請看下文
java -version
複製代碼
下載完畢JDK後如圖按照提示安裝便可
Jenkins的官網 下載最新的 war 包。
推薦使用【Long-term Support (LTS)穩定版】
下載完成後,打開終端,進入到 war 包所在目錄直接運行,也能夠將war包丟在Tomcat的webapp目錄下面。
終端方式執行如下命令:
java -jar jenkins.war//默認對端口是8080如需指定可更改
java -jar jenkins.war --httpPort=8888 //指定8888端口兩者選一便可
複製代碼
待Jenkins啓動後,在瀏覽器頁面輸入如下地址:
http://localhost:8888//端口指定的多少寫多少
複製代碼
第一次運行會出現以下界面,提示須要填寫指定路徑文件裏面的內容(該內容也能夠在終端上面看到)。
根據提示目錄打開initialAdminPassword文件,複製出密碼,填寫,Continue.
Jenkins用戶/secrets/目錄是沒有讀寫權限的。修改權限。
這樣Jenkins初始化完畢了,能夠快樂的使用了。仍是介紹下如何使用吧。
上文說了,如何初始化進入Jenkins,那麼若是我關了再次怎麼進入呢。別急hold~~~ 兩種方式均可以
java -jar jenkins.war
複製代碼
sudo touch /Library/LaunchDaemons/org.jenkins-ci.plist
複製代碼
若是您使用了不一樣的用戶名,請務必在plist中使用它。須要指定用戶名,不然會以系統根用戶的身份運行,這會讓您在使用Jenkins時遇到麻煩
plist內容以下
<?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>Label</key>
<string>Jenkins</string>
<key>KeepAlive</key>
<true/>
<key>ProgramArguments</key>
<array>
<string>/usr/bin/java</string>
<string>-Dmail.smtp.starttls.enable=true</string>
<string>-jar</string>
<string>/usr/local/opt/jenkins/libexec/jenkins.war</string>
<string>--httpListenAddress=127.0.0.1</string>
<string>--httpPort=8080</string>
</array>
<key>RunAtLoad</key>
<true/>
<key>UserName</key>
<string>jenkins</string>
</dict>
</plist>
複製代碼
如今能夠從新啓動或者運行下方命令來查看運行在http://localhost:8888的Jenkins 。
sudo launchctl load -w /Library/LaunchDaemons/org.jenkins-ci.plist
複製代碼
使用默認方式安裝的基本插件都包含了,若是有須要能夠本身來管理插件
在工做中可能要在Jenkins中建立用戶,這樣你的團隊的其餘成員就能夠訪問本身的工做。首先打開左側菜單中的「管理Jenkins」頁面,而後轉到「配置全局安全性」。
啓用安全性,若是不那麼將容許任何登陸用戶作任何事情。
首先,咱們須要配置 SSH,咱們能夠在 Jenkins 的證書管理中添加 SSH。在 Jenkins 管理頁面,選擇「Credentials」,而後選擇「Global credentials (unrestricted)」,點擊「Add Credentials」,以下圖所示,咱們填寫本身的 SSH 信息,而後點擊「Save」,這樣就把 SSH 添加到 Jenkins 的全局域中去了。
cd /users/xxx/xxx //你項目根目錄
fastlane topgyer desc:更新內容!
複製代碼
來個總體截圖
blog.csdn.net/birthmarkqi… www.jianshu.com/p/047362b11…
SSH key 可讓你在你的電腦和Code服務器之間創建安全的加密鏈接。 先執行如下語句來判斷是否已經存在本地公鑰:
cat ~/.ssh/id_rsa.pub
複製代碼
若是你看到一長串以 ssh-rsa
或 ssh-dsa
開頭的字符串, 你能夠跳過 ssh-keygen
的步驟。
提示: 最好的狀況是一個密碼對應一個ssh key,可是那不是必須的。你徹底能夠跳過建立密碼這個步驟。請記住設置的密碼並不能被修改或獲取。
你能夠按以下命令來生成ssh key:
ssh-keygen -t rsa -C "你的郵箱@xx.com"
複製代碼
這個指令會要求你提供一個位置和文件名去存放鍵值對和密碼,你能夠點擊Enter鍵去使用默認值。
用如下命令獲取你生成的公鑰:
cat ~/.ssh/id_rsa.pub
複製代碼
複製這個公鑰放到你的我的設置中的SSH/My SSH Keys下,請完整拷貝從ssh-
開始直到你的用戶名和主機名爲止的內容。
若是打算拷貝你的公鑰到你的粘貼板下,請參考你的操做系統使用如下的命令:
Windows:
clip < ~/.ssh/id_rsa.pub
複製代碼
Mac:
pbcopy < ~/.ssh/id_rsa.pub
複製代碼
GNU/Linux (requires xclip):
xclip -sel clip < ~/.ssh/id_rsa.pub
複製代碼