前言
Jenkins就不過多介紹了陵究,本人實現(xiàn)Xcode9+Jenkins+蒲公英自動化打包踩過了N多個坑谍珊,也構(gòu)建了N多次才成功!!!!!
因此本文記錄一下, 防止以后在入坑??????
~~好了,不多贅述了,直接進入正題
Jenkins環(huán)境下載及其配置
Jenkins運行需要Java環(huán)境,Java環(huán)境下載
1. Jenkins下載
2. 安裝成功后婉陷,在瀏覽器中輸入localhost:8080打開jenkins
3. 進入對于路徑獲取密碼料按。secrets沒有讀取權(quán)限杰妓,需要開啟權(quán)限,進行獲取埋涧。
1:開啟管理權(quán)限
2:開啟對應(yīng)用戶讀與寫的權(quán)限
3:選擇【應(yīng)用到包含的項目...】
4:點擊確定
4. 使用推薦安裝板辽,進行插件安裝。
5. 如果進入的是離線模式棘催,可以使用手動安裝插件的方式劲弦。Jenkins插件地址。下載成功后醇坝,在【系統(tǒng)管理】-【管理插件】-【高級】進行上傳插件邑跪。
如果可選插件里獲取不到插件,可以嘗試將站點替換成http://mirror.xmission.com/jenkins/updates/current/update-center.json進行嘗試呼猪,如果還不可行画畅,只能進行自行下載,然后上傳的方式了宋距。
6. 在【系統(tǒng)管理】-【管理插件】-【可選插件】安裝所需插件"GitLab Plugin"轴踱,"Gitlab Hook Plugin","keychains and Provisioning Profiles Management"谚赎,"Git Parameter Plug-In"
7. 點擊新建項目淫僻,輸入項目名稱,選擇“構(gòu)建一個自由風(fēng)格的軟件項目”沸版,最后點擊確認(rèn)嘁傀。
8. 在General中,勾選【參數(shù)化構(gòu)建過程】-【添加參數(shù)】-【Git Parameter】视粮,這里是在獲取代碼的前一步细办,進行代碼分支選擇。
Name:branch //參數(shù)名稱
Description:分支選擇 //描述
Parameter Type:Branch or Tag
9. 為本機添加SSH keys蕾殴,并通過SHH keys進行連接遠程倉庫笑撞。為GitLab帳號添加SSH keys并連接GitLab
Repository URL :填寫遠程倉庫的SSH地址
Credentials :點擊右側(cè)Add,如下圖所示钓觉,填寫SSH信息茴肥,然后點擊保存。
(注:這里添加的SSH keys為私鑰荡灾,并且將私鑰內(nèi)容全部復(fù)制過來)
Branches to build :填寫第8步中的參數(shù)名稱瓤狐,我這里為branch
最后點擊add瞬铸。如果正常的配置正確的話,會出現(xiàn)紅色的警告础锐,就說明Jenkins還沒有連通GitLab或者SVN嗓节,那就請再檢查SSH Key是否配置正確。
10. 證書描述文件配置皆警。
在Xcode中不要選擇Automatically manage signing拦宣,需要手動配置描述文件,如下圖所示信姓。
注意:需要打包上傳到蒲公英鸵隧,需要打的是Adhoc的包,所有需要Adhoc的描述文件意推,這需要到蘋果開發(fā)者中心進行生成下載豆瘫。
這里只使用的Jenkins打包上傳蒲公英,如果需要Jenkins自動打包上傳AppStore菊值,還需要生成App Store的描述文件靡羡。我這里兩種Distribution都生成了,以免不時之需俊性。
11. 配置keychains and Provisioning Profiles Management略步。
保存當(dāng)前步驟,進入到Jenkins的系統(tǒng)管理定页,進入到keychains and Provisioning Profiles Management
進入到/Users/管理員用戶名/Library/keychains文件目錄下趟薄,將login.keychain文件拷貝到桌面,如果為macOS 10.13以上的系統(tǒng)典徊,只有l(wèi)ogin.keychain-db文件杭煎,需要將login.keychain-db文件拷貝到桌面,將login.keychain-db文件重命名為login.keychain文件卒落。點擊【選擇文件】羡铲,選擇桌面的login.keychain文件,點擊Upload儡毕,如下圖所示也切。
接著上傳描述文件。
Provisioning Profiles Directory Path
/Users/Shared/Jenkins/Library/MobileDevice/Provisioning Profiles // 如此填寫即可腰湾。
點擊Save進行保存雷恃。接下來回到項目的配置,在【構(gòu)建環(huán)境】中勾選Keychains and Code Signing Identities與Mobile Provisioning Profiles费坊,如圖所示倒槐。
如果紅框內(nèi)容沒有自動顯示,點擊【保存】附井,再重新進入到配置讨越,就會自動顯示了两残。
12.添加ExportOptions.plist問價。我們都知道把跨,Xcode9之后磕昼,打出來的包不光ipa文件,還順便生成配置文件节猿,log等。所有我們想要用Xcode9通過xcodebuild生成ipa包漫雕,ExportOptions.plist文件必不可少滨嘱,我將ExportOptions.plist放到了工程了同級目錄下。ExportOptions.plist文件浸间,我們可以通過Xcode打個ipa包出來太雨,直接用生成的ExportOptions.plist就可以。
將ExportOptions.plist文件放到項目的根目錄下魁蒜。
13.在【構(gòu)建】處囊扳,添加【增加構(gòu)建步驟】選擇【Execute shell】,然后進行編寫腳本兜看。
#!/bin/bash
#設(shè)置超時
export FASTLANE_XCODEBUILD_SETTINGS_TIMEOUT=300
#計時
SECONDS=0
#工程絕對路徑
project_path=$(cd `dirname $0`; pwd)
#工程名
project_name= XXX
#scheme名
scheme_name= XXX
#包類型
configuration="Adhoc"
#打包模式 Debug/Release
development_mode=Release
#build文件夾路徑
build_path=${project_path}/build
#plist文件所在路徑
exportOptionsPlistPath=${project_path}/ExportOptions.plist
#導(dǎo)出.ipa文件所在路徑
exportIpaPath=${project_path}/IPADir/${development_mode}
echo ''
echo '///-----------'
echo '/// 正在清理工程'
echo '///-----------'
xcodebuild clean -configuration ${development_mode} -quiet || exit
echo ''
echo ''
echo '///--------'
echo '/// 清理完成'
echo '///--------'
echo ''
echo ''
echo '///-----------'
echo '/// 正在編譯工程:'${development_mode}
echo '///-----------'
xcodebuild archive -workspace ${project_path}/${project_name}.xcworkspace -scheme ${scheme_name} -configuration ${development_mode} -archivePath ${build_path}/${project_name}.xcarchive -quiet || exit
echo ''
echo ''
echo '///--------'
echo '/// 編譯完成'
echo '///--------'
echo ''
echo ''
echo '///----------'
echo '/// 開始ipa打包'
echo '///----------'
xcodebuild -exportArchive -archivePath ${build_path}/${project_name}.xcarchive -exportPath ${exportIpaPath} -exportOptionsPlist ${exportOptionsPlistPath} -allowProvisioningUpdates
echo ''
if [ -e $exportIpaPath/$scheme_name.ipa ];
then
echo '///----------'
echo '/// ipa包已導(dǎo)出'
echo '///----------'
open $exportIpaPath
else
echo '///-------------'
echo '/// ipa包導(dǎo)出失敗 '
echo '///-------------'
fi
echo ''
echo '///------------'
echo '/// 打包ipa完成 '
echo '///-----------='
echo ''
echo ''
echo "++++++++++ipa文件所在路徑: ${exportIpaPath}"
echo ''
echo ''
echo "開始上傳到蒲公英"
#蒲公英apiKey
MY_PGY_API_K=XXX
#蒲公英uKey
MY_PGY_UK=XXX
curl -F "file=@${exportIpaPath}/${scheme_name}.ipa" -F "uKey=${MY_PGY_UK}" -F "_api_key=${MY_PGY_API_K}" https://qiniu-storage.pgyer.com/apiv1/app/upload
#輸出總用時
echo ''
echo "===Finished. Total time: ${SECONDS}s==="
這里給出了我現(xiàn)在使用的shell腳本锥咸,包含了【ipa包生成】【上傳蒲公英】。
其中的XXX為需要替換的地方细移。
蒲公英的ApiKey與UserKey在蒲公英的【賬戶設(shè)置】-【API信息即可查看】搏予。
這里建議將shell腳本放到工程的根目錄下,修改腳本直接提交代碼就好弧轧,就不需要重新配置Jenkins了雪侥。
14.接下來進行構(gòu)建項目。如圖所示精绎,構(gòu)建成功速缨。
15.新版本上傳成功,【郵件通知】【手機短信通知】【微信信息通知】代乃。這里使用的蒲公英的更新通知功能旬牲,前兩項通知需要收費的,只有5次免費的機會搁吓。所以我們使用了【微信消息通知】引谜。
常見問題
問題1:
No profiles for 'com.xxxxxxx.xxxxx' were found: Xcode couldn't find a
provisioning profile matching 'com.xxxxxxx.xxxxx'.
Code signing is required for product type 'Application' in SDK 'iOS 10.3'
將 /Users/管理員用戶名/Library 的 MobileDevice 文件夾拷貝到 /Users/Shared/Jenkins/Library 下面
問題2:
No iOS profile matching 'xxxxxxxxxxxxxxxxxxxDistribution' found: Xcode couldn't find a profile
matching 'xxxxxxxxxxxxxxxxxxxDistribution'. Install the profile (by dragging and dropping it onto
Xcode's dock item) or select a different one in the General tab of the target editor.
Code signing is required for product type 'Application' in SDK 'iOS 10.3'
1.用 Xcode 打開 iOS 項目,在 【TARGETS】 - 【General】 中不勾選Automatically manage signing
2.如圖配置開發(fā)證書:
3.配置完證書之后擎浴,需提交代碼到 Git 遠程倉庫员咽,確保 Jenkins 構(gòu)建時能獲取最新的證書配置
4.還要確保已經(jīng)將 /Users/管理員用戶名/Library 的 MobileDevice 文件夾拷貝到了 /Users/Shared/Jenkins/Library 下面
問題3:
報errSecInternalComponent錯誤, 如圖所示
這個問題困擾了我很長的時間,在網(wǎng)上搜索造成此問題的原因是
The error comes from a mismatch in the provisioning profile setup and the certificates and the bundle id. Make sure that your PP, bundle id, and certificates are setup correctly in the and assigned correctly in itunes connect and in app.
按照解決辦法贮预,重啟電腦贝室,但是我并沒有解決該問題契讲。
最終,我將Jenkins全部刪除滑频,重新配置了一遍捡偏,此問題解決了。
2018-6-26號更新:
重新搭建Jenkins又遇到了此問題, 經(jīng)過調(diào)研發(fā)現(xiàn),根本原因是Jenkins峡迷,ssh方式到slave機上银伟,默認(rèn)是沒有賬戶的,但是訪問鑰匙串要求必須有用戶身份绘搞,所以添加一步輸入密碼解鎖鑰匙串彤避,可以給Jenkins一個用戶身份。
build步驟前添加一步解鎖鑰匙串夯辖。
security unlock-keychain -p "管理員密碼" "login.keychain-db的路徑"
如圖所示:
最后, 問題解決~~~
~
~
~