Jenkins自動化打包

一馒稍、安裝Jekins

  1. Download Jenkins
  2. 訪問http://localhost:8080/,打開initialAdminPassword文件约素。獲取權(quán)限,可以手動更改訪問權(quán)限(文件-顯示簡介-訪問控制)或者執(zhí)行命令sudo cat 路徑,復(fù)制出密碼。注冊賬號芳撒。
  3. 安裝插件:系統(tǒng)管理->管理插件-可選插件:Xcode integration,Credentials Plugin,
    Keychains and Provisioning Profiles Management,
    Post-Build Script Plug-in

二、Jekins配置

1、文件拷貝

  1. 將/Users/管理員用戶名/Library的MobileDevice文件夾拷貝到/Users/Shared/Jenkins/Library下笔刹,否則會出現(xiàn)找不到描述文件的錯誤芥备。
  2. 打開鑰匙串程序,找到相對應(yīng)的證書舌菜,選擇“允許所有的應(yīng)用程序訪問此項(xiàng)目”萌壳,并存儲修改。
  3. 將/Users/管理員用戶名/Library/Keychains/下的login.keychain及l(fā)ogin.keychain-db這兩個文件拷貝到/Users/Shared/Jenkins/Library/Keychains文件夾下面
    注意:Mac OS 10.12以下的沒有l(wèi)ogin.keychain-db這個文件酷师,只需要拷login.keychain文件讶凉。

2、Keychains and Provisioning Profiles 配置

證書配置

]

1山孔、Keychain和ProvisioningProfiles文件是隱藏文件,所以需要拷出來荷憋。
Keychain文件路徑:/Users/管理員用戶名/Library/Keychains/login.keychain台颠,
ProvisioningProfiles文件路徑:/Users/管理員用戶名/Library/MobileDevice/Provisioning Profiles

2、Keychain和ProvisioningProfiles文件選好后勒庄,都需要upload下串前。

三、創(chuàng)建項(xiàng)目

1实蔽、Jenkins+ Xcode + 蒲公英

項(xiàng)目配置
ps1.更新pod的命令
#!/bin/bash -l
export LANG=en_US.UTF-8
export LANGUAGE=en_US.UTF-8
export LC_ALL=en_US.UTF-8
cd /Users/Shared/Jenkins/Home/workspace/Test 
pod install --verbose --no-repo-update

ps2.最后上傳蒲公英的命令
#蒲公英上的User Key
uKey="User Key"
#蒲公英上的API Key
apiKey="API Key"

#要上傳的ipa文件路徑
now=$(date +"%Y.%m.%d")
IPA_PATH="$WORKSPACE/IPA/Test_${now}.ipa"

#執(zhí)行上傳至蒲公英的命令
echo "++++++++++++++upload+++++++++++++"
curl -F "file=@${IPA_PATH}" -F "uKey=${uKey}" -F "_api_key=${apiKey}" http://www.pgyer.com/apiv1/app/upload

ps:有時候會出現(xiàn)Jenkins下的文件夾無法操作的情況荡碾,導(dǎo)致打包失敗,遇到這種情況可以更改下Jenkins下的操作權(quán)限

1. sudo chmod -R 777 /Users/Shared/Jenkins ...
2. 輸入密碼局装。

2坛吁、Jenkins + xcodebuild命令 + 蒲公英

詳解Shell腳本實(shí)現(xiàn)iOS自動化編譯打包提交

如果不設(shè)置證書,默認(rèn)是選擇項(xiàng)目設(shè)置的證書打包

項(xiàng)目配置
ps1.上傳命令
#"++++++++++++++更新Pod+++++++++++++"
#!/bin/bash -l
export LANG=en_US.UTF-8
export LANGUAGE=en_US.UTF-8
export LC_ALL=en_US.UTF-8
cd /Users/Shared/Jenkins/Home/workspace/TestPack
pod install --verbose --no-repo-update

#"++++++++++++++打包iPA+++++++++++++"
# 工程名
APP_NAME="Test"

# 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)"

#ipa名稱
IPA_NAME="${APP_NAME}_Debug_V${bundleShortVersion}_${DATE}"

#導(dǎo)出ipa路徑
Export_PATH="${WORKSPACE}/Debug-iphoneos"

#Xcode8.3之后腳本打包需要添加配置的plist文件
ExporEt_Options_Plist="${WORKSPACE}/AdHocExportOptions.plist"
echo ${IPA_PATH}
echo "${IPA_PATH}">> ipaPath.txt
#打包生成iPa
xcodebuild -workspace "${APP_NAME}.xcworkspace" -scheme "${APP_NAME}" -configuration 'Release' clean
xcodebuild -workspace "${APP_NAME}.xcworkspace" -scheme "${APP_NAME}" -archivePath "build/${IPA_NAME}.xcarchive" archive
#不設(shè)置證書和描述文件铐尚,默認(rèn)使用項(xiàng)目中選擇好的
#xcodebuild -workspace "${APP_NAME}.xcworkspace" -scheme "${APP_NAME}" -archivePath "build/${IPA_NAME}.xcarchive" -configuration "$configuration"  CODE_SIGN_IDENTITY="$codeSignIdentity" PROVISIONING_PROFILE="$provisioningProfile" >> $log_path

xcodebuild  -exportArchive -archivePath "build/${IPA_NAME}.xcarchive" -exportPath "${Export_PATH}/${IPA_NAME}" -exportOptionsPlist "${ExporEt_Options_Plist}" 

#"++++++++++++++上傳蒲公英的命令+++++++++++++"
#蒲公英上的User Key
uKey="74f2001d31a2b3538e437f44705f5d7d"
#蒲公英上的API Key
apiKey="082d13c3cad994244c2ff9d468972dd8"

#要上傳的ipa文件路徑
Upload_PATH="${Export_PATH}/${IPA_NAME}/${APP_NAME}.ipa"
#執(zhí)行上傳至蒲公英的命令
echo "++++++++++++++upload+++++++++++++"
curl -F "file=@${Upload_PATH}" -F "uKey=${uKey}" -F "_api_key=${apiKey}" http://www.pgyer.com/apiv1/app/upload

PS:xcodebuild: error: invalid option '-exportFormat'

更新到Xcode 8.3的坑

xcode8.3之后添加 exportOptionsPlistcurl拨脉,以前xcrun -sdk iphoneos PackageApplication -v "/XXX/XXX.app" -o "/XXX/XXX"命令過時。

四宣增、上傳APPStore和Automator

1玫膀、上傳APPStore

用altool上傳至APPStore

將上傳蒲公英的命令換成上傳APPStore的命令

//驗(yàn)證ipa
/Applications/Xcode.app/Contents/Applications/Application\ Loader.app/Contents/Frameworks/ITunesSoftwareService.framework/Versions/A/Support/altool  --validate-app -f ${IPA_PATH} -u fangzhoujiaoyukeji@163.com -p 'FangZhou#123' -t ios --output-format xml
//上傳itunsConnect
/Applications/Xcode.app/Contents/Applications/Application\ Loader.app/Contents/Frameworks/ITunesSoftwareService.framework/Versions/A/Support/altool --upload-app -f ${IPA_PATH} -u 開發(fā)者賬號@163.com -p '密碼' -t ios --output-format xml

2、使用Automator創(chuàng)建插件

Xcode一鍵發(fā)布到AppStore

五爹脾、常見錯誤

iOS 通過Jenkins 自動構(gòu)建ipa

Xcode8.2 Jenkins 集成遇到的問題

1帖旨、文件拷貝失敗

Failed to copy /Users/Shared/Jenkins/Home/kpp_upload/xxx.mobileprovision to /Users/caizhuoyue/Library/MobileDevice/Provisioning Profiles/xxx.mobileprovision

解決方法:開放Library(/Users/管理員用戶名/Library)文件夾寫入權(quán)限

2、找不到描述文件

No profile matching '證書' found:  Xcode couldn't find a profile matching '證書'. 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.0'

解決方法:將/Users/管理員用戶名/Library下的MobileDevice文件夾拷貝到/Users/Shared/Jenkins/Library下面

3灵妨、schemes為空

Jenkins xcodebuild There are no schemes in workspace

Manage Schemes解阅,設(shè)置schemes共享

4、使用pod命令時闷串,出現(xiàn)pod command not found錯誤瓮钥。

解決方法,終端輸入echo $PATH,在Jenkins菜單中點(diǎn)擊"系統(tǒng)管理"->"系統(tǒng)設(shè)置"->"全局屬性"碉熄,填入相應(yīng)鍵(PATH)值(終端輸出的內(nèi)容)桨武。

5、**/Frameworks/AFNetworking.framework: unknown error -1=ffffffffffffffff

出現(xiàn)類似這樣未知錯誤锈津,具體原因不知道呀酸,我重新設(shè)置下 系統(tǒng)管理的PATH就好了

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市琼梆,隨后出現(xiàn)的幾起案子性誉,更是在濱河造成了極大的恐慌,老刑警劉巖茎杂,帶你破解...
    沈念sama閱讀 206,378評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件错览,死亡現(xiàn)場離奇詭異,居然都是意外死亡煌往,警方通過查閱死者的電腦和手機(jī)倾哺,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,356評論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來刽脖,“玉大人羞海,你說我怎么就攤上這事∏埽” “怎么了却邓?”我有些...
    開封第一講書人閱讀 152,702評論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長院水。 經(jīng)常有香客問我腊徙,道長,這世上最難降的妖魔是什么衙耕? 我笑而不...
    開封第一講書人閱讀 55,259評論 1 279
  • 正文 為了忘掉前任昧穿,我火速辦了婚禮,結(jié)果婚禮上橙喘,老公的妹妹穿的比我還像新娘时鸵。我一直安慰自己,他們只是感情好厅瞎,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,263評論 5 371
  • 文/花漫 我一把揭開白布饰潜。 她就那樣靜靜地躺著,像睡著了一般和簸。 火紅的嫁衣襯著肌膚如雪彭雾。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,036評論 1 285
  • 那天锁保,我揣著相機(jī)與錄音薯酝,去河邊找鬼半沽。 笑死,一個胖子當(dāng)著我的面吹牛吴菠,可吹牛的內(nèi)容都是我干的者填。 我是一名探鬼主播,決...
    沈念sama閱讀 38,349評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼做葵,長吁一口氣:“原來是場噩夢啊……” “哼占哟!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起酿矢,我...
    開封第一講書人閱讀 36,979評論 0 259
  • 序言:老撾萬榮一對情侶失蹤榨乎,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后瘫筐,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蜜暑,經(jīng)...
    沈念sama閱讀 43,469評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,938評論 2 323
  • 正文 我和宋清朗相戀三年严肪,在試婚紗的時候發(fā)現(xiàn)自己被綠了史煎。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,059評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡驳糯,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出氢橙,到底是詐尸還是另有隱情酝枢,我是刑警寧澤,帶...
    沈念sama閱讀 33,703評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響翼岁,放射性物質(zhì)發(fā)生泄漏乡数。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,257評論 3 307
  • 文/蒙蒙 一寇窑、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦古胆、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,262評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至夭谤,卻和暖如春棺牧,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背朗儒。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工颊乘, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留参淹,地道東北人。 一個月前我還...
    沈念sama閱讀 45,501評論 2 354
  • 正文 我出身青樓乏悄,卻偏偏與公主長得像浙值,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子纲爸,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,792評論 2 345

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