iOS從環境自動部署到自動化構建

以前寫的 iOS如何實現API環境自動部署文章對於部分人來講可能以爲沒什麼太大的意義,畢竟對大部分公司來講可能只有一我的負責開發,不須要考慮分支切換(版本更新,臨時需求或問題修復上線等問題),接下來這篇文章將是 對iOS環境實現自動化部署最實用性的配套--自動化構建。git

自動化構建前期準備

構建環境準備

本次自動化構建基於 jenkins
jenkins下載地址: jenkins.io/zh/
根據我的愛好選擇喜歡的安裝方式,jar或dmg,安裝好後,登陸localhost:8080,根據文檔設置管理帳號,安裝推薦插件,還須要到插件管理中搜索安裝Xcode integration插件 (Jenkins - Manage Jenkins - Manage Plugins)github

插件安裝好後,新建任務輸入任務名稱(將會成爲拉下來項目的目錄名稱),選擇構建一個多配置項目,而後點擊肯定,以下圖所示shell

建立任務成功後進入到配置頁

General填寫描述, 源碼管理選Git填寫Repositories及要構建的分支Branches to build,以下圖

構建觸發器, 勾選Poll SCM定時檢查源碼變動,根據我的須要定義檢查間隔,以下圖

接下來直接到 構建 部分,選擇Execute shell,採用腳本進行構建, 腳本內容以下xcode

#!/bin/sh 
#export LC_ALL=zh_CN.GB2312;export LANG=zh_CN.GB2312
export LANG=en_US.UTF-8
export LANGUAGE=en_US.UTF-8
export LC_ALL=en_US.UTF-8

#項目路徑,jenkins環境下的項目所在路徑,
# /Users/你的電腦名稱/.jenkins/workspace/項目名稱(此處項目名稱與jenkins上的一致)
projectDir=/Users/xxx/.jenkins/workspace/AutoDemo

#打包須要的ExportOptions.plist文件路徑
#ExportOptions.plist的內容能夠經過xcodebuild -help瞭解
exportOptionsPlistPath=${projectDir}/ExportOptions.plist

#項目名稱,工程名稱
projectName=AutoDemo
#編譯的方式,默認爲Release,還有Debug等
buildConfig=Release 
#日誌log文件/導出安裝包的目錄路徑
buildAppToDir=/Users/xxx/Desktop/demoIpa

#項目的Info.plist路徑
infoPlist=${projectDir}/${projectName}/Info.plist

#因爲jenkins拉下來的項目沒法獲取到分支名,這裏進行手動修改配置
#GIT_BRANCH 是jenkins提供的變量名,獲得分支名稱
/usr/libexec/PlistBuddy -c "Set :GitCommitBranch ${GIT_BRANCH/#origin\//}" $infoPlist

mkdir -pv $buildAppToDir
logPath=$buildAppToDir/$projectName-$buildConfig.log

###############
mkdir -pv $buildAppToDir

#用到cocoapods,須要更新Pods的執行下命令,不須要則可註釋
#cd $projectDir
#pod install

###############開始編譯app

echo "分支名稱: ${GIT_BRANCH/#origin\//}" >>$logPath

#編譯前先clean
xcodebuild clean
#使用cocoapods的項目 workspace的,則執行此行
# xcodebuild -workspace ${projectDir}/${projectName}.xcworkspace -scheme ${projectName} -configuration $buildConfig -sdk iphoneos -archivePath $buildAppToDir/$projectName.xcarchive archive

#project,非workspace項目執行此行
xcodebuild -project ${projectDir}/${projectName}.xcodeproj -scheme ${projectName} -configuration $buildConfig -sdk iphoneos -archivePath $buildAppToDir/$projectName.xcarchive archive

#判斷編譯結果
if test $? -eq 0
then
echo "~~~~~~~~~~~~~~~~~~~編譯成功~~~~~~~~~~~~~~~~~~~" >>$logPath
else
echo "~~~~~~~~~~~~~~~~~~~編譯失敗~~~~~~~~~~~~~~~~~~~" >>$logPath
echo "\n" >>$logPath
exit 1
fi

###############開始打包成.ipa 
ipaName="`date +%Y%m%d%-H:%m:%s`" 
echo "安裝包名稱:${ipaName}" >>$logPath

echo "開始打包$projectName.xcarchive成ipa....." >>$logPath

xcodebuild -exportArchive -archivePath ${buildAppToDir}/${projectName}.xcarchive -exportPath ${buildAppToDir}/${ipaName} -exportOptionsPlist ${exportOptionsPlistPath} -allowProvisioningUpdates

if test $? -eq 0
then
    #statements
    echo "打包${projectName}的ipa包成功" >>$logPath
else
    echo "打包${projectName}的ipa包失敗" >>$logPath
    exit 1
fi


複製代碼

項目準備

項目GitScript修改, 適配jenkins中獲取到分支名稱爲空到問題,以下圖bash

因爲使用到是腳本打包,在部署jenkins環境的電腦上Xcode-Accounts中登陸咱們的開發者帳號,同時咱們的項目中須要ExportOptions.plist, 打包用到配置文件,想要了解更多關於ExportOptions.plist的鍵值能夠經過終端輸入xcodebuild -help進行查看,基本內容以下圖 app

進行構建

項目準備好後(推送到git倉庫),jenkins配置後,執行Build Now便可進行構建,或者觸發器觸發後會自動進行構建,構建完成後的目錄以下iphone

結尾:

我的認爲無論一人仍是多人同時開發,都應保持良好的分支管理習慣,這樣才能從容的應對產品不斷變化的需求,以及觸不及防的bug....post

因爲jenkins用的很少,寫的衝忙,有不對的地方歡迎你們指出ui

示例項目AutoDemospa

相關文章
相關標籤/搜索