1. 程式人生 > >Mac下Jenkins+SVN(Git)+Xcode搭建持續構建環境

Mac下Jenkins+SVN(Git)+Xcode搭建持續構建環境

因為網上教程多是依靠Github,而且很多是在Jenkins中配置Xcode引數,相當的麻煩,我們是用Shell 指令碼,非常的easy。在這裡記錄下環境搭建的過程,希望能幫他人減少一點坑。

1 安裝Jenkins
Jenkins是基於Java開發的一種持續整合工具。所以呢,要使用Jenkins必須使用先安裝JDK。

1.1 JDK安裝
JDK 下載地址

這裡寫圖片描述

安裝JDK的過程略,別說你不會安裝(如有不會安裝的,自行百度)。

1.2 Jenkins安裝
Jenkins 下載地址

安裝過程如下:
這裡寫圖片描述

這裡寫圖片描述

這裡寫圖片描述

這裡寫圖片描述

這裡寫圖片描述

這裡寫圖片描述

也可以下載jenkins.war, 然後執行Java -jar jenkins.war,進行安裝。

安裝完成之後,Safari可能會自動開啟,如果沒有自動開啟,開啟瀏覽器,輸入http://localhost:8080

這裡寫圖片描述
這個時候可能會報一個錯誤。如果出現了上面的問題,原因可能是Java環境有問題,重新安裝JDK環境即可。

正常的話,應該會看到下面這個重設初始密碼的介面
這裡寫圖片描述

注意:
1、Jenkins 安裝成功後,會建立一個Jenkins使用者,而Jenkins的工作區間預設是在【/使用者/共享/Jenkins/Home/jobs】目錄下,可以用Finder–>前往,進入。
2、Jenkins目錄下的資料夾的讀寫許可權只對Jenkins使用者開放,所以後面apple證書等必須在Jenkins使用者下安裝,專案的ipa匯出也得在Jenkins使用者下操作。(或者用管理員許可權修改該目錄針對使用者的許可權)
3、Jenkins的使用是每一個使用者都可以使用,所以有可能導致構建版本的時候報錯,還是老老實實在Jenkins使用者下操作吧。

2.設定Jenkins使用者
2.1 進入 系統偏好設定->使用者與群組
2.2 點選左下角的解鎖,輸入當前使用者的密碼
2.3 此時Jenkins使用者還是一個空的無名使用者,可以在使用者列表中選擇Jenkins使用者,右擊並選擇“高階選項”,輸入全名並確定。
這裡寫圖片描述
2.4 點選“更改密碼”重設Jenkins使用者的密碼。為了後期方便,可勾選“執行使用者管理這臺電腦”,將Jenkins使用者設為管理員。
2.5 選擇使用者列表下方的登入選項,將自動登入使用者設為Jenkins。

3.初始化Jenkins
重啟以後,自動以Jenkins登入了。找到/Users/Shared/Jenkins/Home/ 這個目錄下,開啟initialAdminPassword檔案,複製出密碼,就可以填到網頁上去重置密碼了。如下圖
這裡寫圖片描述

這裡寫圖片描述

這裡寫圖片描述

這裡寫圖片描述

這裡寫圖片描述

一路安裝過來,輸入使用者名稱,密碼,郵件這些,就算安裝完成了。

4.安裝外掛
正常情況下,常用的外掛都已經安裝了,如果有外掛安裝失敗或者需要特殊的外掛,可以自行安裝。
這裡寫圖片描述

這裡寫圖片描述

這裡寫圖片描述

這裡寫圖片描述

這裡寫圖片描述

5.Xcode以及開發證書設定
因為要使用Xcode命令,所以必須保證Xcode command Line已安裝。

5.1 設定apple development 證書
在原來Xcode開發所在使用者下,匯出釋出證書,然後拷貝到Jenkins使用者環境下,雙擊安裝到Mac 的鑰匙串中。
這裡寫圖片描述
這裡寫圖片描述

注意:
因為使用者訪問鑰匙串中的證書需要許可權,而用jenkins構建時,不管是用Xcode外掛配置還是shell 指令碼,都不能輸入使用者密碼,所以必須設定證書的【訪問控制】為允許所有應用程式訪問此專案。

5.2 安裝mobileprovision描述檔案
同樣需要在Jenkins使用者下,安裝好打包需要的手機描述檔案。

6 配置構建專案
下面講解構建專案的配置,可以使用本地的專案,也可以使用SVN上的專案(只需要填入svn上工程地址即可),然後輸入shell 指令碼就可以開始構建了。

6.1 使用本地專案構建
步驟如下:
這裡寫圖片描述

點選OK,在【/使用者/共享/Jenkins/Home/jobs】目錄下會生成HelloJenkins的目錄。
這裡寫圖片描述

這裡寫圖片描述
其他的設定項,均不用設定,只需要設定下指令碼即可,指令碼詳細的內容如下:

# 工程名
APP_NAME="HelloJenkins"
# 證書
CODE_SIGN_DISTRIBUTION="iPhone Distribution: XXXXXXXXXXXX"
# info.plist路徑
project_infoplist_path="./${APP_NAME}/Info.plist"

#取版本號
bundleShortVersion=$(/usr/libexec/PlistBuddy -c "print CFBundleShortVersionString" "${project_infoplist_path}")

#取build值
bundleVersion=$(/usr/libexec/PlistBuddy -c "print CFBundleVersion" "${project_infoplist_path}")

DATE="$(date +%Y%m%d)"
IPANAME="${APP_NAME}_V${bundleShortVersion}_${DATE}.ipa"

echo "=================clean================="
xcodebuild -target "${APP_NAME}"  -configuration 'Release' clean

echo "+++++++++++++++++build+++++++++++++++++"
xcodebuild -target "${APP_NAME}" -sdk iphoneos -configuration 'Release' CODE_SIGN_IDENTITY="${CODE_SIGN_DISTRIBUTION}" SYMROOT='$(PWD)'

xcrun -sdk iphoneos PackageApplication "./Release-iphoneos/${APP_NAME}.app" -o ~/"${IPANAME}"

注意1:【-o ~/$IPANAME】表示匯出的ipa檔案在當前使用者的目錄下,即【/使用者/共享/Jenkins/】下。
其中CODE_SIGN_IDENTITY=”iPhone Distribution:
xxxxxxxxxx”是你打包使用的證書在鑰匙串中的常用名稱。
匯出的ipa,叫【HelloJenkins_V1.2_20160118.ipa】。

注意2:如果如上圖【配置專案第二步】那樣,在xcodeproj相同目錄下,新建一個sh指令碼檔案,用【sh
xxx.sh】命令的話,見6.3介紹。 如果你的專案中用到了cocoapods,那指令碼有幾個引數需要調整一下,詳情見下文。

注意3(2016.02.17更新):CODE_SIGN_IDENTITY
這個屬性可以不設定,直接設定profile就可以了,編譯時會自動去匹配對應的CODE_SIGN_IDENTITY,需要注意的是設定profile時,設定的是其UUID值。例如【PROVISIONING_PROFILE=’f035763e-e847-4db8-ac10-0004809fdc90’】

點選儲存,然後點選左側選單,立即構建,即可開始構建。
這裡寫圖片描述

6.2 使用svn地址構建
第一步,新建專案,與上面的一樣。
第二步,不用將工程拷貝到jobs目錄下了,直接在配置裡原始碼管理那一欄設定svn地址
SVN配置.png

第三步,設定shell 指令碼,與上面的一樣。
第四步,立即構建即可。

6.3 如何使用【sh jenkins.sh】
將打包指令碼寫在jenkins.sh檔案中,並將此檔案放在project根目錄,Jenkins中按下圖修改。
這裡寫圖片描述

6.4 使用cocoapods的專案指令碼如何改
使用cocoapods後,因為啟動專案的工程檔案已經由【xxx.xcodeproj】變為【xxx.xcworkspace】,所以在build時,需要新增【-workspace】和【-scheme】,同時去掉【-target】,如果不修改這些引數,構建會報錯也會提示設定這些項。

# 工程名
APP_NAME="HelloJenkins"
# 證書
CODE_SIGN_DISTRIBUTION="iPhone Distribution: SunEee Weilian Technology Development Co., Ltd."
# info.plist路徑
project_infoplist_path="./${APP_NAME}/Info.plist"

#取版本號
bundleShortVersion=$(/usr/libexec/PlistBuddy -c "print CFBundleShortVersionString" "${project_infoplist_path}")

#取build值
bundleVersion=$(/usr/libexec/PlistBuddy -c "print CFBundleVersion" "${project_infoplist_path}")

DATE="$(date +%Y%m%d)"
IPANAME="${APP_NAME}_V${bundleShortVersion}_${DATE}.ipa"

#要上傳的ipa檔案路徑
IPA_PATH="$HOME/${IPANAME}"
echo ${IPA_PATH}
echo "${IPA_PATH}">> text.txt

echo "=================clean================="
xcodebuild -workspace "${APP_NAME}.xcworkspace" -scheme "${APP_NAME}"  -configuration 'Release' clean

echo "+++++++++++++++++build+++++++++++++++++"
xcodebuild -workspace "${APP_NAME}.xcworkspace" -scheme "${APP_NAME}" -sdk iphoneos -configuration 'Release' CODE_SIGN_IDENTITY="${CODE_SIGN_DISTRIBUTION}" SYMROOT='$(PWD)'

xcrun -sdk iphoneos PackageApplication "./Release-iphoneos/${APP_NAME}.app" -o ~/"${IPANAME}"

6.5 新增構建後自動上傳蒲公英的指令碼
這裡寫圖片描述

這裡寫圖片描述

注意:最新的版本中,構建後操作步驟裡已經沒有“Execute shell”這一項了

這裡寫圖片描述

upload.sh指令碼與上面jenkins.sh指令碼在同一目錄。
【upload.sh】內容如下:

#蒲公英上的User Key
uKey="9743f8cbe9ebef9863912a9d52ac19ce"
#蒲公英上的API Key
apiKey="0419615fa1ebbe8179ee9978abc3d753"
#要上傳的ipa檔案路徑
IPA_PATH=$(cat text.txt)

rm -rf text.txt

#執行上傳至蒲公英的命令
echo "++++++++++++++upload+++++++++++++"
curl -F "[email protected]${IPA_PATH}" -F "uKey=${uKey}" -F "_api_key=${apiKey}" http://www.pgyer.com/apiv1/app/upload

注意:指令碼中的uKey和apiKey,是自己的賬戶對應的userKey和apiKey。

上傳成功後,會返回相應的json資料。失敗提示,可以參考蒲公英官網說明。
這裡寫圖片描述

6.6 沒有Scheme,導致無法打包
有時候會遇到專案程式碼拉下來後,執行打包指令碼會卡在xcodebuild命令下,通過xcodebuild -list命令檢視:如圖顯示no schems.
這裡寫圖片描述

原因是本機生成的scheme,在另一臺Mac下不可用。又由於我們一般上傳SVN或git的時候會把xcuserdata檔案刪除,這樣就找不到scheme了,而用Xcode開啟一次工程之後就可以成功執行了,也就是生成了xcuserdata檔案。
具體解決看圖:將圖上按鈕全部勾選,然後xcworkspace中會生成xcshareddata檔案,好,我們需要的正是該檔案,注意將該檔案附帶工程中上傳至SVN或git,那樣在其他電腦上都可執行成功了!
這裡寫圖片描述

注意:其實不需要將所有Scheme都共享,只需共享打包指令碼會用到的Scheme即可。

6.7 命令列呼叫code sign時報錯:User interaction is not allowed
雖然5.1設定了證書所有應用可用,但是還是可能會遇到User interaction is not allowed,這是因為Jenkins使用的是一個獨立的使用者環境。解決方法是在你的打包指令碼的簽名前加上

security unlock-keychain  -p "你的使用者密碼" ~/Library/Keychains/login.keychain

構建成功之後,這句就可以刪掉了,只需執行一次。
如果還是出錯,可以使用
security show-keychain-info ~/Library/Keychains/login.keychain
檢視一下具體情況,有可能提示
Keychain "/Users/Shared/Jenkins/Library/Keychains/login.keychain" lock-on-sleep timeout=300s
即只有5分鐘有效。可以將時間設定長一點來解決
security set-keychain-settings -t 3600 -l ~/Library/Keychains/login.keychain

6.8 Python 字元編碼問題
如果使用到了Python指令碼,可能會遇到“UnicodeEncodeError: ‘ascii’ codec can’t encode characters ”的錯誤,可以在Python檔案的開頭加上

import sys 
reload(sys) 
sys.setdefaultencoding('utf-8') 

相關推薦

MacJenkins+SVN(Git)+Xcode搭建持續構建環境

因為網上教程多是依靠Github,而且很多是在Jenkins中配置Xcode引數,相當的麻煩,我們是用Shell 指令碼,非常的easy。在這裡記錄下環境搭建的過程,希望能幫他人減少一點坑。 1 安裝Jenkins Jenkins是基於Java開發的一種持續

linux伺服器中Jenkins整合git、Gradle持續構建Springboot專案

Jenkins是用java編寫的開源持續整合工具,目前被國內外各公司廣泛使用。本章教大家如何在linux伺服器中使用Jenkins自動釋出一個可作為linux服務釋出的Springboot專案。 自動構建需要經過如下步驟:從git倉庫下載程式碼、使用Gradle進行構建、使用SSH推送到另

mac用mamp和phpstorm搭建php開發環境

1.下載安裝mamp: https://pan.baidu.com/s/1i5oeu0l 密碼:h4ui 下載安裝phpWebstorm,http://www.jetbrains.com/phpstorm/ phpWebstorm註冊碼: 43B4A73YYJ-eyJsaW

Mac搭建 Jenkins+Github+蒲公英/fir.im 持續整合環境(iOS自動打包)

看了幾篇關於使用jenkins持續整合的部落格,記錄一下自己搭建的過程,順便做一些更新 或者使用命令列安裝 //安裝jenkins $ brew install jenkins //啟動jenkins $ jenkins //解除安裝

windows 搭建持續整合環境jenkins+git

知識準備:參考上一篇部落格的資料調查 http://blog.csdn.net/aaashen/article/details/46550121 1 下載安裝: 從jenkins 官網http://jenkins-ci.org/ 上下載windows 下的zip檔案。可以

Docker+Jenkins+Maven+SVN搭建持續整合環境

Docker+Jenkins+Maven+SVN搭建持續整合環境 環境拓撲圖(實驗專案使用PHP環境) 釋出流程圖 環境說明 系統:Centos 7.4 x64 Docker版本:18.09.0 Maven版本:3.6 Tomcat版本:8 JDK版本:1.8

Jenkins+Maven+SVN快速搭建持續整合環境

Jenkins是一個可擴充套件的持續整合引擎,Jenkins非常易於安裝和配置,簡單易用,下面看看我們是如何幾分鐘就快速搭建一個持續整合環境吧。 假設我們目前已經有2個maven專案:entities(Java類庫),web(Web應用,依賴entities)。 一、安裝Jenkins 把Je

LinuxSVN服務器搭建

括號 reat image tab 細節 inpu 犯錯 res min 鑒於在搭建時,參考網上很多資料,網上資料在有用的同時,也坑了很多人 本文的目的,也就是想讓後繼之人在搭建svn服務器時不再犯錯,不再被網上漫天的坑爹作品所坑害,故此總結 /******開始******

mac常用svn命令

存在 data- svn命令 mit ssa 也會 提交 resolve 兩個 1 svn checkout path(path是服務器上的目錄) 2 例如:svn checkout svn://192.168.1.1/pro/domain 3 簡寫:svn co

Mac使用svn命令

name update nbsp imp AS 項目 方法 upd 下使用 Mac系統自帶svn命令,能夠很方便的同步更新代碼,使用方法:1.導入項目svn import /Users/username/Desktop/Project1 svn://192.168.1.12

linux服務器中Jenkins集成git、Gradle持續構建Springboot項目

完成 var 方式 ecb posit table 構建 bin 路徑 Jenkins是用java編寫的開源持續集成工具,目前被國內外各公司廣泛使用。本章教大家如何在linux服務器中使用Jenkins自動發布一個可作為linux服務發布的Springboot項目。 自

mac出現SVN Working copy is too old (format 10, created by Subversion 1.6)的解決辦法

由於專案需求,專案中匯入了一個圖片瀏覽器的三方庫,出現了svn目錄不顯示問題 一 svn工作區報錯 每天上班第一件事就是開啟svn,然後update,但是卻出現如圖所示介面   二 問題追究 出現問題,而且是自己第一次遇到的問題,就得學會查詢資料解決,

搭建持續整合環境之——jenkins部署、安裝、配置

一、部署準備 1.遠端伺服器一臺:要求已安裝linux作業系統、tomcat、jdk; 2.從網上下載的jenkins.war包,推薦下載地址:http://Jenkins-ci.org/,或http://mirrors.jenkins.io/war-stable/ 二

Jenkins+maven+git的可持續整合實踐

概述 相關資料 實踐操作 說明:JDK、SSHD已經預設安裝了,這裡就不復述了。 安裝Tomcat 安裝maven 到maven官網下載maven最新的安裝包apache-maven-3.0.4-bin.tar.gz

Mac安裝svn並且檢出專案

brew 的官方網站: http://brew.sh/   在官方網站對brew的用法進行了詳細的描述 1.安裝方法:  在Mac中開啟Termal:  輸入命令:  ruby -e "$(curl -fsSL https://raw.githubusercontent

Mac svn di 更換為 vim diff

習慣了windows下的beyondCompare,同時mac下也沒有svn的客戶端,程式碼比較有點麻煩。找到一種方便的程式碼比較方法,使svn di 有 vim diff的效果。 1,編寫指令碼diffwrap.sh,放在自己的目錄下並給執行許可權,如 /Users/he

Maceclipse的git外掛安裝、配置和使用

1. eclipse的git外掛安裝與配置 1.1 git外掛安裝 點選help——Install new software 2.在彈出框裡面,點選add 如下圖: 如下圖: 點選OK,如果沒反應,請點選Add前面小三角,找到剛建立的以git為名字的

mac使用svn通過終端回退版本到某個版本號

要回退/回滾版本,有很多版本,這裡先介紹用update操作的方法。 首先通過“ls”操作可以檢視當前目錄的檔案。 通過“cd 檔名”操作可以進入到某個資料夾,資料夾輸入一部分後,如果是唯一的,則可以按Tab鍵來補全資料夾名。 進入到使用svn進行版本管理的工程資料夾後。 使

Mac利用Hexo+GitHub輕鬆搭建自己的部落格

今年4月份就在mac下利用hexo搭建了一個部落格,因換了一臺電腦,專案丟失,需重新安裝。 整理一下安裝流程: 1.hexo是基於nodejs的,需安裝nodejs,安裝nodejs最好選擇homebrew 2.首先檢視電腦是否安裝ruby,因為homebrew安裝依賴ru

基於Jenkins快速搭建持續整合環境

看了園友張善友的博文,嘗試成功.便有此作.原網址:http://www.cnblogs.com/shanyou/p/3750714.html   天下事有難易乎?為之,則難者亦易矣;不為,則易者亦難矣. 首先要學會使用MSBuild構建指令碼 附