iOS 持續(xù)集成與持續(xù)分發(fā)(jenkins+fastlane+pgyer)

摘要

手動打包垮耳、手動上傳是一件非常煩瑣的事件仿粹,通常會浪費開發(fā)者大量的時間朵你,這時候自動打包與分發(fā)就起到的重要的角色。本文主要分為4個部分

  • 講述jenkins在mac下的安裝與任務創(chuàng)建
  • fastlane安裝與應用
  • 自動上傳到蒲公英并郵件通知相關人員去下載安裝
  • xcode打包原理

一蝴光、mac環(huán)境下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鑰匙串插件,訪問地址與端口號更改等

  • 地址修改
    進入上面中系統(tǒng)管理->系統(tǒng)設置
    如下:


    jenkins-5.png
  • 全局屬性設置

    jenkins5.png

    上圖中牍帚,PATH參數(shù)獲取方法:
    終端輸入echo $PATH
    jenkins-8.png

  • 打包成功或失敗儡遮,郵件通知


    ![Uploading jenkins-6_671804.png . . .]

    jenkins-6.png
1.4 jenkins插件安裝

上面我們選擇推薦安裝,對于ios開發(fā)暗赶,其實大部分已經(jīng)默認安裝鄙币,這里我們以keychain為例安裝一個(后續(xù)fastlane用到match匹配同步開發(fā)證書時肃叶,會訪問鑰匙串)

  • 在jenkins主面,系統(tǒng)管理->控件管理


    jenkins11.png
  • 選擇可選插件十嘿,右邊搜索框輸入keychain,勾先安裝完成后重啟jenkins因惭,點擊安裝


    jenkins10.png
  • 設置keychain相關,在jenkins主面绩衷,系統(tǒng)管理->控件管理蹦魔,點擊keychain。咳燕。勿决。,然后來點頁面:
    jenkins12.png

    打開keychain位置的命令:open ~/Library/Keychains/
    如果不設置這個招盲,那么在創(chuàng)建任務中低缩,在Excute shell中就要加上這句:security unlock-keychain -p 你的電腦密碼 login.keychain
1.5 jenkins任務創(chuàng)建與任務配置
  • 創(chuàng)建,新建->選擇構建一個自由風格的軟件項目宪肖。如下圖


    jenkins7.png

    然后主面右邊就會出現(xiàn)剛創(chuàng)建好的表制。點擊進去健爬。來到任務主頁控乾。

  • 任務主頁


    jenkins13.png
  • 配置相關信息

    • 配置構建存留周期次數(shù)、Git等娜遵,如下圖


      jenkins14.png
    • 配置運行腳本蜕衡,這里主要配置一些你打包的命令腳本。

      jenkins15.png

      這里的腳本设拟,可以參照下文第二部分fastlane中fastfile配置慨仿,里面實現(xiàn)了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牢硅,就會出現(xiàn)上面的圖,填寫好標題兩天內(nèi)容即可芝雪。

    • 郵件發(fā)送成功示例


      jenkins17.png
    • 構建過程中减余,可通過點擊當前構建,點擊console output查看打包過程中的輸出日志惩系。


      jenkins20.png

建議把jenkins頁面右上角的允許自動刷新打開


二位岔、fastlane安裝與配置

fastlane是一個完全開源的項目,包含一組 Ruby 實現(xiàn)的工具集,能完成 iOS 和 Android 工程 的自動化構建\測試和發(fā)布如筛,用來執(zhí)行某一特定的任務,可以通過配置文件將不同的工具靈活的結合在一起,從而形成一個完整的自動化流程,實現(xiàn)一鍵上傳 ITC,從而縮短用于構建發(fā)布的時間,其主要工具集如下:

  • sigh: 開發(fā)證書和描述文件下載
  • produce: 使用命令行在iTunes Connect上創(chuàng)建新的app和開發(fā)入口
  • cert: 自動創(chuàng)建和配置iOS代碼簽名證書
  • spaceship: Ruby 庫訪問 Apple開發(fā)者中心和 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 // 若未安裝則會自動安裝抒抬,若已經(jīng)安裝妙黍,則提示: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過程,由于我的帳號關聯(lián)了兩個開發(fā)者帳號瞧剖,于是會彈出讓我選擇哪一個的選項拭嫁。


    fastlane1.png

上述過程中,會要求你填寫開發(fā)者帳號密碼等信息抓于。完成后做粤,會在你的工程目錄在創(chuàng)建一個fastlane文件夾

  • 文件夾如圖所示


    fastlane2.png

    各文件描述:

    • Appfile:用于存儲應用程序標識符和Apple ID 等信息
    • Fastfile:配置管理 lane 我們打包主要是配置這個文件
    • Deliverfile:配置應用在 iTunes Connect 中的各種信息,和 ICC 中的數(shù)據(jù)是一一對應的
    • metadata:包含應用在 iTunes Connect 中的各種信息
    • screenshots:包含截圖數(shù)據(jù)

項目工程中,Edit Scheme打開的頁面捉撮,Shared前的勾選框怕品,應該打上勾。不然jenkins打包過程中巾遭,可能報錯肉康。
接下來主要講述Fastfile文件配置

2.3 fastfile文件編寫

下面用到的工具match、gym灼舍、deliver吼和、gpyer等,均可以通過:fastlane 工具名 --help查看里面的參數(shù)如何寫等

  • match匹配證書
    • 首先要一個倉庫來存放證書與profile文件


      fastaneMatch1.png
    • 在工程目錄下執(zhí)行 fastlane match init,過程中會要求你填入一個git倉庫骑素。把上面創(chuàng)建好的填入即可炫乓。
      fastaneMatch2.png
    • 這樣,在fastlane文件夾會添加一個Matchfile文件献丑。


      fastaneMatch3.png
    • 內(nèi)容如下


      fastaneMatch4.png
    • 在fastfile文件中末捣,添加匹配證書的執(zhí)行塊:
      fastaneMatch6.png

      其中,match函數(shù)中的參數(shù)key與參數(shù)值value创橄,可在終端執(zhí)行:fastlane match --help 或者 github上查看:match
    • 在終端執(zhí)行fastlane matchDev后箩做,倉庫上,keychain中妥畏,jenkins環(huán)境中邦邦,均會有證書相關文件
      fastaneMatch5.png

      執(zhí)行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) # 匹配開發(fā)證書
end
  • gym打包
    • 在fastfile中配置打包,這里用到gym工具俘陷,可通過fastlane gym --help或github查看gym用法
      fastaneMatch7.png

      其中,首先匹配證書观谦。像里面用到的increment_build_number 這些都可通過fastlane actions查看到拉盾。
      下面這樣,省去build版本自增等豁状,更為簡潔捉偏。
desc "打包測試"
  lane :dev do
    match(git_url:"https://git.oschina.net/yang***/cer.git",type: "development",keychain_password:"123",app_identifier:"cn.com.**") # 匹配開發(fā)證書
   
     # 打包,具體參數(shù)可fastlane gym -h查看
     gym(clean: true,scheme:"GC",configuration:"Debug",output_name:"GC_Test",export_method:"development")
  
    # 上傳到薄公英,可以去薄公英官網(wǎng)查看插件安裝方法
     pgyer(api_key: "6ef35de7a3c4c60***dd48825eac3a", user_key: "ce1e4c***c27232fcde878db3",password: "a**23", install_type: "2")
    # 發(fā)布
     # deliver(force: true,skip_screenshots:true,skip_metadata: true)    # 不上傳截屏文件和元數(shù)據(jù)泻红。
  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自動打包母廷,發(fā)布應用xcodebuild 自動化構建

  • xcode打包發(fā)布流程
    • 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琴昆,生產(chǎn)包:Release.
  • CODE_SIGN_IDENTITY獲让ケ伞:
    鑰匙串訪問->選中證書->上方的標題就是我們需要的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文件下面,我們可以在項目中手動創(chuàng)建一個复颈,然后把這個文件地址拖進來。plist具體有哪些參數(shù)沥割,用命令:xcodebuild exportOptionsPlist --help查看耗啦,在輸出的Available keys for -exportOptionsPlist項:
    jenkins12.png
  • ipa包上傳凿菩,我們工作中一般用的是Application Loader或xcode 打包后的upload按鈕,但是它們的本質(zhì)其實都是用:altool來實現(xiàn)帜讲。
    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  就會有它的一些用法提示,否則就是設置別名失敗了

同理似将,別的工具也可以用此方法實現(xiàn)別名處理获黔,以快速在終端打開工具。

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]

具體參數(shù)說明:
--validate-app
您要驗證的應用程序在验。
--upload-app
您要上傳的應用程序肢执。
-f file
您正在驗證或上傳的應用程序的路徑和文件名。
-u username
您的用戶名译红。
-p password
您的用戶密碼预茄。
--output-format [xml | normal]
您要 Application Loader 以結構化的 XML 格式還是非結構化的文本格式返回輸出信息。Application Loader 默認以文本格式返回輸出信息侦厚。

altool官方文檔

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末耻陕,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子刨沦,更是在濱河造成了極大的恐慌诗宣,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,496評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件想诅,死亡現(xiàn)場離奇詭異召庞,居然都是意外死亡,警方通過查閱死者的電腦和手機来破,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,407評論 3 392
  • 文/潘曉璐 我一進店門篮灼,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人徘禁,你說我怎么就攤上這事诅诱。” “怎么了送朱?”我有些...
    開封第一講書人閱讀 162,632評論 0 353
  • 文/不壞的土叔 我叫張陵娘荡,是天一觀的道長。 經(jīng)常有香客問我驶沼,道長炮沐,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,180評論 1 292
  • 正文 為了忘掉前任回怜,我火速辦了婚禮大年,結果婚禮上彭谁,老公的妹妹穿的比我還像新娘冰悠。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 67,198評論 6 388
  • 文/花漫 我一把揭開白布链嘀。 她就那樣靜靜地躺著俭识,像睡著了一般雾消。 火紅的嫁衣襯著肌膚如雪灭将。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,165評論 1 299
  • 那天失都,我揣著相機與錄音柏蘑,去河邊找鬼。 笑死粹庞,一個胖子當著我的面吹牛咳焚,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播庞溜,決...
    沈念sama閱讀 40,052評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼革半,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了流码?” 一聲冷哼從身側響起又官,我...
    開封第一講書人閱讀 38,910評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎漫试,沒想到半個月后六敬,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,324評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡驾荣,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,542評論 2 332
  • 正文 我和宋清朗相戀三年外构,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片播掷。...
    茶點故事閱讀 39,711評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡审编,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出叮趴,到底是詐尸還是另有隱情割笙,我是刑警寧澤,帶...
    沈念sama閱讀 35,424評論 5 343
  • 正文 年R本政府宣布眯亦,位于F島的核電站,受9級特大地震影響般码,放射性物質(zhì)發(fā)生泄漏妻率。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,017評論 3 326
  • 文/蒙蒙 一板祝、第九天 我趴在偏房一處隱蔽的房頂上張望宫静。 院中可真熱鬧,春花似錦、人聲如沸孤里。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,668評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽捌袜。三九已至说搅,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間虏等,已是汗流浹背弄唧。 一陣腳步聲響...
    開封第一講書人閱讀 32,823評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留霍衫,地道東北人候引。 一個月前我還...
    沈念sama閱讀 47,722評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像敦跌,于是被迫代替她去往敵國和親澄干。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,611評論 2 353

推薦閱讀更多精彩內(nèi)容