我個(gè)人當(dāng)電腦環(huán)境:
macOS Sierra 10.12
Xcode Version 8.1
java version "1.8.0_111"
1.安裝Jenkins
安裝Jenkins 有兩種方式,一種是下載pkg安裝包,一種是下載.war安裝包進(jìn)行安裝哭廉。當(dāng)然整以,無(wú)論選哪種方式都需要去官網(wǎng) 下載康愤。
安裝步驟請(qǐng)參考以下文章:
手把手教你利用Jenkins持續(xù)集成iOS項(xiàng)目 (通過(guò)pkg安裝)
一步一步構(gòu)建iOS持續(xù)集成:Jenkins+GitLab+蒲公英+FTP (通過(guò)war安裝)
安裝成功后在瀏覽器中輸入 http://localhost:8080 看下是能在瀏覽器中打開(kāi)秩仆,如果能直接打開(kāi)操漠,恭喜你安裝成功啦业汰!
如果 http://localhost:8080 打開(kāi)是 404 的話(我就是)片任,一般情況下是JDK版本不支持,需要下載 最新的java運(yùn)行環(huán)境,下載并安裝好JDK后刷新 http://localhost:8080 頁(yè)面就可以了蔬胯。
安裝JDK
安裝成功后重新打開(kāi) http://localhost:8080 的頁(yè)面一般長(zhǎng)這樣:
這個(gè)時(shí)候需要我們需要去到 /Users/Shared/Jenkins/Home/secrets 目錄下,打開(kāi) initialAdminPassword 文件氛濒,把密碼復(fù)制出來(lái)填到網(wǎng)頁(yè)上去重置密碼产场。
如果提示權(quán)限不夠舞竿,需要修改相應(yīng)的文件權(quán)限:
密碼輸進(jìn)去后就是初始化京景。最后輸入初始管理員的用戶(hù)名密碼等個(gè)人信息保存完成。
進(jìn)去之后頁(yè)面是這樣的
總結(jié):
- 安裝后無(wú)法打開(kāi)localhost 頁(yè)面一般情況下是JDK版本不支持骗奖,需要更新JDK确徙。
- 無(wú)法打開(kāi)文件時(shí)需要修改文件權(quán)限醒串。
- 安裝Jenkins 成功后,會(huì)在/Users/Shared/ 目錄下創(chuàng)建一個(gè) Jenkins 用戶(hù)鄙皇,其中Jenkins中所有相關(guān)文件都存放在該目錄 ** /Users/Shared/Jenkins ** 下芜赌。
初始狀態(tài)下該目錄結(jié)構(gòu)如下:
- Jenkins
- Home
- temp
2.在Jenkins中配置Xcode工程
先別點(diǎn)“創(chuàng)建一個(gè)新任務(wù)”,在這之前我們需要下載構(gòu)建iOS項(xiàng)目的插件:
進(jìn)去以后選擇‘系統(tǒng)管理’ -- ‘管理插件’
搜索Xcode伴逸,下載安裝Xcode integration插件
安裝完成以后我們?cè)诨氐绞醉?yè)點(diǎn)擊“創(chuàng)建一個(gè)新任務(wù)”,輸入項(xiàng)目名稱(chēng)缠沈,選擇“構(gòu)建一個(gè)自由風(fēng)格的軟件項(xiàng)目”
構(gòu)建項(xiàng)目完成后進(jìn)入項(xiàng)目配置頁(yè)面:
可以看到配置步驟主要有:
- General
- 源碼管理
- 構(gòu)建觸發(fā)器
- 構(gòu)建環(huán)境
- 構(gòu)建
- 構(gòu)建后操作
General
- 設(shè)置項(xiàng)目名稱(chēng)
- 如果是GitHub 上的項(xiàng)目,可以直接勾選 GitHub project错蝴,并輸入github上項(xiàng)目的地址
- 丟棄舊的構(gòu)建
- ...
等等其他設(shè)置洲愤,目前我的設(shè)置如下:
源碼管理
可以選擇None、git顷锰、svn 三種托管方式
我這里用的github上的項(xiàng)目
構(gòu)建觸發(fā)器
暫時(shí)不管
構(gòu)建環(huán)境
暫時(shí)不填
構(gòu)建(重要)
選擇構(gòu)建步驟-->Xcode (如果沒(méi)裝Xcode插件這里就沒(méi)法選)
一. General build settings
- Target 填項(xiàng)目Target,我這是:JenkinsDemo
- 展開(kāi)Settings官紫,勾選上 Clean before build? 和** Allow failing build results?**
- Configuration 中根據(jù)情況填 Debug 或 Release
- 勾選上 *Pack application and build .ipa? (是否打包成ipa)
- .ipa filename pattern:表示打包的ipa命名前綴躺率,例如根據(jù)版本號(hào)命名、根據(jù)日期命名
- Output directory: 打包后的ipa存放目錄万矾,我這填的是 ${HOME}/build/ 表示:“/Users/Shared/Jenkins/Home/build”路徑,其中${HOME} 代表 Jenkins用戶(hù)下的Home目錄(/Users/Shared/Jenkins/Home)
- Manifest Plist URL:暫時(shí)不知道做什么的
二. Code signing & OS X keychain options
和簽名相關(guān)的一些設(shè)置
由于Jenkins下沒(méi)有打包需要用到的證書(shū)和描述文件慎框,因此良狈,需要把證書(shū)拷貝的Jenkins環(huán)境下,有兩種方法:
一種是安裝 Keychains and Provisioning Profiles Management 插件進(jìn)行證書(shū)的管理
另一種是直接把當(dāng)前用戶(hù)的證書(shū)( 載在 /Users/xxx/Library/MobileDevice/Provisioning Profiles 目錄下)
拖到Jenkins根目錄(/Users/Shared/Jenkins/Library)下的MobileDevice/Provisioning Profile目錄中
即:把 /Users/xxx/Library/MobileDevice (xxx表示你自己的用戶(hù)名)目錄拷貝到 /Users/Shared/Jenkins/Library 下
勾選 Unlock Keychain?: Keychain path是固定填寫(xiě)${HOME}/Library/Keychains/login.keychain
Keychain password指的是你的授權(quán)密碼笨枯,不是證書(shū)密碼薪丁。
注意:${HOME}目錄指的是Jenkins的根目錄,也就是/Users/Shared/Jenkins馅精,如果你的jenkins是新裝的严嗜,你會(huì)發(fā)現(xiàn)Library目錄中壓根就沒(méi)有Keychains目錄。你需要去/Users/xxx/Library目錄下把Keychains目錄復(fù)制過(guò)來(lái)洲敢。
復(fù)制過(guò)來(lái)后:/Users/Shared/Jenkins/Library 目錄下就有 Keychains 和 MobileDevice 兩個(gè)目錄了
三. Advanced Xcode build options
- Xcode Schema File:填工程的Schema
- SDK: 選擇編譯使用的SDK漫玄,不填則是默認(rèn)值
- SYMROOT: 編譯時(shí)SYMROOT文件目錄,我這里填的是 ${HOME}/buildSymroot/
- Custom xcodebuild arguments:編譯時(shí)傳入的參數(shù)
- Xcode Workspace File: 如果項(xiàng)目使用的是xcworkspace的話這里就需要填對(duì)應(yīng)的工程名压彭,不需要加 ".xcworkspace" 后綴
- Xcode Project Directory:可不填
- Xcode Project File : 可不填
- Build output directory:編譯時(shí)生成的文件存放目錄睦优,這里我填的是 ${HOME}/build/
注意:
如果項(xiàng)目中使用了cocoapods進(jìn)行依賴(lài)管理,在構(gòu)建時(shí)會(huì)報(bào)錯(cuò):
Xcodebuild fails in jenkins with cocoapods
ld: warning: directory not found for option '-L/Users/Shared/Jenkins/build/Release-iphoneos/Masonry'
ld: library not found for -lMasonry
clang: error: linker command failed with exit code 1 (use -v to see invocation)
需要在 Product -> Scheme -> Manage Schemes 中勾選上所依賴(lài)的Pods
構(gòu)建后步驟
在項(xiàng)目構(gòu)建完成后可以選擇發(fā)送郵件或其他方式進(jìn)行提醒
開(kāi)始構(gòu)建項(xiàng)目
選中JenkinsDemo壮不,點(diǎn)擊立即構(gòu)建汗盘,下放BuildHistory中會(huì)顯示構(gòu)建歷史記錄,點(diǎn)擊當(dāng)前構(gòu)建询一,進(jìn)入構(gòu)建詳情頁(yè):
可以通過(guò)Console Output 查看該次構(gòu)建的詳細(xì)日志隐孽,如果構(gòu)建失敗可以根據(jù)這里輸出的日志查找錯(cuò)誤原因:
我一般是直接拉到日志底部查看日志結(jié)果癌椿,失敗信息直接在底部可以看到。
這里是我遇到的幾個(gè)失敗日志:
- 提示沒(méi)有匹配的證書(shū)菱阵,我的解決辦法是:?jiǎn)⒂肵code8的Automatically manage signing踢俄,然后把當(dāng)前用戶(hù)的證書(shū)( 在 /Users/xxx/Library/MobileDevice/Provisioning Profiles 目錄下)
拖到Jenkins根目錄(/Users/Shared/Jenkins/Library)下的MobileDevice/Provisioning Profile目錄中
=== BUILD TARGET JenkinsDemo OF PROJECT JenkinsDemo WITH CONFIGURATION Release ===
Check dependencies
No profile matching 'xxxx' found: Xcode couldn't find a profile matching 'xxxxx'. Install the profile (by dragging and dropping it onto Xcode's dock item) or select a different one in the General tab of the target editor.
Code signing is required for product type 'Application' in SDK 'iOS 10.1'
** BUILD FAILED **
2.日志一直停留在 “There are no schemes ” 不走
[JenkinsDemo] $ /usr/bin/xcodebuild -list -workspace JenkinsDemo.xcworkspace
There are no schemes in workspace "JenkinsDemo".
解決辦法是上面提到的,在ManageScheme 中勾選所用到的Schemes
3.提示沒(méi)有證書(shū)
=== BUILD TARGET JenkinsDemo OF PROJECT JenkinsDemo WITH CONFIGURATION Release ===
Check dependencies
Provisioning profile "iOS Team Provisioning Profile: TY.JenkinsDemo" doesn't include signing certificate "iPhone Developer: 451174332@qq.com (Y5P57G478W)".
Code signing is required for product type 'Application' in SDK 'iOS 10.1'
** BUILD FAILED **
The following build commands failed:
Check dependencies
(1 failure)
Cleaning up previously generated .ipa files
Cleaning up previously generated .dSYM.zip files
Packaging IPA
Finished: SUCCESS
需要把 “/Users/dengliwen/Library/Keychains” 文件拷貝到 “/Users/Shared/Jenkins/Library/Keychains” 中
4.其他錯(cuò)誤送粱,忘了是處理什么的了
待續(xù)褪贵。。抗俄。
參考鏈接:
使用 Jenkins 實(shí)現(xiàn)持續(xù)集成 (iOS)
http://www.cnblogs.com/qingjoin/p/3929493.html
http://www.cocoachina.com/ios/20160804/17281.html
http://www.360doc.com/content/14/0508/19/10058718_375884734.shtml
http://www.cnblogs.com/qingjoin/p/3929493.html