一、前言
這段時(shí)間一直在參與開發(fā)前端項(xiàng)目。與iOS工作流程不同的是,前端給QA提測(cè)前,只需將feature分支代碼合到一個(gè)指定的分支。然后QA人員會(huì)通過Jenkins工具進(jìn)行項(xiàng)目的構(gòu)建部署。之前在探索iOS的自動(dòng)化打包時(shí),就聽過Jenkins的大名,但是一直沒去了解。這次借此機(jī)會(huì)由最擅長(zhǎng)的iOS項(xiàng)目為切入點(diǎn),開始對(duì)Jenkins的探索。
二、安裝Jenkins
**Jenkins**依賴了Java環(huán)境,所以在安裝Jenkins前,要確保系統(tǒng)要安裝了Java
- 安裝Java
終端輸入命令,若不識(shí)別。說明沒有安裝Java JDK
java --version
若沒有安裝或版本過低,可通過以下鏈接下載。注意要根據(jù)自己電腦的系統(tǒng)選擇對(duì)應(yīng)的版本
Java JDK下載
- 安裝Jenkins
brew install jenkins
這里有兩個(gè)坑要提一下
- brew安裝jenkins的版本不是最新版本。這會(huì)導(dǎo)致有些必要的Jenkins插件不能安裝。
解決辦法: 卸載重裝HomeBrew- brew命令后總是卡在updating處
解決辦法: 不要關(guān)閉當(dāng)前終端窗口,新開一個(gè)窗口。并再次輸入brew命令
- 開啟Jenkins服務(wù)
brew services start jenkins
第一次服務(wù)開啟成功后,在瀏覽器中輸入http://localhost:8080,會(huì)出現(xiàn)一個(gè)讓你輸入Jenkins初始密碼的頁面
- 獲取Jenkins初始密碼
defaults write com.apple.finder AppleShowAllFiles YES
vi /Users/jackey/.jenkins/secrets/initialAdminPassword
將獲取到的初始密碼輸入后,重啟Jenkins
brew services restart jenkins
重新輸入http://localhost:8080,會(huì)進(jìn)入配置界面。點(diǎn)擊安裝建議的插件,耐心等待插件安裝過程(時(shí)間較長(zhǎng))
若過程中有插件安裝失敗,可查看失敗日志。我當(dāng)初遇到的問題就是Jenkins版本過低,所以有些插件不能安裝。原因是brew版本過低導(dǎo)致
- 創(chuàng)建管理員賬戶
插件安裝成功后,進(jìn)入如下界面
創(chuàng)建管理員用戶
按要求將所有項(xiàng)目填寫成功后,點(diǎn)擊保存就可以正常使用Jenkins了 - 通過url來關(guān)閉/重啟Jenkins
http://localhost:8080/restart
http://localhost:8080/exit
三、Jenkins中配置iOS項(xiàng)目
-
新建Item,創(chuàng)建一個(gè)任務(wù)。輸入任務(wù)名后,選擇第一項(xiàng):Freestyle project
創(chuàng)建任務(wù) -
配置General項(xiàng)
General配置項(xiàng) -
源碼管理項(xiàng)
源碼管理 -
CocoaPods/Carthage依賴配置項(xiàng)
選擇構(gòu)建->增加構(gòu)建配置->Execute Shell。將拉取Pod/Carthage的命令填進(jìn)去
依賴配置項(xiàng)
這里有兩個(gè)注意點(diǎn)
- 直接
pod install --verbose --no-repo-update會(huì)報(bào)錯(cuò),pod: command not found
解決方法: export 語句將控制臺(tái)語言環(huán)境設(shè)置為 UTF-8 格式,避免出現(xiàn) Podfile 文件打開錯(cuò)誤。- 在構(gòu)建中添加 pod install 腳本要用左邊的bar托到構(gòu)建項(xiàng)的第一位
-
Xcode-General build settings配置
General build settings -
Xcode-Code signing配置
Code signing -
Xcode-OS X keychain options配置
OS X keychain options -
Xcode-Advanced Xcode build options配置
Advanced Xcode build options - 添加打包并上傳蒲公英腳本
增加構(gòu)建步驟-Execute Shell。輸入以下腳本
# 工程名
APP_NAME="XLLJenkinsDemo"
# 證書,如果自動(dòng)選擇證書,設(shè)為“iPhone Developer”即可
CODE_SIGN_DEVELOPER="iPhone Developer"
# info.plist路徑
project_infoplist_path="./${APP_NAME}/Info.plist"
#取版本號(hào)
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
#集成有Cocopods的用法
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_DEVELOPER}" SYMROOT='$(PWD)'
xcrun -sdk iphoneos PackageApplication "./Release-iphoneos/${APP_NAME}.app" -o ~/"${IPANAME}"
#上傳到蒲公英
#蒲公英上的user Key
uKey="..."
#蒲公英上的API Key
apiKey="..."
#蒲公英版本更新描述,這里取git最后一條提交記錄作為描述
MSG=`git log -1 --pretty=%B`
#要上傳的ipa文件路徑
echo $IPA_PATH
#執(zhí)行上傳至蒲公英的命令
echo "++++++++++++++upload+++++++++++++"
curl -F "file=@${IPA_PATH}" -F "uKey=${uKey}" -F "_api_key=${apiKey}" -F "buildUpdateDescription=${MSG}" http://www.pgyer.com/apiv2/app/upload
四、項(xiàng)目構(gòu)建
-
點(diǎn)擊Build Now,可在Build History中看到構(gòu)建進(jìn)度。我們可以點(diǎn)擊進(jìn)度條進(jìn)入構(gòu)建實(shí)時(shí)詳情
構(gòu)建項(xiàng)目.png -
在詳情中,點(diǎn)擊控制臺(tái)輸出,可以查看構(gòu)建日志
image.png -
在日志最后前幾行發(fā)現(xiàn)Build Success,說明項(xiàng)目構(gòu)建成功。
項(xiàng)目構(gòu)建成功 -
在日志最后發(fā)現(xiàn)如下信息,說明上傳蒲公英成功
成功上傳蒲公英日志信息
這里構(gòu)建時(shí),一開始不出意外必然會(huì)出現(xiàn)各種各樣導(dǎo)致構(gòu)建失敗的錯(cuò)誤。根據(jù)日志報(bào)錯(cuò)信息的提示對(duì)癥去解決問題即可。
- 不要擔(dān)心日志密密麻麻的信息,一般全局搜索error或者僅僅查看最后十幾二十行的日志,就可以讀到關(guān)鍵信息。
一般是項(xiàng)目配置或者簽名文件和配置證書的問題
這里我只將自己遇到的一個(gè)特殊的報(bào)錯(cuò)總結(jié)出來
運(yùn)行xcrun腳本后報(bào)錯(cuò):xcrun: error: unable to find utility "PackageApplication", not a developer tool or in PATH
可以看出在執(zhí)行最后的腳本配置出現(xiàn)報(bào)錯(cuò),最后在網(wǎng)上找到了原因和解決辦法
原因:新版的Xcode少了這個(gè)PackageApplication(轉(zhuǎn)注:PackageApplication在前幾個(gè)版本已被標(biāo)識(shí)為廢棄,在8.3版本徹底移除了)
解決辦法:
- 找個(gè)舊版的Xcode里面copy到以下目錄
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/
- 執(zhí)行以下兩個(gè)命令
sudo xcode-select -switch /Applications/Xcode.app/Contents/Developer/ chmod +x > /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/PackageApplication附上PackageApplication下載地址:
https://pan.baidu.com/s/1jHJF2Lo
來源:http://www.itdecent.cn/p/c83483289970
五、其他注意點(diǎn)
項(xiàng)目中如果有使用Pod、Carthage對(duì)三方庫進(jìn)行管理依賴,一定要確保安裝了Carthage、Pod。并且執(zhí)行了pod setup,否則構(gòu)建也會(huì)失敗。
Jenkins的工作區(qū)路徑為/Users/xxx/.jenkins/workspace/,小伙伴們可以定期去進(jìn)行清理或根據(jù)工作區(qū)內(nèi)工程的情況定位問題。
目前iOS項(xiàng)目使用的是gitlab自身的runner進(jìn)行自動(dòng)化打包。后面打算將項(xiàng)目也使用Jenkins配置起來,這樣iOS項(xiàng)目也可以像前端項(xiàng)目一樣交給QA人員統(tǒng)一去構(gòu)建處理打包。
接下來再研究一波前端Jenkins配置流程及原理,敬請(qǐng)期待。。。












