Jenkins實(shí)現(xiàn)iOS項(xiàng)目自動(dòng)化打包(含采坑記錄)

一、前言

這段時(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è)坑要提一下

  1. brew安裝jenkins的版本不是最新版本。這會(huì)導(dǎo)致有些必要的Jenkins插件不能安裝。
    解決辦法: 卸載重裝HomeBrew
  2. 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)

  1. 直接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ò)誤。
  2. 在構(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版本徹底移除了)
解決辦法:

  1. 找個(gè)舊版的Xcode里面copy到以下目錄
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/
  1. 執(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)期待。。。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容