jenkins+fastlane+git+cocoapods實現(xiàn)iOS持續(xù)集成踩坑記錄

前提

本項目在配置jenkins前已配置安裝fastlane并自動上傳蒲公英,關于fastlane的使用不在本文討論范圍之內。

安裝Jenkins

jenkins有幾種方式安裝迄靠,一種是去官網(wǎng)下載dmg安裝包(還可以下載.war文件,通過執(zhí)行命令java -jar jenkins.war安裝)稚瘾,這也是我最先選擇的方式,然而此種方式安裝確有一些很明顯的坑

  1. 輸入初始密碼需要前往/Users/Shared/Jenkins/Home/這個目錄下姚炕,非Jenkins用戶需要給/secrets/增加讀權限摊欠,然后找到initialAdminPassword文件,打開復制出密碼柱宦,在初次登入http://localhost:8080時使用
  2. 上面的還只是小問題些椒,最大的問題來了。本人正確配置項目后掸刊,通過git拉取代碼時總是出現(xiàn)timeout超時問題免糕,查詢了一堆資料,比如增加超時時間忧侧,只拷貝最近一次的代碼
    git fetch --tags --progress time out.png

    然而石窑,并沒有什么luan用,通過40+次構建失敗蚓炬,讓我認識到此法不通松逊,于是卸載重裝
    安裝包卸載路徑: /Library/Application Support/Jenkins/Uninstall.command
    brew方式卸載方法:brew uninstall jenkins

推薦的安裝方式是通過homebrew安裝,此方案安裝后以上問題不再出現(xiàn)肯夏,其安裝目錄為/Users/當前用戶/.jenkins经宏,隱藏文件需使用命令command+shift+.顯示
安裝命令: brew install jenkins

你可能需要了解這些gem、brew驯击、rvm烁兰、bundle的相關介紹


如果出現(xiàn)以上問題,說明brew版本不匹配余耽,可以執(zhí)行brew --version命令會自動更新到最新版本

順利的執(zhí)行完brew install jenkins缚柏,結果發(fā)現(xiàn)安裝的是2.68版本苹熏,根據(jù)提示命令更新到新版2.101

啟動Jenkins

執(zhí)行命令jenkins碟贾,瀏覽器打開http://localhost:8080 web頁面币喧,粘貼所獲的的初始密碼

initialAdminPassword.png

插件plugin

我只安裝了社區(qū)推薦的插件(安裝時建議翻墻),可選插件Xcode integration
與其他文章不同的是袱耽,Keychains and Provisioning Profiles Management這個插件我并沒有選擇安裝杀餐,原因是這些東西我已經(jīng)通過fastlane在腳本配置里,無需再另行上傳證書及相關設置
如果插件安裝失敗朱巨,可前往http://localhost:8080/pluginManager/available更新插件

系統(tǒng)設置

GitHub設置

如果項目是GitHub私有項目史翘,或是使用github輪詢,需要添加GitHub Server及許可證


GitHub Server

github需要授權才能使用相關api冀续,access tokens可在 Settings->Developer settings->Personal access tokens里管理


Personal access tokens.png
配置郵件地址

配置系統(tǒng)管理員郵件地址

這個警告??我是保留的琼讽,如果修改為本地127.0.0.1會提示反向代理設置有誤
由于本機沒有公網(wǎng)ip,所以導致git輪詢的方式會不可用洪唐,在此記錄一下

Extended E-mail Notification
Default Content:
(本郵件是 Jenkins 服務端構建完畢后自動發(fā)送钻蹬,請勿回復)<br/><hr/>

項目名稱:$PROJECT_NAME<br/>
Git版本號:$GIT_REVISION<br/>
觸發(fā)原因:$CAUSE<br/>
構建編號:# $BUILD_NUMBER<br/>
構建狀態(tài):$BUILD_STATUS<br/>
構建日志地址:<a href="${BUILD_URL}console">${BUILD_URL}console</a><br/>
構建地址:<a href="$BUILD_URL">$BUILD_URL</a><br/>
本次構建變化:$CHANGES_SINCE_LAST_SUCCESS<br/>
send email success.png

如果出現(xiàn)Failed to send out email javax.mail.AuthenticationFailedException: 535 Error: authentication failed, system busy錯誤,在確保郵箱已開啟SMTP服務情況下凭需,請保證Extended E-mail Notification郵件通知兩者的配置是一致的问欠,并檢查密碼。
如果提示501錯誤粒蜈,這是因為你的系統(tǒng)管理員地址與授權的賬號地址不是同一個顺献,需要保持一致。

添加項目地址

私有項目如果報權限問題枯怖,最好在本機生成SSH Key注整,這時你需要去~/.ssh/id_rsa文件里拿取私鑰信息,然后加到Global Credentials中即可嫁怀。

構建Job

通過github構建項并添加源碼管理



當然你也可以選擇Build periodically或Poll SCM方式

  • Build periodically:周期構建设捐,它不關心源碼是否變化
  • Poll SCM:定時檢查源碼變更,如果有更新就checkout最新code下來塘淑,然后執(zhí)行構建動作
* * * * *
第一個*表示分鐘萝招,取值0~59
第二個*表示小時,取值0~23
第三個*表示一個月的第幾天存捺,取值1~31
第四個*表示第幾月槐沼,取值1~12
第五個*表示一周中的第幾天,取值0~7捌治,其中0和7代表的都是周日
fastlane腳本

fastlane項目地址:https://github.com/fastlane/fastlane
fastlane相關文檔:docs.fastlane.tools

你可以直接使用

IPANAME="jinkens-myapp"
fastlane gym --export_method ad-hoc --output_name ${IPANAME}

來指定打包方式(蒲公英文檔)岗钩,也可以手動配置,以下是我fastlane關于pgy這個action的代碼(我的fastlane已通過match自動配置證書肖油,關于這個命令的使用可以查看fastlane match命令)

desc "Submit a new Beta Build to Pgy"
lane :pgy do
  match(type: "adhoc", app_identifier: "com.xxxxxx.ios", readonly: true)
  gym(
    scheme: "xxx",
    silent: true,  # 是否隱藏打包時不需要的信息
    configuration: 'Debug', # 指定打包時的配置項兼吓,默認為Release 
    export_method: "ad-hoc", # 指定導出.ipa時使用的方法,可用選項:app-store, ad-hoc, package, enterprise, development, developer-id
    export_options: {
      provisioningProfiles: {
        "com.xxxxxx.ios" => "match AdHoc com.xxxxxx.ios"
      }
    }
  )
  pgyer(api_key: "xxxxxxxxxxxxxxxx", user_key: "xxxxxxxxxxxxxxxxxxx")
end
構建后壓縮存檔
Archive the artifacts
構建后打包并上傳到蒲公英

除了在fastlane安裝蒲公英插件的方式森枪,還可以在jenkins中選擇安裝Upload to pgyer插件


Upload to pgyer

構建后上傳fir.im

需要先安裝fir-plugin插件

Upload to fir.im

構建后添加郵件通知

Editable Email Notification

點開高級設置Advanced settings...视搏,根據(jù)構建狀態(tài)發(fā)信
Advanced settings

執(zhí)行Job

點擊“立即構建”审孽,未加入 fastlane相關控制臺輸出如下:


first_log.png

Share Scheme

以為這就完了嗎?我還真以為這樣就搞定了-_-
執(zhí)行fastlane pgy構建失敾肽取佑力!CI下如果使用了workspace,你需要顯式的指定一個scheme:

Couldn't find specified scheme 'xxx'.?
Multiple schemes found but you haven't specified one.?
Since this is a CI, please pass one using the `scheme` option?
Couldn't find any schemes in this project, make sure that the scheme is shared if you are using a workspace?
Open Xcode, click on `Manage Schemes` and check the `Shared` box for the schemes you want to use?
Afterwards make sure to commit the changes into version control?

以前在本地運行可沒這情況筋遭,趕緊按其解決辦法在Manage Schemes中將Shared勾選??

Manage Schemes.png

別忘了將相關設置上傳打颤,以下是我參考[iOS] gitignore 忽略上傳pods/cocoaPods 文件修改過的.gitignore文件內容

# Xcode
.DS_Store
*/build/*
*.pbxuser
!default.pbxuser
*.mode1v3
!default.mode1v3
*.mode2v3
!default.mode2v3
*.perspectivev3
!default.perspectivev3
xcuserdata
!xcshareddata
profile
*.moved-aside
DerivedData
.idea/
*.hmap
*.xccheckout
*.xcworkspace
*.xcuserstate
!default.xcworkspace

#CocoaPods
Pods
!Podfile
!Podfile.lock

#Fastlane
!fastlane
!Gemfile
!Gemfile.lock
*.ipa
*.app.dSYM.zip

最大的坑

以上所有講的都是在本地運行自動化構建,配置低的小伙伴不高興了漓滔,打包??炒雞卡编饺,于是將項目部署到服務器上了
然而問題來了,我在服務器上運行時發(fā)現(xiàn)構建無法成功响驴,提示pod: command not found反肋,于是google了一堆資料,多種方式都沒解決踏施,才想到是Linux服務器并沒有配置相關的環(huán)境石蔗,當然不支持brewrvm畅形、gem养距、podbundle日熬、fastlane這些命令啦棍厌,查詢stackoverflow告訴我


蛤?相關的命令行工具只能在Mac環(huán)境運行竖席?

所以你需要一臺Mac服務器耘纱!
故而我現(xiàn)在本地只能手動點構建或者是采用定時構建方式,在開機后自動啟用Jenkins
而服務器端雖然可以hook到git commit log毕荐,但是無法通過以上腳本運行束析,干脆就作為郵件發(fā)送器算了??

參考資料

手把手教你利用Jenkins持續(xù)集成iOS項目
利用 Jenkins 實現(xiàn) iOS 自動化構建踩坑記錄
Mac中jenkins的使用——自動構建
最全Jenkins+SVN+iOS+cocoapods環(huán)境搭建及其錯誤匯總
Jenkins的幾個問題
jenkins 郵件配置展示change信息
Jenkins進階系列之——02email-ext郵件通知模板

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市憎亚,隨后出現(xiàn)的幾起案子员寇,更是在濱河造成了極大的恐慌,老刑警劉巖第美,帶你破解...
    沈念sama閱讀 206,311評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蝶锋,死亡現(xiàn)場離奇詭異,居然都是意外死亡什往,警方通過查閱死者的電腦和手機扳缕,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人躯舔,你說我怎么就攤上這事贡必。” “怎么了庸毫?”我有些...
    開封第一講書人閱讀 152,671評論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長衫樊。 經(jīng)常有香客問我飒赃,道長,這世上最難降的妖魔是什么科侈? 我笑而不...
    開封第一講書人閱讀 55,252評論 1 279
  • 正文 為了忘掉前任载佳,我火速辦了婚禮,結果婚禮上臀栈,老公的妹妹穿的比我還像新娘蔫慧。我一直安慰自己,他們只是感情好权薯,可當我...
    茶點故事閱讀 64,253評論 5 371
  • 文/花漫 我一把揭開白布姑躲。 她就那樣靜靜地躺著,像睡著了一般盟蚣。 火紅的嫁衣襯著肌膚如雪黍析。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,031評論 1 285
  • 那天屎开,我揣著相機與錄音阐枣,去河邊找鬼。 笑死奄抽,一個胖子當著我的面吹牛蔼两,可吹牛的內容都是我干的。 我是一名探鬼主播逞度,決...
    沈念sama閱讀 38,340評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼额划,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了档泽?” 一聲冷哼從身側響起锁孟,我...
    開封第一講書人閱讀 36,973評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎茁瘦,沒想到半個月后品抽,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,466評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡甜熔,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 35,937評論 2 323
  • 正文 我和宋清朗相戀三年圆恤,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,039評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡盆昙,死狀恐怖羽历,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情淡喜,我是刑警寧澤秕磷,帶...
    沈念sama閱讀 33,701評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站炼团,受9級特大地震影響澎嚣,放射性物質發(fā)生泄漏。R本人自食惡果不足惜瘟芝,卻給世界環(huán)境...
    茶點故事閱讀 39,254評論 3 307
  • 文/蒙蒙 一易桃、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧锌俱,春花似錦晤郑、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至吭练,卻和暖如春匹舞,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背线脚。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工赐稽, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人浑侥。 一個月前我還...
    沈念sama閱讀 45,497評論 2 354
  • 正文 我出身青樓姊舵,卻偏偏與公主長得像,于是被迫代替她去往敵國和親寓落。 傳聞我的和親對象是個殘疾皇子括丁,可洞房花燭夜當晚...
    茶點故事閱讀 42,786評論 2 345