前提
本項目在配置jenkins前已配置安裝fastlane并自動上傳蒲公英,關于fastlane的使用不在本文討論范圍之內。
安裝Jenkins
jenkins有幾種方式安裝迄靠,一種是去官網(wǎng)下載dmg安裝包(還可以下載.war文件,通過執(zhí)行命令java -jar jenkins.war
安裝)稚瘾,這也是我最先選擇的方式,然而此種方式安裝確有一些很明顯的坑
- 輸入初始密碼需要前往
/Users/Shared/Jenkins/Home/
這個目錄下姚炕,非Jenkins用戶需要給/secrets/
增加讀權限摊欠,然后找到initialAdminPassword
文件,打開復制出密碼柱宦,在初次登入http://localhost:8080時使用 - 上面的還只是小問題些椒,最大的問題來了。本人正確配置項目后掸刊,通過git拉取代碼時總是出現(xiàn)timeout超時問題免糕,查詢了一堆資料,比如增加超時時間忧侧,只拷貝最近一次的代碼
然而石窑,并沒有什么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頁面币喧,粘貼所獲的的初始密碼
插件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需要授權才能使用相關api冀续,access tokens可在 Settings->Developer settings->Personal access tokens里管理
配置郵件地址
這個警告??我是保留的琼讽,如果修改為本地127.0.0.1會提示反向代理設置有誤
由于本機沒有公網(wǎng)ip,所以導致git輪詢的方式會不可用洪唐,在此記錄一下
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/>
如果出現(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
構建后壓縮存檔
構建后打包并上傳到蒲公英
除了在fastlane安裝蒲公英插件的方式森枪,還可以在jenkins中選擇安裝Upload to pgyer
插件
構建后上傳fir.im
需要先安裝fir-plugin
插件
構建后添加郵件通知
點開高級設置
Advanced settings...
视搏,根據(jù)構建狀態(tài)發(fā)信執(zhí)行Job
點擊“立即構建”审孽,未加入 fastlane相關控制臺輸出如下:
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勾選??
別忘了將相關設置上傳打颤,以下是我參考[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)境石蔗,當然不支持brew
、rvm
畅形、gem
养距、pod
、bundle
日熬、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郵件通知模板