- 前序步驟:
一她奥、《MAC Jenkins安裝》
實驗步驟
1.安裝Xcode(不做贅述)
2.Jenkins安裝插件: Xcode integration
3.Jenkins安裝插件: Keychains and Provisioning Profiles Management
4.git shhkey 配置(有的同學可跳過哩俭,按照初學者來寫的)
終端輸入:
ssh-keygen -t rsa -C"郵箱"
ssh-add ~/.ssh/id_rsa
cat /Users/用戶名/.ssh/id_rsa.pub
嘗試使用一下
- 錯誤一: unable to get local issuer certificate
- 終端輸入命令去掉git的ssl驗證: git config --global http.sslVerify false
復制公鑰至GIT
私鑰復制凡资,待會兒有用
終端輸入:
cat /Users/用戶名/.ssh/id_rsa
5.新建自由風格JOB
6.配置git
輸入第4步拿到的私鑰
保存垦藏,注意使用.git地址
7.配置證書
先將證書導入鑰匙串
將/Users/用戶名/Library/MobileDevice文件夾拷貝到/Users/Shared/Jenkins/Library
將/Users/用戶名/Library/Keychains/下的login.keychain及l(fā)ogin.keychain-db這兩個文件拷貝到/Users/Shared/Jenkins/Library/Keychains文件夾下面(我在10.13上有這兩個文件伞访,而10.14上只有-db文件厚掷,將-db改為db,在將兩個文件拷貝)
8.上傳證書
回到jenkins,選擇Keychains and Provisioning Profiles Management插件進行配置
選擇profile和login.db文件進行上傳掩驱,需要幾個證書就需要多少profile文件
Code Signing Identity 可以在鑰匙串-證書-右鍵簡介查看
Provisioning Profiles Directory Path為
/Users/Shared/Jenkins/Library/MobileDevice/Provisioning Profiles
9.繼續(xù)配置JOB
勾選Keychains and Code Signing Identities昙篙、Mobile Provisioning Profiles選擇對應證書诱咏,直接保存。
10.繼續(xù)配置腳本
參考腳本:
#!/bin/sh
# appName
export K_APP_NAME=""
# 項目名稱
export K_PROJECT_NAME=""
# xcodeproj
export K_XCODEPROJ_NAME=".xcodeproj或.xcworkspace"
# project
export K_PROJECT_WORKSPACE_NAME="project"
# scheme名稱
export K_SCHEME=""
# 編譯類型(用于區(qū)分發(fā)布還是AdHoc模式,可以忽略)
export K_BUILD_TYPE="Development"
# 編譯配置(主要根據自己的多環(huán)境進行配置,比如Release,Debug等)
export K_CONFIGURATION="Release"
# 包名前綴
export K_IPA_PREFIX=""
# 包類型
export K_IPA_TYPE="_alpha_"
# export
export K_EXPORT="export"
# Resources
export K_RESOURCES="Resources"
# xcode環(huán)境
export XCODE=/usr/bin
# 項目workspace
export K_WORK_SPACE=$WORKSPACE/$K_PROJECT_NAME/$K_XCODEPROJ_NAME/$K_PROJECT_WORKSPACE_NAME.xcworkspace
# 工程目錄
export K_PRO_SPACE=$WORKSPACE/$K_PROJECT_NAME
# info.plist路徑
export K_PROJECT_INFOPLIST_PATH=$WORKSPACE/$K_PROJECT_NAME/$K_APP_NAME/$K_RESOURCES/項目名-Info.plist;
# cd 工程目錄
cd $K_PRO_SPACE
# 獲取當前版本號
export K_VERSION_PRO=`/usr/bin/agvtool mvers -terse1`
# 取build值
export K_BUILD_VERSION=$(/usr/libexec/PlistBuddy -c "print CFBundleVersion" ${K_PROJECT_INFOPLIST_PATH})
# ExportOptions位置
export ExportOptionsPlistPath=/Users/用戶/Desktop/項目名-Release/ExportOptions.plist
# 包釋放根目錄
export K_DIST_ROOT_PATH=/Users/用戶/Desktop/項目名-Release
# 獲取時間
export K_JENKINS_TIME=`date +%Y%m%d%H%M`
# 包/時間
export K_DIST_PATH=$K_DIST_ROOT_PATH/$K_JENKINS_TIME
# xcarchive文件
export K_ARCHIVE_PATH=$K_DIST_PATH/$K_APP_NAME.xcarchive
# 導出目錄
export K_EXPORT_PATH=$K_DIST_PATH/$K_EXPORT
# 包命名規(guī)則示范:
export K_IPA_NAME=$K_IPA_PREFIX$K_VERSION_PRO$K_IPA_TYPE$K_BUILD_VERSION"_"$K_JENKINS_TIME
###############################################################################################################
# 目錄判斷
if [ ! -d $K_DIST_ROOT_PATH ];
then
mkdir $K_DIST_ROOT_PATH
fi
if [ ! -d $K_DIST_PATH ];
then
mkdir $K_DIST_PATH
fi
# 解鎖鑰匙串
# security unlock-keychain -p "電腦密碼" ~/Library/Keychains/login.keychain-db
# clean
$XCODE/xcodebuild clean -workspace $K_WORK_SPACE -destination generic/platform=iOS -scheme $K_SCHEME -configuration $K_CONFIGURATION -quiet
# build
$XCODE/xcodebuild build -workspace $K_WORK_SPACE -destination generic/platform=iOS -scheme $K_SCHEME -configuration $K_CONFIGURATION -quiet
# archive
$XCODE/xcodebuild archive -archivePath $K_ARCHIVE_PATH -workspace $K_WORK_SPACE -destination generic/platform=iOS -scheme $K_SCHEME
$XCODE/xcodebuild -exportArchive -archivePath $K_ARCHIVE_PATH -exportPath $K_EXPORT_PATH -exportOptionsPlist $ExportOptionsPlistPath -allowProvisioningUpdates
cd $K_DIST_PATH
# 移除打包生成的.xcarchive文件
rm -rf 項目名.xcarchive
cd $K_DIST_PATH/$K_EXPORT
# 重命名包文件
mv 項目名.ipa $K_IPA_NAME.ipa
echo $K_IPA_NAME
# 包本地路徑
export K_APP_PATH=$K_DIST_PATH/$K_EXPORT/$K_IPA_NAME.ipa
echo $K_APP_PATH
# svn上傳
svn import -m "Jenkins upload ipa" $K_APP_PATH http://用戶名@上傳目錄/$K_IPA_NAME.ipa --username 用戶名 --password 密碼
11.構建一次
- 失敗了查看控制臺輸出日志
錯誤原因:Failed to copy /Users/Shared/Jenkins/Home/kpp_upload/ 拷貝描述文件失敗了同蜻。
開放Jenkins下面Library權限早处,參照MAC Jenkins安裝》第一步。
再跑一次默责,結果如下:
錯誤:Command CodeSign failed with a nonzero exit code 簽名失敗。
修正: 打開鑰匙串杖虾,設置證書可信任或者打開xcode媒熊,在對應項目上signing & Capabilities簽名欄設置信任配置
重新做一次第七步芦鳍,也就是替換login.keychain ,然后在 Keychains and Provisioning Profiles Management重新上傳login.keychain
再次構建间影,就可以了
注意我這里導出的包放在了桌面茄茁,把desktop讀寫權限也開一下巩割。
我的打包執(zhí)行后包存放目錄
- 如果還報錯Command CodeSign failed with a nonzero exit code
可以嘗試把腳本中的打開鑰匙串代碼放開注釋
- 2020-04-23補充
如果更換了證書宣谈,在進行打包導出的時候需要更換ExportOption.Plist文件