Xcode9+Jenkins+蒲公英自動化打包!

前言

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

image.png

3. 進入對于路徑獲取密碼料按。secrets沒有讀取權(quán)限杰妓,需要開啟權(quán)限,進行獲取埋涧。
image.png

1:開啟管理權(quán)限
2:開啟對應(yīng)用戶讀與寫的權(quán)限
3:選擇【應(yīng)用到包含的項目...】
4:點擊確定

4. 使用推薦安裝板辽,進行插件安裝。

image.png

5. 如果進入的是離線模式棘催,可以使用手動安裝插件的方式劲弦。Jenkins插件地址。下載成功后醇坝,在【系統(tǒng)管理】-【管理插件】-【高級】進行上傳插件邑跪。

image.png

如果可選插件里獲取不到插件,可以嘗試將站點替換成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)嘁傀。

image.png

8. 在General中,勾選【參數(shù)化構(gòu)建過程】-【添加參數(shù)】-【Git Parameter】视粮,這里是在獲取代碼的前一步细办,進行代碼分支選擇。
image.png

Name:branch //參數(shù)名稱
Description:分支選擇 //描述
Parameter Type:Branch or Tag

9. 為本機添加SSH keys蕾殴,并通過SHH keys進行連接遠程倉庫笑撞。為GitLab帳號添加SSH keys并連接GitLab

image.png

Repository URL    :填寫遠程倉庫的SSH地址
Credentials       :點擊右側(cè)Add,如下圖所示钓觉,填寫SSH信息茴肥,然后點擊保存。
                   (注:這里添加的SSH keys為私鑰荡灾,并且將私鑰內(nèi)容全部復(fù)制過來)
Branches to build :填寫第8步中的參數(shù)名稱瓤狐,我這里為branch
image.png

最后點擊add瞬铸。如果正常的配置正確的話,會出現(xiàn)紅色的警告础锐,就說明Jenkins還沒有連通GitLab或者SVN嗓节,那就請再檢查SSH Key是否配置正確。

10. 證書描述文件配置皆警。
在Xcode中不要選擇Automatically manage signing拦宣,需要手動配置描述文件,如下圖所示信姓。

image.png

image.png

注意:需要打包上傳到蒲公英鸵隧,需要打的是Adhoc的包,所有需要Adhoc的描述文件意推,這需要到蘋果開發(fā)者中心進行生成下載豆瘫。
這里只使用的Jenkins打包上傳蒲公英,如果需要Jenkins自動打包上傳AppStore菊值,還需要生成App Store的描述文件靡羡。我這里兩種Distribution都生成了,以免不時之需俊性。

image.png

11. 配置keychains and Provisioning Profiles Management略步。
保存當(dāng)前步驟,進入到Jenkins的系統(tǒng)管理定页,進入到keychains and Provisioning Profiles Management

image.png

進入到/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儡毕,如下圖所示也切。

image.png

接著上傳描述文件。


image.png

Provisioning Profiles Directory Path

/Users/Shared/Jenkins/Library/MobileDevice/Provisioning Profiles // 如此填寫即可腰湾。

點擊Save進行保存雷恃。接下來回到項目的配置,在【構(gòu)建環(huán)境】中勾選Keychains and Code Signing Identities與Mobile Provisioning Profiles费坊,如圖所示倒槐。


image.png

如果紅框內(nèi)容沒有自動顯示,點擊【保存】附井,再重新進入到配置讨越,就會自動顯示了两残。

12.添加ExportOptions.plist問價。我們都知道把跨,Xcode9之后磕昼,打出來的包不光ipa文件,還順便生成配置文件节猿,log等。所有我們想要用Xcode9通過xcodebuild生成ipa包漫雕,ExportOptions.plist文件必不可少滨嘱,我將ExportOptions.plist放到了工程了同級目錄下。ExportOptions.plist文件浸间,我們可以通過Xcode打個ipa包出來太雨,直接用生成的ExportOptions.plist就可以。
將ExportOptions.plist文件放到項目的根目錄下魁蒜。

image.png

image.png

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)建成功速缨。

image.png

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ā)證書:


1498160-f0488c72ec472bba.png

1498160-f3348400e102cb77.png

3.配置完證書之后擎浴,需提交代碼到 Git 遠程倉庫员咽,確保 Jenkins 構(gòu)建時能獲取最新的證書配置
4.還要確保已經(jīng)將 /Users/管理員用戶名/Library 的 MobileDevice 文件夾拷貝到了 /Users/Shared/Jenkins/Library 下面

問題3:
報errSecInternalComponent錯誤, 如圖所示

1511525251160_.pic_hd.jpg

這個問題困擾了我很長的時間,在網(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的路徑"

如圖所示:

image.png

最后, 問題解決~~~

~
~
~

下一文中琉预,會講述App配置多環(huán)境變量,結(jié)合Jenkins自動化打包蒿褂,測試妹子想打什么環(huán)境的包就打什么環(huán)境的包圆米。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市啄栓,隨后出現(xiàn)的幾起案子娄帖,更是在濱河造成了極大的恐慌,老刑警劉巖昙楚,帶你破解...
    沈念sama閱讀 218,858評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件块茁,死亡現(xiàn)場離奇詭異,居然都是意外死亡桂肌,警方通過查閱死者的電腦和手機数焊,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,372評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來崎场,“玉大人佩耳,你說我怎么就攤上這事√房纾” “怎么了干厚?”我有些...
    開封第一講書人閱讀 165,282評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長螃宙。 經(jīng)常有香客問我蛮瞄,道長,這世上最難降的妖魔是什么谆扎? 我笑而不...
    開封第一講書人閱讀 58,842評論 1 295
  • 正文 為了忘掉前任挂捅,我火速辦了婚禮,結(jié)果婚禮上堂湖,老公的妹妹穿的比我還像新娘闲先。我一直安慰自己状土,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,857評論 6 392
  • 文/花漫 我一把揭開白布伺糠。 她就那樣靜靜地躺著蒙谓,像睡著了一般。 火紅的嫁衣襯著肌膚如雪训桶。 梳的紋絲不亂的頭發(fā)上累驮,一...
    開封第一講書人閱讀 51,679評論 1 305
  • 那天,我揣著相機與錄音舵揭,去河邊找鬼谤专。 笑死,一個胖子當(dāng)著我的面吹牛琉朽,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播稚铣,決...
    沈念sama閱讀 40,406評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼箱叁,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了惕医?” 一聲冷哼從身側(cè)響起耕漱,我...
    開封第一講書人閱讀 39,311評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎抬伺,沒想到半個月后螟够,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,767評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡峡钓,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年妓笙,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片能岩。...
    茶點故事閱讀 40,090評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡寞宫,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出拉鹃,到底是詐尸還是另有隱情辈赋,我是刑警寧澤,帶...
    沈念sama閱讀 35,785評論 5 346
  • 正文 年R本政府宣布膏燕,位于F島的核電站钥屈,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏坝辫。R本人自食惡果不足惜篷就,卻給世界環(huán)境...
    茶點故事閱讀 41,420評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望近忙。 院中可真熱鬧腻脏,春花似錦鸦泳、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,988評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至鼎姐,卻和暖如春钾麸,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背炕桨。 一陣腳步聲響...
    開封第一講書人閱讀 33,101評論 1 271
  • 我被黑心中介騙來泰國打工饭尝, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人献宫。 一個月前我還...
    沈念sama閱讀 48,298評論 3 372
  • 正文 我出身青樓钥平,卻偏偏與公主長得像,于是被迫代替她去往敵國和親姊途。 傳聞我的和親對象是個殘疾皇子涉瘾,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,033評論 2 355

推薦閱讀更多精彩內(nèi)容