Jenkins持續(xù)集成iOS項(xiàng)目

(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安裝包。

image.png

image.png

image.png

image.png

[圖片上傳中...(image.png-602371-1517382116220-0)]

image.png

安裝完成之后吴超,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)限的蝙眶。

image.png

image.png

打開initialAdminPassword文件季希,復(fù)制出密碼,就可以填到網(wǎng)頁(yè)上去重置密碼了幽纷。如下圖


image.png

image.png

image.png
image.png
image.png

image.png
image.png

一路安裝過(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”,
配圖如下:

[圖片上傳失敗...(image-7d248b-1517985499900)]
490CDA80-2252-463F-B4B5-0AAAC8C2A783.png
image.png

3、Configure Global Security配置:


image.png

4离钝、注冊(cè):


image.png
image.png

5票编、登錄:

四、安裝管理插件
1奈辰、步驟:點(diǎn)擊“首頁(yè)面”—>“系統(tǒng)管理”—> “管理插件”—> “可選插件”
2栏妖、可選插件
在“可選插件”中選中“GitLab Plugin”和“Gitlab Hook Plugin”這兩項(xiàng),然后安裝奖恰。


image.png

3)安裝Xcode插件
同安裝GitLab插件的步驟一樣吊趾,我們依次選擇系統(tǒng)管理->管理插件宛裕,在“可選插件”中選中“Xcode integration”安裝。


image.png

Keychains and Provisioning Profiles Management(打包簽名)
舉例配圖:

image.png

image.png

五论泛、配置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 插件才可以看到此鏈接


image.png

3屁奏、配置Keychains

1) Step one: 上傳System.keychain到Jenkins目錄


image.png
    Jenkins查看上傳的keychain路徑:
        /Users/Shared/Jenkins/Home/kpp_upload
image.png
    2) Step two: 配置Keychains的具體信息 

    tips:如果不知道簽名在哪里的,可以去Mac電腦應(yīng)用程序中找到“鑰匙串訪問”岩榆,拷貝出簽名,粘貼到上圖(4)步驟中 
image.png
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 具體信息 
image.png
5折联、以上配置完成
    1) 配置不正確的粒褒,可以重新刪除再配置
    2) 這里配置是iPhone Developer案例,值得注意的是證書導(dǎo)入鑰匙串后要修改下權(quán)限诚镰,如下圖:
image.png

六奕坟、新建Jobs
1、步驟:點(diǎn)擊“首頁(yè)面”—>“新建”

image.png

2清笨、配置“源碼管理”—> Git
1) Repository URL : 倉(cāng)庫(kù)地址
2) Credentials : 倉(cāng)庫(kù)用戶名和密碼
3) 配置完成月杉,構(gòu)建一次,看是否能從Git獲取代碼抠艾,
并保存到Jenkins用戶中苛萎。
3、構(gòu)建


image.png

腳本如下:

#項(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上下載代碼,插件安裝好!

`

CB13EA0E-DCEE-4673-8396-6C717EC8600A.png
屏幕快照 2018-02-07 下午5.10.49.png
3AA6E252-528C-4210-A4BC-E32F3BBA8764.png
3E6C9002-BA76-45D9-9938-545673711985.png
屏幕快照 2018-02-07 下午5.19.44.png
屏幕快照 2018-02-07 下午5.28.46.png
屏幕快照 2018-02-08 上午11.15.38.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市卿啡,隨后出現(xiàn)的幾起案子吟吝,更是在濱河造成了極大的恐慌,老刑警劉巖颈娜,帶你破解...
    沈念sama閱讀 206,378評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件剑逃,死亡現(xiàn)場(chǎng)離奇詭異浙宜,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)蛹磺,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,356評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門粟瞬,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人萤捆,你說(shuō)我怎么就攤上這事裙品。” “怎么了俗或?”我有些...
    開封第一講書人閱讀 152,702評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵市怎,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我辛慰,道長(zhǎng)焰轻,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,259評(píng)論 1 279
  • 正文 為了忘掉前任昆雀,我火速辦了婚禮,結(jié)果婚禮上蝠筑,老公的妹妹穿的比我還像新娘狞膘。我一直安慰自己,他們只是感情好什乙,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,263評(píng)論 5 371
  • 文/花漫 我一把揭開白布挽封。 她就那樣靜靜地躺著,像睡著了一般臣镣。 火紅的嫁衣襯著肌膚如雪辅愿。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,036評(píng)論 1 285
  • 那天忆某,我揣著相機(jī)與錄音点待,去河邊找鬼。 笑死弃舒,一個(gè)胖子當(dāng)著我的面吹牛癞埠,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播聋呢,決...
    沈念sama閱讀 38,349評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼苗踪,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了削锰?” 一聲冷哼從身側(cè)響起通铲,我...
    開封第一講書人閱讀 36,979評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎器贩,沒想到半個(gè)月后颅夺,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體朋截,經(jīng)...
    沈念sama閱讀 43,469評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,938評(píng)論 2 323
  • 正文 我和宋清朗相戀三年碗啄,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了质和。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,059評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡稚字,死狀恐怖饲宿,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情胆描,我是刑警寧澤瘫想,帶...
    沈念sama閱讀 33,703評(píng)論 4 323
  • 正文 年R本政府宣布,位于F島的核電站昌讲,受9級(jí)特大地震影響国夜,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜短绸,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,257評(píng)論 3 307
  • 文/蒙蒙 一车吹、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧醋闭,春花似錦窄驹、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,262評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至囚企,卻和暖如春丈咐,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背龙宏。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工棵逊, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人银酗。 一個(gè)月前我還...
    沈念sama閱讀 45,501評(píng)論 2 354
  • 正文 我出身青樓歹河,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親花吟。 傳聞我的和親對(duì)象是個(gè)殘疾皇子秸歧,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,792評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容