最全Jenkins+SVN+iOS+cocoapods環境搭建及其錯誤彙總

前言


持續集成是敏捷開發中重要的一部分,爲保證新功能的開發,又保證舊功能的維護,從一個衝刺到下個衝刺。持續集成工具是咱們保證開發和維護並行的護航者,如今流行的集成工具備不少,例如:html

1.Jenkinsjava

2.Buildbotgit

3.Travis CIshell

通過對比,Jenkins工具搭建相對簡單(僅指安裝),打包速度也比較快,獲得不少朋友的青睞,因此本文是以描述Jenkins搭建環境爲主旨。(踩了好多坑啊哈哈哈)xcode

Jenkins 的 好處

在寫本文以前,我以爲有必要提一下Jenkins 對一個團隊的好處。瀏覽器

最簡單粗暴的好處就是下降 開發團隊與測試團隊的耦合,Jenkins也支持定時自動打包,上傳等,省去了「修改配置項--編譯---鏈接設備--運行打包--裝ipa--而後交給等待的測試人員」這些簡單繁瑣的步驟。也避免測試人員測錯包之類,把開發已經修改的bug打回來這種問題。服務器

注意:打包ipa包須要有xcode環境,因此要想在公司的服務器配置iOS打包環境,要求服務器必須是Mac OS系統,Linux和Windows只能靠邊了。我是在一臺Mac mini 下配的環境。oracle

步驟大體能夠分爲如下幾步:app

1.搭建Java環境iphone

2.搭建Jenkins環境

3.配置證書和描述文件、鑰匙串

4.配置項目

5.配置xcode 環境

1.配置java環境


瀏覽器打開 http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html   選擇Mac OS 的安裝包下載,JDK安裝都很簡單,安裝過程這裏就省略了。

 


JDK

2.搭建Jenkins環境


瀏覽器打開 Jenkins官網 點擊下載Jenkins,選擇Mac OS安裝包,我如今裝的是2.46.1


選擇jenkins安裝包

接下來就是傻瓜式的下一步安裝,這裏就不一一貼圖了。

安裝完成後瀏覽器通常會自動打開 http://localhost:8080,若是不自動打開能夠手動打開這個連接,而後會提下下列的錯誤信息

 


unlock Jenkins

顧名思義,咱們要去log路徑下取到password,輸入才能進入Jenkins。右鍵 Finder->前往文件夾->輸入/Users/Shared/Jenkins/Home 回車後應該看到下面


jenkins psd

看到secrets文件是有個減號的,右鍵secrets->顯示簡介->共享與權限->將everyone權限改爲 讀與寫。


secret權限

雙擊點開secrets以後應該以下所示:

 


initialAdminPassword

同理,由於咱們沒有initialAdminPassword的讀寫權限是沒法打開的,右鍵 initialAdminPassword->顯示簡介->everyone權限改爲讀與寫


initialAdminPassword權限

而後用文原本打開initialAdminPassword,把裏面那串數字複製,把這串數字填到Jenkins啓動的那個頁面,若是你不當心關了上面那個頁面,打開http://localhost:8080便可。


解鎖

而後continue,這時會看到如下頁面,選擇紅色框裏的 Install suggested plugins(Jenkins建議安裝的插件)


customize Jenkins

看到這個頁面以後,等待Jenkins把插件下載完

 


下載插件

這裏建立下Admin User,把這些項都填完以後點擊save and finish就OK了。注意要記得用戶名和密碼,之後你登陸要用到的,忘記密碼就麻煩了。

 


建立用戶名和密碼

 


ready

到這步已經說明Jenkins環境已經搭建好了。點擊start using jenkins


進入jenkins頁面

這時須要配置一下插件,系統管理->管理插件->可選插件

 


插件管理第一步

由於項目是配置svn爲管理器的,git管理代碼的能夠參照其餘同窗的教程自行配置。咱們先下載svn插件,在過濾輸入框中輸入svn,勾選 SVN Publisher plugin。點擊直接安裝。


插件管理-svn

同理,咱們要下載 xcode integration 和keychains and Provisioning Profiles Management 這兩個插件。


插件管理-xcode integration

 


插件管理- keychain and profiles

把這兩個搜索出來,勾選而後直接安裝。而後等待完成


等待插件安裝完成

安裝完成後咱們重啓下jenkins,從新加載下插件。能夠滑到最底下勾選重啓,或者也能夠在地址欄輸入http://localhost:8080/restart  


完成安裝插件重啓Jenkins

重啓以後應該要輸入用戶名和密碼,把剛剛註冊的用戶名密碼輸入進去。

還有一個重要的步驟,咱們先給Jenkins用戶管理員的權限,避免後續的訪問問題。

系統偏好設置->用戶與羣組->點開鎖,而後在Jenkins用戶下勾選「容許用戶管理這臺電腦」。

到這步最好給Jenkins用戶設置一個密碼,便於後期檢查是否Jenkins配置錯誤或者是檢查代碼錯誤。


Jenkins用戶權限問題

3.配置證書和描述文件、鑰匙串


點擊系統管理->keychain and provision Profiles Management

 


keychain and provision

在這以前,我準備了開發證書.p12 + 描述文件,生產證書.p12 + 描述文件,分別用來上線打包和測試打包。這步並不須要咱們上傳證書,而是上傳須要描述的文件和login.keychain。login.keychain有坑!有坑!有坑!!!!! 以前我是把login.keychian 複製到桌面而後上傳的,構建的時候老是報錯keychian 權限問題。而後我是按照如下方式來作的。


配置keychain 證書和描述文件

在此以前先普及一下,jenkins實際上是本身開了一個用戶,用於存儲一些配置文件和信息等。咱們能夠在finder裏面找到Jenkins用戶的文件夾,點擊前往/Users/Shared/Jenkins

jenkins目錄

1.Finder->前往文件夾->/Users/「你的mac用戶名」/library

2.找到keychains 這個文件夾,拷貝

3.用上面那種方法放到Jenkins->Library文件夾下


拷貝keychain文件

爲了不描述文件也出現相似的找不到的錯誤,咱們也把描述文件拷貝到Jenkins用戶->Library。

1.Finder->前往文件夾->/Users/「你的mac用戶名」/library(或者還有一個方法,打開xcode->preferences->找到你帳號下的描述文件)

2.找到keychains 這個文件夾,拷貝"MobileDevice"整個文件夾

3.用上面那種方法放到Jenkins->Library文件夾下。


拷貝mobileDevice文件

接下來就是上傳keychain和描述文件了。


上傳keychain和描述文件

這裏咱們選剛剛拷貝過去的Jenkins文件目錄下的keychain和描述文件。點擊選取文件->搜索login.keychain,這裏要注意下是否爲Jenkins目錄下的keychain。


上傳keychain

上傳完以後打開鑰匙串,找到我須要上傳的兩本證書的名字,由於我想上傳一個開發證書和一個生產證書,因此上傳兩個。把這兩個證書的名字複製下來


證書名字

而後點擊 Add Code Signing Identity,分別把這兩個名字粘貼過去。完成了以後大概以下:


keychain

接下來就是描述文件了。這裏要注意一點,在Provisioning Profiles填上/Users/Shared/Jenkins/Library/MobileDevice/Provisioning Profiles這個地址。而後按照上傳keychain的步驟,把Jenkins用戶目錄下的描述文件上傳上去就行啦


Provisioning Profile地址

完了以後是這樣的。


keychain描述文件成功圖

4.配置項目

keychain配置好以後,接下來就是新建一個工程了。輸入你的項目名稱(項目名稱會在Jenkins下生成一個文件夾)。構建一個自由風格的軟件項目,點擊ok


新建項目

1.General

新建完以後點選丟棄舊的構建,配置一下保持構建的天數和最大個數


配置舊的構建

2.源碼管理

而後配置源碼管理,這是Jenkins拉取代碼的路徑(儘可能精確到項目位置),若是Credentials沒有,則點擊右邊的add,填上本身的svn帳號和密碼。假如這欄沒有報紅,基本上地址什麼的都是正確的了。


配置svn

3.構建環境

接下來配置構建環境,這裏咱們勾選Keychains and Code Signing Identities,選擇login.keychain,而後選擇對應的證書名字。一樣勾選Mobile Provisioning Profiles,選擇對應的描述文件。


構建環境

4.構建

由於我項目用到cocoapods,因此要先在構建這裏選執行腳本,在裏面輸入

#bin/bsah - l

export LANG=en_US.UTF-8

export LANGUAGE=en_US.UTF-8

export LC_ALL=en_US.UTF-8

cd $WORKSPACE/你的項目名稱

/usr/local/bin/pod update --verbose --no-repo-update

注意:沒有#bin/bsah - l

export LANG=en_US.UTF-8

export LANGUAGE=en_US.UTF-8

export LC_ALL=en_US.UTF-8   /usr/local/bin/  這幾句可能會形成編譯器讀不懂pod語句。當你構建的時候提示pod語句出錯,百分之九十都是這個錯誤。


建立腳本

 


輸入

接下來添加xcode構建工具


添加xcode構建工具 (注意:Xcode9 不須要添加xcode構建工具,而直接添加另一個Execute shell,下面有解釋)

首先配置General,這裏又有一個坑!!!!輸出路徑必須是workspace路徑下的,而後會報權限不夠等之類的問題


xcode-general配置

以後是Code signing & OS X keychain options


Code signing & OS X keychain options

接下來是配置 Advanced Xcode build options。

tips:jenkins會在它的目錄Home->workspace下建一個文件夾,這個文件夾名字就是你的項目名字(好比你的項目名字叫JenkinsProj,那麼會存在Jenkins->Home->workspace->JenkinsProj這個文件夾)。${WORKSPACE}通常都會到Jenkins建立的文件夾下。

Build output diretory 仍是老實點寫在workspace下比較好,由於Jenkins建立的目錄我以爲足夠清晰了。以前我寫在另外一個用戶下就會報權限問題。


advance配置

通常這樣配置完就能夠成功打包了,在整個配置過程當中,都不能粗枝大葉或者自覺得是的隨意配置。可能文章還有寫的不夠的地方或者錯誤的地方,歡迎你們指正完善。也但願你們把遇到的問題多多分享一下~

 

注意:升級 Xcode 9 以後,編譯完成以後打包會一直報以下所示的錯誤:

error: exportArchive: "APPNAME.app" requires a provisioning profile with the Push Notifications feature.

Error Domain=IDEProvisioningErrorDomain Code=9 ""APPNAME.app" requires a provisioning profile with the Push Notifications feature." UserInfo={NSLocalizedDescription="APPNAME.app" requires a provisioning profile with the Push Notifications feature., NSLocalizedRecoverySuggestion=Add a profile to the "provisioningProfiles" dictionary in your Export Options property list.}

** EXPORT FAILED **

Failed to build /Users/Tolecen/.jenkins/workspace/APPNAME/build/APPNAME_release.ipa

Build step 'Xcode' marked build as failure

Finished: FAILURE

由於 Xcode 9 默認不容許訪問鑰匙串的內容,必需要設置 allowProvisioningUpdates 纔會容許,可是因爲 Xcode integration 插件封閉,並不能對其進行修改加上這個屬性,因此決定使用 Shell 腳本代替插件。

解決方案

將 Jenkins 項目裏的 Xcode  構建步驟去掉,使用下面所示的命令:

xcodebuild -archivePath "/Users/USERNAME/.jenkins/workspace/APPNAME/build/Debug-iphoneos/APPNAME.xcarchive" -project APPNAME.xcodeproj -sdk iphoneos -scheme "SCHEMENAME" -configuration "Debug" archive

xcodebuild -exportArchive -archivePath "/Users/USERNAME/.jenkins/workspace/APPNAME/build/Debug-iphoneos/BasketballLeague.xcarchive" -exportPath "/Users/USERNAME/.jenkins/workspace/APPNAME/build/APPNAME_debug" -exportOptionsPlist '/Users/USERNAME/.jenkins/workspace/APPNAME/build/ExportOptions.plist' -allowProvisioningUpdates

若是是 workspace 的項目,那就將上面第一段的命令中 -project APPNAME.xcodeproj 修改成 -workspace APPNAME.xcworkspace 便可。

再着重說明一下 ExportOptions.plist,這個文件以下所示:


 

裏面的有 Bundle Id, ProvisioningProfiles 和 teamID 的信息,對應填寫上便可,若是不肯定,那就先用 Xcode 9 手動打包你的項目,而後導出,導出的文件夾裏會有這個文件,直接複製到你持續集成須要的路徑中便可。

 

錯誤大全


1.鑰匙串的錯誤

相似下面的鑰匙串錯誤,我給你們個tips:

一、鑰匙串無非是兩個地方設置和用到,分別爲系統管理->Keychains and Provisioning Profiles Management 和 項目配置裏面->構建環境下的Keychains and Code Signing Identities 這兩個地方去找,看有沒有不匹配的地方,或者按照上面說到的相應步驟從新來。


鑰匙串錯誤

 

2.cocoapods錯誤

相似下面的錯誤,通常先要檢查項目配置裏面->構建->Execute shell 有沒有寫錯。

#bin/bsah - l

export LANG=en_US.UTF-8

export LANGUAGE=en_US.UTF-8

export LC_ALL=en_US.UTF-8

cd $WORKSPACE/你的項目文件

/usr/local/bin/pod update --verbose --no-repo-update

若是這樣寫還不行,mac註銷當前用戶,進入Jenkins用戶,看是否安裝了cocoapods,若是沒有安裝,須要安裝一下,而且版本要與當前用戶一致(Jenkins用戶的密碼能夠在系統偏好設置->用戶與羣組設置。)


cocoapods錯誤

3.Xcode終止打包

遇到Xcode終止打包這時進入Jenkins用戶,在Jenkins下編譯看有沒有問題。若是有問題,這時候就要檢查下你svn上的項目是否正確了。

4.scheme錯誤

打開Xcode->manageSchema,把share勾上

 


 
5.目前必須把xcode中的自動簽名去掉,改爲手動管理才能打包成功,若是有朋友能用自動簽名打包的麻煩告知下,謝謝!
相關文章
相關標籤/搜索