(Continuous Integration)
-自動(dòng)編譯打包IPA-
持續(xù)集成是一種軟件開發(fā)實(shí)踐:許多團(tuán)隊(duì)頻繁地集成他們的工作癌刽,每位成員通常進(jìn)行日常集成,進(jìn)而每天會(huì)有多種集成步绸。每個(gè)集成會(huì)由自動(dòng)的構(gòu)建(包括測(cè)試)來(lái)盡可能快地檢測(cè)錯(cuò)誤掺逼。許多團(tuán)隊(duì)發(fā)現(xiàn)這種方法可以顯著的減少集成問題并且可以使團(tuán)隊(duì)開發(fā)更加快捷。
CI是一種開發(fā)實(shí)踐瓤介。實(shí)踐應(yīng)該包含3個(gè)基本模塊吕喘,一個(gè)可以自動(dòng)構(gòu)建的過(guò)程,自動(dòng)編譯代碼刑桑,可以自動(dòng)分發(fā)氯质,部署和測(cè)試。一個(gè)代碼倉(cāng)庫(kù)祠斧,SVN或者Git闻察。最后一個(gè)是一個(gè)持續(xù)集成的服務(wù)器。通過(guò)持續(xù)集成琢锋,可以讓我們通過(guò)自動(dòng)化等手段高頻率地去獲取產(chǎn)品反饋并響應(yīng)反饋的過(guò)程辕漂。
步驟如下:
安裝Jenkins
下載地址:https://jenkins.io/ 上下載最新的pkg安裝包。
安裝完成之后吴超,Safari可能會(huì)自動(dòng)打開钉嘹,如果沒有自動(dòng)打開,打開瀏覽器鲸阻,輸入http://localhost:8080
這個(gè)時(shí)候可能會(huì)報(bào)一個(gè)錯(cuò)誤跋涣。如果出現(xiàn)了這面的問題缨睡。出現(xiàn)這個(gè)問題的原因就是Java環(huán)境有問題,重新Java環(huán)境即可陈辱。
這個(gè)時(shí)候如果你重啟電腦會(huì)發(fā)現(xiàn)Jenkins給你新增了一個(gè)用戶奖年,名字就叫Jenkins,不過(guò)這個(gè)時(shí)候你不知道密碼沛贪。你可能會(huì)去試密碼拾并,肯定是是不對(duì)的,因?yàn)槌跏济艽a很復(fù)雜鹏浅。這個(gè)時(shí)候正確做法是打開http://localhost:8080 會(huì)出現(xiàn)重設(shè)初始密碼的界面[圖片上傳中...(屏幕快照 2018-02-07 下午2.35.50.png-ab5e80-1517985423920-0)]
按照提示,找到/Users/Shared/Jenkins/Home/ 這個(gè)目錄下屏歹,這個(gè)目錄雖然是共享目錄隐砸,但是有權(quán)限的,非Jenkins用戶/secrets/目錄是沒有讀寫權(quán)限的蝙眶。
打開initialAdminPassword文件季希,復(fù)制出密碼,就可以填到網(wǎng)頁(yè)上去重置密碼了幽纷。如下圖
一路安裝過(guò)來(lái)式塌,輸入用戶名,密碼友浸,郵件這些峰尝,就算安裝完成了。
還是繼續(xù)登錄localhost:8080 收恢,選擇“系統(tǒng)管理”——“管理插件”武学,我們要先安裝一些輔助插件。
三伦意、配置Jenkins用戶
1火窒、默認(rèn)情況下,Jenkins是不能登錄和注冊(cè)的,必須配置之后頁(yè)面才能出現(xiàn)登錄和注冊(cè)的頁(yè)面驮肉。
2熏矿、步驟:點(diǎn)擊“首頁(yè)面”—>“系統(tǒng)管理” —> “Configure Global Security”,
配圖如下:
3、Configure Global Security配置:
4离钝、注冊(cè):
5票编、登錄:
四、安裝管理插件
1奈辰、步驟:點(diǎn)擊“首頁(yè)面”—>“系統(tǒng)管理”—> “管理插件”—> “可選插件”
2栏妖、可選插件
在“可選插件”中選中“GitLab Plugin”和“Gitlab Hook Plugin”這兩項(xiàng),然后安裝奖恰。
3)安裝Xcode插件
同安裝GitLab插件的步驟一樣吊趾,我們依次選擇系統(tǒng)管理->管理插件宛裕,在“可選插件”中選中“Xcode integration”安裝。
Keychains and Provisioning Profiles Management(打包簽名)
舉例配圖:
五论泛、配置keychains and Provisioning Profiles Management
1揩尸、前提:Mac電腦安裝好“開發(fā)者簽名證書” 和 “Provisioning證書(打包IPA)”
2、步驟:點(diǎn)擊“首頁(yè)面”—>“系統(tǒng)管理”—> “Keychain and Provisioning Profiles Management”
tips:必須先安裝Keychains and Provisioning Profiles Management 插件才可以看到此鏈接
3屁奏、配置Keychains
1) Step one: 上傳System.keychain到Jenkins目錄
Jenkins查看上傳的keychain路徑:
/Users/Shared/Jenkins/Home/kpp_upload
2) Step two: 配置Keychains的具體信息
tips:如果不知道簽名在哪里的,可以去Mac電腦應(yīng)用程序中找到“鑰匙串訪問”岩榆,拷貝出簽名,粘貼到上圖(4)步驟中
4坟瓢、配置Provisioning Profiles
1) Step one: 上傳xxxx.mobileprovision到Jenkins目錄
如同配置Keychains的 Step one一致勇边,只是文件路徑不一樣
tips:不知道xxxx.mobileprovision在哪?
去開發(fā)者網(wǎng)站下載(具體細(xì)節(jié)自己百度)
https://developer.apple.com/
2) Step two:配置Provisioning Profiles 具體信息
5折联、以上配置完成
1) 配置不正確的粒褒,可以重新刪除再配置
2) 這里配置是iPhone Developer案例,值得注意的是證書導(dǎo)入鑰匙串后要修改下權(quán)限诚镰,如下圖:
六奕坟、新建Jobs
1、步驟:點(diǎn)擊“首頁(yè)面”—>“新建”
2清笨、配置“源碼管理”—> Git
1) Repository URL : 倉(cāng)庫(kù)地址
2) Credentials : 倉(cāng)庫(kù)用戶名和密碼
3) 配置完成月杉,構(gòu)建一次,看是否能從Git獲取代碼抠艾,
并保存到Jenkins用戶中苛萎。
3、構(gòu)建
腳本如下:
#項(xiàng)目路徑
Jobname="/Users/yingjinping/workspace/jenkins/workspace/ios/Consumer-iOS-Channel/"
#項(xiàng)目名稱
AppName="Consumer-Ios"
#ipa的外部統(tǒng)一存放文件夾
DeployName="ConsumerDeploy"
#證書
CODE_SIGN_DISTRIBUTION="iPhone Developer: tengfei shao"
# info.plist路徑
project_infoplist_path=${Jobname}${AppName}/Info.plist
echo ${project_infoplist_path}
#取版本號(hào)
bundleShortVersion=$(/usr/libexec/PlistBuddy -c "print CFBundleShortVersionString" ${project_infoplist_path})
#取build值
bundleVersion=$(/usr/libexec/PlistBuddy -c "print CFBundleVersion" "${project_infoplist_path}")
#日期(到哪一天)
DATE_DAY="$(date +%Y%m%d)"
#日期(到秒)
DATE="$(date +%Y%m%d)-$(date +%H%M%S)"
echo ${bundleShortVersion}
echo ${bundleVersion}
echo ${DATE}
echo ${DATE_DAY}
#!/bin/sh
# 解鎖對(duì)login.keychain的訪問跌帐,codesign會(huì)用到
security unlock-keychain -p 123456 /Users/yingjinping/Library/Keychains/login.keychain
security set-key-partition-list -S apple-tool:,apple:,codesign: -s -k 123456 /Users/yingjinping/Library/Keychains/login.keychain
security set-keychain-settings /Users/yingjinping/Library/Keychains/login.keychain
# 清除
xcodebuild -workspace ${Jobname}${AppName}.xcworkspace -scheme ${AppName} -configuration 'Debug' clean
# 打包簽名
xcodebuild -workspace ${Jobname}${AppName}.xcworkspace -scheme Consumer-Ios -sdk iphoneos -configuration 'Debug' CODE_SIGN_IDENTITY="iPhone Developer: tengfei shao"
#創(chuàng)建ipa的存放路徑
mkdir -p ${Jobname}${DeployName}/${bundleShortVersion}/deploy/${DATE}
# 導(dǎo)出ipa
xcrun -sdk iphoneos PackageApplication -v /Users/yingjinping/Library/Developer/Xcode/DerivedData/Consumer-Ios-apcosxndlglcvicjvgkopvvnxwcr/Build/Products/Debug-iphoneos/Consumer-Ios.app -o ${Jobname}${DeployName}/${bundleShortVersion}/deploy/${DATE}/${AppName}-${DATE}.ipa
echo copystart
awk 'BEGIN { cmd="cp -r ~/workspace/jenkins/workspace/ios/Consumer-iOS-Channel/ConsumerDeploy ~/share/projectFile/Ios/"; print "n" |cmd; }'
echo copyend
#蒲公英上的User Key
uKey="b1398adefd0c6c8e131317f3438a4b76"
#蒲公英上的API Key
apiKey="cf3d47a21becaeba2117d8ec933913f1"
#要上傳的ipa文件路徑
IPA_PATH=${Jobname}${DeployName}/${bundleShortVersion}/deploy/${DATE}/${AppName}-${DATE}.ipa
rm -rf text.txt
#執(zhí)行上傳至蒲公英的命令
echo "++++++++++++++upload+++++++++++++"
curl -F "file=@${IPA_PATH}" -F "uKey=${uKey}" -F "_api_key=${apiKey}" http://www.pgyer.com/apiv1/app/upload
# 備注:
# /Users/yingjinping/Library/Developer/Xcode/DerivedData/Consumer-Ios-apcosxndlglcvicjvgkopvvnxwcr/Build/Products/Debug-iphoneos/Consumer-Ios.app該路徑是Jenkins自動(dòng)打包APP的路徑
# ${Jobname}${DeployName}/${bundleShortVersion}/deploy/${DATE}/${AppName}-${DATE}.ipa 該路徑是打包好的ipa存放的路徑
·····
5首懈、保存好,繼續(xù)“立即構(gòu)建項(xiàng)目”谨敛,測(cè)試項(xiàng)目是否能跑通
6究履、配置“構(gòu)建觸發(fā)器”—>自動(dòng)構(gòu)建項(xiàng)目
語(yǔ)法結(jié)構(gòu):
每行包括5個(gè)部分,可以用空格或者tab分隔
* * * * *
第一個(gè):表示分鐘 minute(0-59)
第二個(gè):表示小時(shí) hour (0-23)
第三個(gè):表示天 dom (1-31)
第四個(gè):表示月 month (1-12)
第五個(gè):表示周 dow (0-7) 0和7都表示周日
例如: (Build periodically中設(shè)置)
H/15 * * * *
表示:每隔15分鐘執(zhí)行一次
H(0-29)/10 * * * *
表示:每個(gè)小時(shí)的前半小時(shí)脸狸,每隔10分鐘執(zhí)行一次
H 9-16/2 * * 1-5
表示:工作日(周一~周五)每隔2小時(shí)執(zhí)行一次
H H(5-6) * * *
表示:每天早上6點(diǎn)執(zhí)行一次
H H 1,15 1-11 *
表示:除了12月份最仑,每月1號(hào)、15號(hào)每天執(zhí)行一次
```
7炊甲、配置“Git”—> 補(bǔ)充說(shuō)明
經(jīng)過(guò)以上配置泥彤,才能從git上下載代碼,插件安裝好!
`