Jenkins自動(dòng)化打包

一、安裝Jekins

  1. Download Jenkins
  2. 訪問http://localhost:8080/,打開initialAdminPassword文件。獲取權(quán)限,可以手動(dòng)更改訪問權(quán)限(文件-顯示簡介-訪問控制)或者執(zhí)行命令sudo cat 路徑,復(fù)制出密碼。注冊賬號(hào)。
  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下,否則會(huì)出現(xiàn)找不到描述文件的錯(cuò)誤。
  2. 打開鑰匙串程序,找到相對(duì)應(yīng)的證書,選擇“允許所有的應(yīng)用程序訪問此項(xiàng)目”,并存儲(chǔ)修改。
  3. 將/Users/管理員用戶名/Library/Keychains/下的login.keychain及l(fā)ogin.keychain-db這兩個(gè)文件拷貝到/Users/Shared/Jenkins/Library/Keychains文件夾下面
    注意:Mac OS 10.12以下的沒有l(wèi)ogin.keychain-db這個(gè)文件,只需要拷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:有時(shí)候會(huì)出現(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自動(dòng)化編譯打包提交

如果不設(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"

#取版本號(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)"

#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"命令過時(shí)。

四、上傳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ā)者賬號(hào)@163.com -p '密碼' -t ios --output-format xml

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

Xcode一鍵發(fā)布到AppStore

五、常見錯(cuò)誤

iOS 通過Jenkins 自動(dòng)構(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命令時(shí),出現(xiàn)pod command not found錯(cuò)誤。

解決方法,終端輸入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)類似這樣未知錯(cuò)誤,具體原因不知道,我重新設(shè)置下 系統(tǒng)管理的PATH就好了

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

相關(guān)閱讀更多精彩內(nèi)容

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