背景描述
本文不適合手把手教你集成 Jenkins 的童鞋....本文則是一片問題出現與解決的總結~!
首先,我要將一下為什么我們要用 Jenkins 這個平臺來構建自動打包平臺:有人會有疑問,使用腳本在電腦上打包, 效率也是非??斓?為啥還要用這個開源平臺呢? ? 我們的自動打包需求并不是為了方便開發人員, 而是為了減輕測試部門同事的工作量,去掉中間那么多的共同時間,讓他們可以在需要的時候去打包測試. 那問題就來了, 要知道iOS 的打包是需要創建證書的那臺特定機子去打, 而其他人即使拿到 P12 文件也無法打包成功(相同的腳本,直接運行會各種錯誤),而 jenkins 就完美得解決可這一問題.
網上也有很多 jenkins 的使用教程之類的東西, 但是,通過自己做過這一遍,深感那些資料有寫不能滿足我的需要, 很多資料都是交給你怎么成功得整合, 卻沒有說明當你在整合時會出現的問題, 或者是出現了怎么解決(特別是在 使用了gitLab的項目).為了給后來者以方便,特寫此文.
集成 Jenkins
我在這里不會詳細的介紹怎么安裝和搭建 jenkins 運行環境, 網上有很多, 我只是提想下打算在Mac 上構建Java 環境的開發者, jenkins 的運行不要構建 Java HOME , 直接安裝 Java_JDK就可以了,然后到官網下載頁面,選擇? Mac os X 版本 .在安裝時,一定要按默認的安裝,不要自定義安裝, 網上有的資料是自定義安裝,不去創建jenkins用戶,這個很坑人,千萬不要少裝了?。。?!
安裝完畢后, 確保你的shared文件下存在jenkins用戶。
當我們第一次進入jenkins 時會讓我們安裝,等待頁面下載完畢,然后注冊, 當然要是忘記了密碼.是沒有找回密碼這一按鈕的, 你需要去刪除在/Users/Shared/Jenkins/Home/config.xml 以下代碼
然后重新啟動jenkins? sudo service jenkins restart , 當然,重啟電腦也行..哈哈..
打包項目構建
進入 jenkins 頁面后, 新建一個項目, 如何新建項目,網上自己百度吧..記住一點,自己的項目名稱或運行腳本名不要出現空格, 因為空格會被轉譯.這回在你使用命令在終端中調試時出現很多不必要的麻煩...
在項目配置中的"源碼管理"中選擇 Subversion , Repository URL里填寫 SVN 地址, 直接拷貝項目 URL粘進去就可以, Credentials 中點擊添加, 選擇賬號 密碼連接類型, ID , 描述什么的可以不寫.添加賬號后回到前一頁面Credentials,選擇該賬號, 沒有連接上回報錯.
到這里如果你是使用腳本打包的,那構建過程中的難點就沒有了, 如果你是使用 Xcode 構建的話, 還是有一定難度在等你. 當然如果你的本地項目工程使用Workspace來管理的, 那么請按照網上主流的資料進行配置就可以了, 如果你的工程中沒有使用Workspace來管理,那么在Xcode Workspace File 輸入地址當然會在打包時報錯..這時候你會發現在頁面中還有幾個框, 其中一個是Xcode Project File,這樣你將你的項目運行文件. xcodeproj放進去,就可以了...
配置jenkins的關鍵
我們使用jenkins的目的是實現jenkins自動打包svn 或git 托管的最新代碼。而不是你電腦本地的工程。所以不管是腳本還是Xcode插件,build的工作區間必須是jenkins目錄下的workspace;使用腳本時, 第一次我們不知道我們的目標工程在哪里, 所以當你配置差不多了,可以選擇構建一次, 這樣jenkins下的workspace文件下就有了你的目標文件。jenkins 首先會自己會檢出一份代碼, 將腳本也放在該工程文件下, 如果你構建時報“沒有權限”的問題, 那就使用命令給jenkins文件全部權限(chmod -R 777 /文件路徑)。單單去改變腳本權限是沒有用的~!
要實現jenkins的自動打包,其實就是要jenkins用戶下可以正常打包,真機運行。因為你的目標工程是在shared目錄下的jenkins下, 所以,首先你需要保證在你自己用戶下可以打包,等。然后,切換用戶到jenkins下, 通過shared可以找到目標工程, 然后再這里面實現正常打包,運行等。。完成這兩部,你就已經離成功不遠了~!(在jenkins中如果出現問題, 請往下仔細閱讀)。
打包時的常見問題
項目配置全部都 OK 了, 這時候我們點擊"立即構建"按鈕, 第一次一般都會報錯,一下是集中常見報錯的現象及原因以及解決方法:
如果你是使用 Xcode 構建:
1. Jenkins Xcode 證書設置錯誤 :
Code Sign error: No matching codesigning identity found: No code signing identities
?或者
Check dependencies
Code Sign error: No codesigning identities found: No codesigning identities (i.e. certificate and private key pairs) that match the provisioning profile specified in your build settings (“qingyunDeveloper”) were found.
或者報什么 UUID(***************)不匹配
原因: Xcode 現在的證書選項選擇不正確, 或者是 jenkins 的Xcode 證書沒有在其證書文件中找到相應證書對應項.jenkins的打包是在jenkins用戶下進行的,所以,在本機用戶的證書環境要與jenkins用戶環境證書一致。
解決1: 叫你的老大給你把 P12文件傳給你,打開.選擇好證書類型, 然后再構建, 如果還是不行,找到你用戶下的Provisioning Profiles 文件。目錄為 /Users/xxx/Library/MobileDevice/Provisioning Profiles? xxx表示你自己的用戶名
把這里面所有的證書復制到/Users/Shared/Jenkins/Library/MobileDevice/Provisioning Profile? 這個文件。然后再構建..
2.構建時,輸出錯誤為權限問題..
原因:因為在安裝 jenkins 后, 會系統會自動創建一個 jenkins 的用戶, 你現在所使用的是自己的 MAC 用戶,所以操作 jenkins 會無權限,.
解決:你需要做的是找到報錯的地址文件, 單擊右鍵,顯示簡介中找到共享與權限, 全部給讀寫權限, 并且查看根目錄其他文件是否是全部讀寫權限...或者直接暴力(chmod -R 777 /路徑)
3.Xcode 編譯出錯 ,代碼不支持新的 SDK
原因:因為 jenkins 構建時,默認是 APPStore 上最新的版本, 有的工程里第三方文件編譯時,不支持最新 Xcode 版本, 所以需要更改 Xcode 的編譯 SDK.
解決:運行 xcodebuild -showsdks 命令在終端中查看當前版本, sudo xcode-select --switch /Applications/Xcode.app/Contents/Developer ?后面的地址是你需要的 Xcode 版本的地址,如你想更換為9.2的 SDK, 那么該地址則為 Xcode 7.2.1 的報內容. ?更改完后構建即可.
4.如果在jenkins用戶下,按第一條問題解決方法操作,還是無法運行,或者找不到想要的描述文件。一直報證書的錯。
原因:上次刪除jenkins時不規范, 文件有殘留,導致這次安裝有問題。
解決:按照網上刪除jenkins的方法去刪除(都是命令語言),然后再裝, 重新按照步驟來做。
5.兩個用戶下各自都能打包,運行。但是回到本機使用jenkins網頁上的構建按鈕構建,提示:
原因:提示的意思是jenkins用戶沒有解鎖用戶交互。但是,如果你去網上按照那些方法添加“登陸鑰匙串”的解鎖命令,還是無法完成。其實,這個問題的實質還是證書的問題,但這個問題不是描述文件的事,而是開發或者發布證書沒有添加的問題。
解決:進入jenkins用戶下, 如果你直接雙擊打開證書, 但是,系統會提示你 user interface is not allowed。 所以并不能這么直接添加, 而是要打開鑰匙串, 找到“system”---copy全部的證書-----“login”---粘貼 ?。
再去構建,OK 完美~!O(∩_∩)O哈哈~