利用jenkins實現iOS項目持續集成,詳細步驟如下。
一、Jenkins安裝
1、安裝java環境。
2、從官網下載jenkins.war文件。
3、運行jenkins,cd到jenkins.war文件所在目錄,在終端執行java -jar jenkins.war --httpPort=8080。
4、打開瀏覽器進入http://localhost:8080,按照提示逐步安裝即可。
5、安裝成功后訪問的頁面如下圖(已經構建了項目)。
二、Jenkins插件下載
在系統管理 --> 插件管理中選擇需要的插件下載。
ios必需要的插件如下:
# GitHub插件
GitHub plugin?
# Xcode編譯打包必須的插件
Xcode integration
# 如果后面要上傳并指定用某個簽名證書打包的話
Keychains and Provisioning Profiles Management
其它插件可根據需要來進行安裝。
三、Jenkins服務器配置
1、環境變量配置
在系統管理->系統設置中添加環境變量,如圖所示。
環境變量需要添加兩組鍵值對,其中第二個環境變量鍵是PATH,值是在終端輸入echo $PATH的輸出值。
2、添加Publish over ssh
為了和遠程服務器通信(例如:上傳自動打包后的ipa文件到遠程Tomcat服務器),需要把~/.ssh目錄下的id_rsa.pub上傳到遠程服務器,id_rsa配置到jenkins中。
3、配置ssh servers
配置ssh servers是ipa包需要上傳到的遠程服務器地址配置,如圖。
四、Jenkins項目配置
1、配置源碼管理,選擇Git,添加git倉庫和分支,如下圖。
2、配置構建環境,如下圖。
3、配置ios項目打包需要的證書。
4、添加構建步驟,此步驟是實現自動打包的過程,其實就是用shell腳本去執行xcode的編譯和打包命令。
以下shell腳本可以作為參考,其中一些變量根據項目進行修改即可使用
#!/bin/sh
# 計時
SECONDS=0
# 是否編譯工作空間 (例:若是用Cocopods管理的.xcworkspace項目,賦值true; 用Xcode默認創建的.xcodeproj, 賦值false)
is_workspace="true"
#scheme_name為項目名稱
scheme_name="HKGTA"
#build_configuration 為Debug? or? Release
#CODE_SIGN_IDENTITY=${CODE_SIGNING_IDENTITY}
#echo "CODE_SIGN_IDENTITY: $CODE_SIGN_IDENTITY"
build_configuration="Release"
#定義一個變量后面要用到
info_plist_name="Info"
#JENKINS_HOME目錄
JENKINS_HOME_PATH="/Users/amin.kuang/.jenkins"
#進入項目目錄
cd $JENKINS_HOME_PATH/workspace/HKGTA-member/Member
# 獲取項目名稱
project_name=`find . -name *.xcodeproj | awk -F "[/.]" '{print $(NF-1)}'`
#指定項目地址
workspace_path="$JENKINS_HOME_PATH/workspace/HKGTA-member/Member/$project_name.xcworkspace"
# 獲取版本號,內部版本號,bundleID
info_plist_path="$project_name/$info_plist_name.plist"
bundle_version=`/usr/libexec/PlistBuddy -c "Print CFBundleShortVersionString" $info_plist_path`
bundle_build_version=`/usr/libexec/PlistBuddy -c "Print CFBundleIdentifier" $info_plist_path`
bundle_identifier=`/usr/libexec/PlistBuddy -c "Print CFBundleVersion" $info_plist_path`
# 導出ipa所需要的plist文件路徑
ExportOptionsPlistPath="$JENKINS_HOME_PATH/jobs/HKGTA-member/shell/AdHocExportOptionsPlist.plist"
# 強制刪除舊的文件夾
rm -rf ./$scheme_name-IPA
# 指定輸出ipa路徑
export_path=./$scheme_name-IPA
# 指定輸出歸檔文件地址
export_archive_path="$export_path/$scheme_name.xcarchive"
# 指定輸出ipa地址
export_ipa_path="$export_path"
# 指定輸出ipa名稱 : scheme_name + bundle_version
suffix=`date +"%m%d%H%M"`
ipa_name="${scheme_name}-v${bundle_version}_$suffix"
version="${bundle_version}.$suffix"
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion $version" "$info_plist_path"
# 指定輸出文件目錄不存在則創建
if test -d "$export_path" ; then
echo $export_path
else
mkdir -pv $export_path
fi
echo "************************* 開始pod *************************"
pod install --verbose --no-repo-update
echo "************************* pod完成 *************************"
#clean
xcodebuild clean -workspace $workspace_path -scheme $scheme_name -configuration $build_configuration
# step 2. Build
xcodebuild -workspace $workspace_path -scheme $scheme_name -sdk iphoneos -configuration $build_configuration
# step 3. Archive
xcodebuild archive -workspace $workspace_path -scheme $scheme_name -configuration $build_configuration -archivePath $export_archive_path
xcodebuild -exportArchive -archivePath $export_archive_path -exportPath $export_ipa_path -exportOptionsPlist $ExportOptionsPlistPath
mv $export_ipa_path/$scheme_name.ipa $export_ipa_path/$ipa_name.ipa
if test -f "$export_ipa_path/$ipa_name.ipa" ; then
echo "************************* 導出 $ipa_name.ipa 包成功*************************"
else
echo "************************* 導出 $ipa_name.ipa 包失敗 *************************"
exit 1
fi
# 輸出打包總用時
echo "\033[36;1m************************* 使用Shell腳本打包總用時: ${SECONDS}s *************************\033[0m\n"
5、添加構建后的操作,把ipa包上傳到指定的遠程服務器的/root/tmp/目錄下,最終copy到另一個指定目錄下,并把tmp/目錄中的包刪除。
6、配置完成后點擊保存按鈕進行保存。
五、導出ipa包所需要的plist文件和腳本配置
1、ios項目在不同證書下打包時所輸出的plist文件名稱和配置是不一樣的。
AdHocExportOptionsPlist.plist ?--> ?真機調試證書
AppStoreExportOptionsPlist.plist ?--> ?appStore證書
DevelopmentExportOptionsPlist.plist ?--> ?開發證書
EnterpriseExportOptionsPlist.plist ?--> ?企業證書
六、構建項目
構建進度條顯示。
構建完成后可以查看構建日志。