iOS自動化打包實戰(zhàn)(Jenkins)

Continuous Integration(CI)持續(xù)集成的優(yōu)點

  • 簡而言之,它能帶來高效的開發(fā)流程,讓開發(fā)人員從"集成"的人力成本中解放出來

Jenkins工具對于CI的意義

  • 如果說CI是一種概念纫谅,那Jenkins就是實現(xiàn)這個概念的比較有力的工具
  • 對于移動端開發(fā)而言,持續(xù)集成的最好實踐就是自動化打包測試
  • Jenkins在移動端CI上有著以下幾點的優(yōu)勢
    • Mac平臺上搭建簡易:iOS自動化打包需要Xcode命令行工具的支持,在Mac平臺上搭建會方便許多益缎,坑也會少很多
    • 插件支持友好:對于iOS自動化打包,Jenkins提供足夠多的插件支持
    • 自帶日志:Jenkins默認情況下集成日志然想,不需要手動生成
    • 默認集成GIT:Jenkins集成的GIT模塊可以方便地對GIT上的代碼進行持續(xù)集成的工作

Jenkins部署

  • 從官網(wǎng)jenkins.io/ 上下載最新的pkg安裝包
  • 安裝完成后莺奔,打開瀏覽器,輸入http://localhost:8080
    • 如果無法打開又沾,則說明Java環(huán)境有問題弊仪,重新安裝最新的JDK即可
    • 出現(xiàn)以下界面說明Jenkins已經(jīng)被正確地啟動服務(wù)


      服務(wù)正確啟動.png
    • 按照提示,在Finder中定位到文件夾杖刷,右鍵選擇“顯示簡介”励饵,設(shè)置權(quán)限


      Finder 簡介.png
    • 權(quán)限設(shè)置完畢后,進入文件夾打開initialAdminPassword就能找到密碼滑燃,復(fù)制并填寫到Jenkins服務(wù)的網(wǎng)頁(http://localhost:8080)中并繼續(xù)
    • 初始化設(shè)置役听,按照默認的就好了,繼續(xù)
    • 創(chuàng)建用戶,然后點擊“保存并完成”
  • 插件安裝(系統(tǒng)管理->管理插件->可選插件)
    • GitLab Plugin(可選典予,如果代碼是部署到GitLab環(huán)境的話安裝)
    • Gitlab Hook Plugin(可選甜滨,如果代碼是部署到GitLab環(huán)境的話安裝)
    • Xcode integration(可選,如果不想寫腳本執(zhí)行打包的選擇這個作為替代)注意:目前發(fā)現(xiàn)新版本的MAC系統(tǒng)(10.13)和Xcode9默認是不允許訪問鑰匙串的瘤袖,所以建議都用腳本打包
    • Keychains and Provisioning Profiles Management(如果使用腳本執(zhí)行打包衣摩,則需要安裝該插件來管理鑰匙串和證書)

信息配置

  • 鑰匙串和證書
    • 使用Jenkins部署自動化打包環(huán)境總的來說是比較友好而且快速的,如果說有坑捂敌,那最主要的坑來源就在證書和鑰匙串準備這一環(huán)節(jié)
    • Jenkins在Mac環(huán)境下是通過獨立用戶來做到文件系統(tǒng)層面上的相對獨立艾扮,總所周知,打包iOS的iPA包是需要本機環(huán)境擁有簽名數(shù)字證書(Certificate)和描述文件(Provisioning profile)的占婉,由于環(huán)境的獨立性泡嘴,需要在Jenkins所在的環(huán)境內(nèi)放置/安裝這些內(nèi)容
    • 以下是在Jenkins配置簽名數(shù)字證書(Certificate)和描述文件(Provisioning profile)的可能是最保險的實現(xiàn)方式
      • 在Jenkins Dashborad(Jenkins首頁)下,點擊“系統(tǒng)管理”—>“系統(tǒng)設(shè)置”逆济,滾動找到Xcode Builder這一個fragment
        Xcode Builder fragment.png
      • 上圖所示酌予,Keychain path的默認值如圖,可以指定一個路徑(最好是Jenkins用戶文件夾下的路徑奖慌,以防訪問權(quán)限問題)抛虫,這里直接在該默認路徑下使用Finder創(chuàng)建對應(yīng)的文件夾,并把/Users/用戶名/Library/Keychains/login.keychain復(fù)制進該文件夾简僧,如果鑰匙串文件有密碼莱褒,記得填上


        Keychain path.png
      • 最重要的一步,雙擊復(fù)制之后的login.keychain涎劈,進入到“鑰匙串訪問”广凸,看看里面的簽名數(shù)字證書是否正確的(如果你主機的證書變動過,復(fù)制之后的login.keychain不一定是跟主機的login.keychain一樣蛛枚,所以要打開確認一下谅海,原因是實際上證書的完整內(nèi)容是保存login.keychain-db里面,login.keychain和login.keychain-db的信息不一定完全對等)蹦浦,如果不正確扭吁,就需要把缺失的證書補全,調(diào)整完之后可以在鑰匙串訪問中刪除該登錄鑰匙串的引用


        鑰匙串訪問.png
  • 命令行打包配置:Keychains and Provisioning Profiles Management
    • 如果使用命令行打包盲镶,則需要額外配置鑰匙串和配置文件
    • 設(shè)置位置:Jenkins Dashborad(Jenkins首頁)-> 系統(tǒng)管理 -> Keychains and Provisioning Profiles Management


      Keychains and Provisioning Profiles Management.png
  • 設(shè)置域名驗證(以GitLab為例侥袜,GitHub也大同小異)
    • Jenkins Dashborad(Jenkins首頁)-> Credentials
    • 這里可以選擇兩種添加方式:全局證書 & 域名證書
    • 顧名思義:全局證書就是全局都能使用的證書,域名證書則是指定域名才能使用的證書


      Credentials.png
    • 這里以域名證書為例溉贿,設(shè)置GitLab SSH(為什么不用HTTP枫吧,因為Jenkins的HTTP連接方式可能會無法連上,而且SSH可以繞過Nginx的文件上傳大小限制宇色,總之用SSH的坑會少一些)


      新增域名.png

      填寫SSH信息.png

      添加完成.png
  • PS: 如果經(jīng)過以上步驟仍然出現(xiàn)因為證書而無法打包成功的情況九杂,可以把證書安裝到“鑰匙串訪問”-“系統(tǒng)”里(原來一般都會把證書安裝到“鑰匙串訪問”-“登錄”里面)

構(gòu)建項目

  • Jenkins Dashborad(Jenkins首頁)點擊“新建”


    新建項目.png
  • 新建項目界面颁湖,按照提示填寫并繼續(xù)


    項目基本信息.png
  • 配置項目(這里以執(zhí)行腳本打包的方法為例)


    General.png

    源碼管理.png

    構(gòu)建觸發(fā)器.png

    構(gòu)建環(huán)境.png

    構(gòu)建.png
  • 編寫執(zhí)行的腳本

    • 本人比較推薦使用腳本的方式進行打包,而不是使用Jenkins的Xcode integration例隆,因為使用腳本比較靈活而且可復(fù)用
    • 腳本核心邏輯:清理工程 -> 歸檔工程 -> 導(dǎo)出ipa -> 驗證ipa -> 上傳ipa
    • 核心邏輯對應(yīng)的腳本代碼(以使用cocoapod的iOS項目為例):
      • 重要參數(shù)解析:
        • CODE_SIGN_IDENTITY:簽名證書的名字甥捺,格式--"iPhone Distribution: Shanghai ******* Co., Ltd.(*****)"

        • PROVISIONING_PROFILE:配置文件的UUID,獲取方式--Jenkins Dashborad(Jenkins首頁)-> 系統(tǒng)管理 -> Keychains and Provisioning Profiles Management


          Keychains and Provisioning Profiles Management.png
        • -exportOptionsPlist:這是導(dǎo)出選項的plist文件的路徑镀层,該plist文件的簡單示例如下镰禾,具體解釋可以在命令行中輸入xcodebuild -help查看

            <?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>method</key>
                <string>app-store</string>
                <key>teamID</key>
                <string>開發(fā)小組ID</string>
            </dict>
            </plist>
        
        • altool路徑:這其實就是ipa上傳工具Application Loader的命令行工具,一般地址位于/Applications/Xcode.app/Contents/Applications/Application Loader.app/Contents/Frameworks/ITunesSoftwareService.framework/Versions/A/Support/altool
      • 清理工程:xcodebuild -workspace <工作區(qū)間名字.xcworkspace> -scheme <scheme名字唱逢,一般為工程名字> -configuration <Release或者Debug> clean
      • 歸檔工程:xcodebuild archive -workspace <工作區(qū)間名字.xcworkspace> -scheme <scheme名字羡微,一般為工程名字> -archivePath <歸檔路徑> -configuration <Release或者Debug> CODE_SIGN_IDENTITY=<簽名證書的完整名字> PROVISIONING_PROFILE=<配置文件的UUID>
      • 導(dǎo)出ipa:xcodebuild -exportArchive -archivePath <歸檔路徑> -exportPath <導(dǎo)出ipa路徑> -exportOptionsPlist <導(dǎo)出選項的plist文件>
      • 驗證ipa:<altool路徑> --validate-app -f <驗證ipa的完整路徑> -u <appleID賬號名> -p <appleID密碼> -t <平臺名,ios> --output-format <輸出日志的格式normal或者xml>
      • 上傳ipa:<altool路徑> --upload-app -f <驗證ipa的完整路徑> -u <appleID賬號名> -p <appleID密碼> -t <平臺名惶我,ios> --output-format <輸出日志的格式normal或者xml>
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市博投,隨后出現(xiàn)的幾起案子绸贡,更是在濱河造成了極大的恐慌,老刑警劉巖毅哗,帶你破解...
    沈念sama閱讀 207,248評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件听怕,死亡現(xiàn)場離奇詭異,居然都是意外死亡虑绵,警方通過查閱死者的電腦和手機尿瞭,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,681評論 2 381
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來翅睛,“玉大人声搁,你說我怎么就攤上這事〔斗ⅲ” “怎么了疏旨?”我有些...
    開封第一講書人閱讀 153,443評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長扎酷。 經(jīng)常有香客問我檐涝,道長,這世上最難降的妖魔是什么法挨? 我笑而不...
    開封第一講書人閱讀 55,475評論 1 279
  • 正文 為了忘掉前任谁榜,我火速辦了婚禮,結(jié)果婚禮上凡纳,老公的妹妹穿的比我還像新娘窃植。我一直安慰自己,他們只是感情好荐糜,可當我...
    茶點故事閱讀 64,458評論 5 374
  • 文/花漫 我一把揭開白布撕瞧。 她就那樣靜靜地躺著陵叽,像睡著了一般。 火紅的嫁衣襯著肌膚如雪丛版。 梳的紋絲不亂的頭發(fā)上巩掺,一...
    開封第一講書人閱讀 49,185評論 1 284
  • 那天,我揣著相機與錄音页畦,去河邊找鬼胖替。 笑死,一個胖子當著我的面吹牛豫缨,可吹牛的內(nèi)容都是我干的独令。 我是一名探鬼主播,決...
    沈念sama閱讀 38,451評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼好芭,長吁一口氣:“原來是場噩夢啊……” “哼燃箭!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起舍败,我...
    開封第一講書人閱讀 37,112評論 0 261
  • 序言:老撾萬榮一對情侶失蹤招狸,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后邻薯,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體裙戏,經(jīng)...
    沈念sama閱讀 43,609評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,083評論 2 325
  • 正文 我和宋清朗相戀三年厕诡,在試婚紗的時候發(fā)現(xiàn)自己被綠了累榜。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,163評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡灵嫌,死狀恐怖壹罚,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情寿羞,我是刑警寧澤渔嚷,帶...
    沈念sama閱讀 33,803評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站稠曼,受9級特大地震影響形病,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜霞幅,卻給世界環(huán)境...
    茶點故事閱讀 39,357評論 3 307
  • 文/蒙蒙 一漠吻、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧司恳,春花似錦途乃、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,357評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽烫饼。三九已至,卻和暖如春试读,著一層夾襖步出監(jiān)牢的瞬間杠纵,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,590評論 1 261
  • 我被黑心中介騙來泰國打工钩骇, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留比藻,地道東北人。 一個月前我還...
    沈念sama閱讀 45,636評論 2 355
  • 正文 我出身青樓倘屹,卻偏偏與公主長得像银亲,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子纽匙,可洞房花燭夜當晚...
    茶點故事閱讀 42,925評論 2 344

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