iOS 持續(xù)集成(Jenkins(本地) + GitHub + 蒲公英)

說明: iOS的持續(xù)集成一定要在Mac上進(jìn)行

Jenkins安裝

使用brew 進(jìn)行安裝 Homebrew
默認(rèn)已經(jīng)安裝好brew了,下面開始操作了

一.Jenkins命令行安裝
  • 在終端輸入命令行 brew install Jenkins, Jenkins 基于java環(huán)境,所以命令執(zhí)行后,可能會(huì)看到
    Jenkins: Java 1.7+ is required to install this formula.
    JavaRequirement unsatisfied!
    
    You can install with Homebrew-Cask:
      brew cask install java
    
  • 然后根據(jù)提示 在終端中輸入 brew cask install java ,安裝過程需要輸入Mac登錄密碼
  • 安裝java環(huán)境完成之后,提示 ?? java was successfully installed!
  • 安裝java成功之后,重新執(zhí)行 brew install Jenkins, 即可.等待完成
  • 結(jié)束以后,默認(rèn)端口8080,終端打印日志可以看到安裝成功
如果需要修改端口: 
1.   到j(luò)ava安裝環(huán)境路徑下 cd /usr/local/Cellar/Jenkins/2.73/libexec 
2.   指定端口啟動(dòng)jenkins  java -jar ./Jenkins.war --httpPort=8889

安裝成功提示:


Jenkins安裝成功提示.jpeg
  • 然后按照日志中的提示: 在終端直接執(zhí)行Jenkins,等待運(yùn)行完畢即可
二.Jenkins配置
  • 打開網(wǎng)址 localhost:8080. 第一次打開,會(huì)進(jìn)入到初次登錄頁(yè)面
    Jenkins初次登錄頁(yè)面.png
  • 按照提示進(jìn)入到路徑文件夾下獲取密碼即可,也可以從剛剛終端輸出位置找到默認(rèn)密碼即可 /Users/用戶名/.Jenkins/secrets/initialAdminPassword
Jenkins終端密碼提示.png

后續(xù)步驟如下


Jenkins配置選擇頁(yè).png

Jenkins安裝進(jìn)度頁(yè).png

安裝過程保證網(wǎng)絡(luò)良好,如果卡著不動(dòng)了,參考下面一個(gè)朋友的解決辦法.

  • 就在上圖所示的這一步下載的時(shí)候,基本上最后肯定有幾個(gè)插件沒有下載好,然后就停在這里不動(dòng)了,不管怎么都不動(dòng)累奈,然后關(guān)機(jī)重啟,重新進(jìn)入.wars所在的文件路徑,在終端執(zhí)行java -jar Jenkins.war --httpPort=8888命令才能在輸入http://localhost:8888后能登錄Jenkins登錄界面持钉,才跳到下圖所示的管理員用戶注冊(cè)頁(yè)面
Jenkins注冊(cè)頁(yè)面.png

然后就是常規(guī)注冊(cè),不表!

三.Jenkins 插件安裝
  • 登陸后 -> 系統(tǒng)管理 -> 管理插件 -> 可選插件, 搜索需要的插件,選中之后拖到底部,點(diǎn)擊安裝

    Jenkins 管理頁(yè)面.png

    Jenkins 管理插件.png

    Jenkins 選擇插件.png

    安裝下列插件,拖到底部,安裝所選插件,(有時(shí)候會(huì)卡主,需要手動(dòng)刷新), 也可以選擇自動(dòng)一段時(shí)間后刷新頁(yè)面即可

    GitLab plugin
    - Gitlab是一個(gè)用于代碼倉(cāng)庫(kù)管理的開源項(xiàng)目,用來在Jenkins上管理源代碼
    - 當(dāng)git上的代碼被提交 / 創(chuàng)建一個(gè)合并請(qǐng)求 / 現(xiàn)有合并請(qǐng)求關(guān)閉/合并時(shí), 
    - GitLab 會(huì)記錄構(gòu)建狀態(tài),然后觸發(fā)Jenkins,將Git上代碼獲取到Jenkins 上
    
    Xcode integration   
    - Xcode 編譯插件,相當(dāng)于將Xcode的編譯過程的命令行操作,通過界面化展示了出來,Jenkins 調(diào)用本地Xcode進(jìn)行編譯,相當(dāng)于講一個(gè)Xcode 裝在了Jenkins上
    
    Credentials Plugin
    - 管理證書插件
    
    Keychains and Provisioning Profiles Management  
    - 鑰匙串開發(fā)者證書 及 項(xiàng)目描述文件
    
說明: 評(píng)論里有個(gè)哥們說:

最新的Jenkins直接會(huì)從資源庫(kù)的Provisioning Profiles讀取Profiles帅戒,模板的 Mobile Profiles 也不用勾選了,大家可以試一下

  • 安裝完成后 -> 系統(tǒng)管理 -> Keychains and Provisioning Profiles Management (如果沒有的話,查看上一步,安裝Keychains and Provisioning Profiles Management插件)
Jenkins密碼描述文件設(shè)置.png

這個(gè)地方需要注意,需要上傳兩個(gè)文件,一個(gè)是鑰匙串 keychains 文件(用于打開鑰匙串中的相應(yīng)的開發(fā)證書),一個(gè)是項(xiàng)目所需的描述文件(可以將生產(chǎn)描述文件 和 開發(fā)描述文件都傳上去)

Jenkins證書和描述文件具體設(shè)置頁(yè).png

上傳到Jenkins上的鑰匙串需要輸入密碼, 上傳的描述文件,需要指定一個(gè)存放路徑,路徑自己指定,Jenkins能找到就行

鑰匙串的開發(fā)證書名稱獲取: 鑰匙串 -> 找到對(duì)應(yīng)開發(fā)證書 -> 右鍵顯示簡(jiǎn)介 -> 細(xì)節(jié) -> 常用名稱就是我們需要的證書完整名稱了,填入到上圖對(duì)應(yīng)位置即可

Jenkins鑰匙串路徑.png

描述文件,就是我們從蘋果開發(fā)者網(wǎng)站下載的,UUID就是證書的標(biāo)識(shí),系統(tǒng)會(huì)自動(dòng)識(shí)別,不需要手動(dòng)輸入

設(shè)置完畢之后點(diǎn)擊保存即可,需要注意的是,兩個(gè)上傳操作最好分開進(jìn)行,因?yàn)樯蟼髁硪粋€(gè)時(shí),之前輸入的內(nèi)容可能會(huì)消失,這個(gè)地方需要注意下,好好檢查下,是否輸入完畢.

三.項(xiàng)目創(chuàng)建
Jenkins新建項(xiàng)目.png
  • 點(diǎn)擊Jenkins主目錄下的新建按鈕,進(jìn)到新建項(xiàng)目頁(yè)面,輸入項(xiàng)目名稱,選擇構(gòu)建一個(gè)自由風(fēng)格的軟件項(xiàng)目
Jenkins具體新建項(xiàng)目.png
  • 創(chuàng)建完畢之后,可以在Jenkins主界面,看到項(xiàng)目,點(diǎn)擊進(jìn)入項(xiàng)目,在左側(cè)選項(xiàng)欄中,選擇配置,進(jìn)入配置界面
  • 在構(gòu)建步驟,需要添加腳本和xcode設(shè)置,后面會(huì)講
Jenkins項(xiàng)目設(shè)置.png

構(gòu)建新版本時(shí),之前的ipa如果想保留,可以設(shè)置ipa包名稱按照時(shí)間戳命名

Git設(shè)置,Credentials相當(dāng)于告訴GitLab插件,GitHub賬號(hào)和密碼,在自己的電腦上一般不用設(shè)置,需要設(shè)置的話,可以設(shè)置賬號(hào)和密碼,也可以上傳密鑰方式

當(dāng)前打包觸發(fā)方式,需要自己設(shè)置,我這里沒有設(shè)置,可以定時(shí),或者安裝githook插件

構(gòu)建環(huán)境中鑰匙串和描述文件,一般在第一次設(shè)置時(shí),會(huì)不顯示我們之前上傳的鑰匙串和描述文件內(nèi)容,保存退出,再次進(jìn)入一次就可以了

Git上只有podfile文件,沒有將pods文件上傳上去,所以要執(zhí)行一個(gè)腳本更新一下,pod:添加構(gòu)建步驟 -> Execute shell,需要放到最前,因?yàn)閜ods要在編譯前就添加

#!/bin/bash -l
export LANG=en_US.UTF-8
export LANGUAGE=en_US.UTF-8
export LC_ALL=en_US.UTF-8
echo ++++++++++++++++++++++++++++++++++
pod install --verbose --no-repo-update
echo ++++++++++++++++++++++++++++++++++

添加xcode運(yùn)行步驟,需要注意的是:如果項(xiàng)目使用pods需要設(shè)置scheme和xcworkspace 同名

Code signing & OS X keychain options步驟,要輸入Development Team ID這個(gè)就是開發(fā)證書編號(hào),就是我們?cè)诿枋鑫募丸€匙串上傳的那個(gè)開發(fā)證書最后幾位數(shù)字

打包成功之后,將ipa上傳到蒲公英是一個(gè)不錯(cuò)的選擇,需要ukey和apikey,蒲公英

#蒲公英上的User Key
uKey="你的ukey,蒲公英獲取"
#蒲公英上的API Key
apiKey="蒲公英獲取"
#執(zhí)行上傳至蒲公英的命令
echo "++++++++++++++upload+++++++++++++"
curl -F "file=@/Users/用戶名/.jenkins/workspace/Jenkins_Demo/build/Jenkins_Demo.ipa" -F "uKey=${uKey}" -F "_api_key=${apiKey}"  http://www.pgyer.com/apiv1/app/upload
echo http://www.pgyer.com

在本地項(xiàng)目提交到Git時(shí),項(xiàng)目中最好設(shè)置好項(xiàng)目配置,什么證書啊,描述文件啊,等等,因?yàn)镴enkins的打包代碼是你提交的代碼,我們應(yīng)該按照打包的設(shè)置設(shè)置好,然后提交.Jenkins相當(dāng)于一個(gè)運(yùn)行腳本和記錄的平臺(tái),打包環(huán)境的配置還是要自己來的

準(zhǔn)備工作完成以后,點(diǎn)擊保存,回調(diào)項(xiàng)目目錄,進(jìn)行構(gòu)建

Jenkins本地項(xiàng)目設(shè)置.png

Jenkins本地項(xiàng)目設(shè)置2.png

這個(gè)可以通過通過終端,cd到項(xiàng)目路徑下, xcodebuild -list ,查看當(dāng)前項(xiàng)目是否有schemes(一個(gè)workspace可以包含多個(gè)project,一個(gè)project可以包含多個(gè)target膘魄,Scheme包含了所有的target集合,用于指定一個(gè)應(yīng)用),如果沒有的話,需要到 Product --> Scheme --> Manage Schemes 找到和項(xiàng)目同名的scheme

shared打開,使得Jenkins也可以進(jìn)行調(diào)用編譯

三.運(yùn)行Jenkins項(xiàng)目
  • 配置完成以后,回到項(xiàng)目頁(yè)面點(diǎn)擊立即構(gòu)建,構(gòu)建當(dāng)前項(xiàng)目.


    Jenkins立即構(gòu)建.png
  • 構(gòu)建過程

Jenkins更新Git代碼.png
Jenkinspofile文件更新.png
  • 打包完成之后,將ipa包上傳到蒲公英上,蒲公英會(huì)給注冊(cè)手機(jī)發(fā)送短信,當(dāng)然你也可以在Jenkins中加入郵件通知,通過郵件獲取結(jié)果


    Jenkins上傳到蒲公英.png
  • 關(guān)于Linux下Jenkins管理iOS代碼的問題,可以參考這篇文章,當(dāng)然你也可以問我,后續(xù)有時(shí)間在寫吧,坑還是很多的

jenkins 更新描述文件

  1. 將 Xcoode signing 改成手動(dòng)模式 (debug 和 release)手動(dòng)選擇對(duì)應(yīng)的描述文件

  2. 從 Xcode 9 開始,打包需要一個(gè)plist文件,用來指定打包的類型和文件,如果修改了描述文件名稱和類型,也需要更改相應(yīng)的配置

  3. 如果還不行的話,將之前的該項(xiàng)目描述文件刪除,因?yàn)榇虬鼤r(shí),會(huì)自動(dòng)選擇一個(gè)默認(rèn)的描述文件進(jìn)行打包

寫在最后:

當(dāng)你看到 Finished : SUCCESS的時(shí)候,表示你已經(jīng)成功了,在成功的路上,試驗(yàn)了很多次,記得看到一個(gè)簡(jiǎn)友說他試了40多次.從不知道Jenkins是啥,一步步的走來,一個(gè)個(gè)坑,一個(gè)個(gè)踩,成功了,卻覺得理所當(dāng)然.希望你可以成功.有問題和錯(cuò)誤歡迎留言!

參考文章,相信你看完一定會(huì)有收獲

從零開始寫個(gè)自動(dòng)打包IPA腳本

iOS持續(xù)集成:Jenkins+GitLab+蒲公英

Project昙读、Target召调、Workspace and Scheme

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市蛮浑,隨后出現(xiàn)的幾起案子某残,更是在濱河造成了極大的恐慌,老刑警劉巖陵吸,帶你破解...
    沈念sama閱讀 222,681評(píng)論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異介牙,居然都是意外死亡壮虫,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,205評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門环础,熙熙樓的掌柜王于貴愁眉苦臉地迎上來囚似,“玉大人,你說我怎么就攤上這事线得∪幕剑” “怎么了?”我有些...
    開封第一講書人閱讀 169,421評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵贯钩,是天一觀的道長(zhǎng)募狂。 經(jīng)常有香客問我,道長(zhǎng)角雷,這世上最難降的妖魔是什么祸穷? 我笑而不...
    開封第一講書人閱讀 60,114評(píng)論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮勺三,結(jié)果婚禮上雷滚,老公的妹妹穿的比我還像新娘。我一直安慰自己吗坚,他們只是感情好祈远,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,116評(píng)論 6 398
  • 文/花漫 我一把揭開白布呆万。 她就那樣靜靜地躺著,像睡著了一般车份。 火紅的嫁衣襯著肌膚如雪谋减。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,713評(píng)論 1 312
  • 那天躬充,我揣著相機(jī)與錄音逃顶,去河邊找鬼。 笑死充甚,一個(gè)胖子當(dāng)著我的面吹牛以政,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播伴找,決...
    沈念sama閱讀 41,170評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼盈蛮,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了技矮?” 一聲冷哼從身側(cè)響起抖誉,我...
    開封第一講書人閱讀 40,116評(píng)論 0 277
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎衰倦,沒想到半個(gè)月后袒炉,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,651評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡樊零,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,714評(píng)論 3 342
  • 正文 我和宋清朗相戀三年我磁,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片驻襟。...
    茶點(diǎn)故事閱讀 40,865評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡夺艰,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出沉衣,到底是詐尸還是另有隱情郁副,我是刑警寧澤,帶...
    沈念sama閱讀 36,527評(píng)論 5 351
  • 正文 年R本政府宣布豌习,位于F島的核電站存谎,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏肥隆。R本人自食惡果不足惜愕贡,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,211評(píng)論 3 336
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望巷屿。 院中可真熱鬧固以,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,699評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至篙螟,卻和暖如春菌湃,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背遍略。 一陣腳步聲響...
    開封第一講書人閱讀 33,814評(píng)論 1 274
  • 我被黑心中介騙來泰國(guó)打工惧所, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人绪杏。 一個(gè)月前我還...
    沈念sama閱讀 49,299評(píng)論 3 379
  • 正文 我出身青樓下愈,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親蕾久。 傳聞我的和親對(duì)象是個(gè)殘疾皇子势似,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,870評(píng)論 2 361

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