iOS打包自動化實踐(三)

上一篇:iOS打包自動化實踐(二)

自動打包項目優(yōu)化

本篇文章介紹了jenkins email通知尚氛、使用swift腳本自動升級build號沛申、自動上傳蒲公英并自動發(fā)送鏈接到釘釘群等功能炕贵。

添加E-mail通知

1靴拱、安裝Jenkins插件:系統(tǒng)管理-管理插件中国觉,搜索"Email-ext plugin"和"Email-ext Template Plugin"并安裝。

2又憨、在"系統(tǒng)設(shè)置"中找到"郵件通知"和"Extended E-mail Notification", 163郵箱配置如圖(注意:如果郵箱開啟了客戶端授權(quán)碼翠霍,需要填寫授權(quán)碼而不是密碼, 即"設(shè)置 -->POP3/SMTP/IMAP-->客戶端授權(quán)密碼"):

郵箱.png

3、在項目配置的"構(gòu)建后操作"中蠢莺,添加"Editable Email Notification"寒匙,在"Project Recipient List"中填寫需要收取郵件的郵箱地址,"Default Content"中可以直接使用jenkins的全局環(huán)境變量, "${BUILD_STATUS}", "${BUILD_URL}"等躏将,填寫

\${SCRIPT, template="groovy-text.template"}

可以收到基本信息锄弱,也可以點擊如圖鏈接,查看所有可用的環(huán)境變量并在郵件內(nèi)容中使用祸憋。

環(huán)境變量.png

4会宪、點擊"Adcanced Settings-Add Trigger",可以設(shè)置發(fā)送郵件的觸發(fā)時機,設(shè)置"Send To"為"Recipient List".

5夺衍、點擊保存,完成喜命。

自定義Email內(nèi)容

適用場景: 需要在腳本中生成log并發(fā)送郵件沟沙。比如腳本中有打包,下載metadata壁榕,上傳ipa三步矛紫,當(dāng)任務(wù)build失敗時,我們需要在郵件中打印log來快速定位是哪一步出了問題牌里。原理是先在shell中把log寫入文件颊咬,再把文件內(nèi)容讀取到郵件的內(nèi)容中。

1牡辽、在"Execute shell"中把log寫入文件:

echo "test log" > /file/path/logFile.txt

2喳篇、在"Editable Email Notification-Default Content"中寫如下代碼:

${FILE,path="/file/path/logFile.txt"}

自動升級build號和自動獲取版本號

由于swift是可以用來寫腳本的,再加上iOS程序猿都比較熟悉swift語法态辛,因此這里自動升級build號的工作我編寫了一個簡單的swift腳本來實現(xiàn)麸澜,十分的方便,這里語法不多介紹了大家都會奏黑,簡單介紹下如何把swift腳本跑起來炊邦。

1编矾、創(chuàng)建modifyBuildNumber.swift文件, 并將其放在遠程CI機器上。

2馁害、文件頭部添加代碼, 指定編譯器:

#!/usr/bin/env xcrun swift

3窄俏、接下來就可以愉快的編寫swift代碼了,通過讀取并修改info.plist中的CFBundleVersion字段來達到自動升級build號的功能碘菜。若修改失敗凹蜈,執(zhí)行代碼"exit(1)", 修改成功不執(zhí)行或者執(zhí)行代碼"exit(0)"。

4炉媒、在shell中執(zhí)行swift腳本并獲取swift腳本執(zhí)行結(jié)果:

#獲取swift腳本路徑
modify_build_number_script="file/path/modifyBuildNumber.swift"

#修改腳本權(quán)限為可執(zhí)行
chmod +x $modify_build_number_script

#獲取腳本執(zhí)行結(jié)果
RESPONSE=`$modify_build_number_script`

#判斷上一條命令是否執(zhí)行成功踪区。
if [ $? -ne 0 ]; then
    echo "swift腳本執(zhí)行失敗:$RESPONSE" 
fi

在swift腳本中執(zhí)行print命令打印的log吊骤, 會作為swift腳本的執(zhí)行結(jié)果缎岗,并賦值給RESPONSE這個變量。(但是我發(fā)現(xiàn)通過這種方式只能獲取一行白粉,對于目前的需求肯定是夠用了传泊。不過如果大家有更好的辦法歡迎評論告訴我).

自動獲取版本號更加的簡單,使用swift腳本直接讀取info.plist中的CFBundleShortVersionString字段鸭巴,并使用print命令打印眷细,在shell中直接使用變量獲取swift腳本執(zhí)行結(jié)果即可(獲取的版本號主要用于deliver命令)。

自動觸發(fā)打包任務(wù)

實現(xiàn)了自動修改build號和自動獲取版本號的功能之后鹃祖,是不是發(fā)現(xiàn)這個系統(tǒng)需要人工操作的地方更少了溪椎?接下來介紹如何自動觸發(fā)打包上傳任務(wù)。

我們公司使用了TestFlight進行內(nèi)測期間的回歸測試工作恬口,因此一旦有新的代碼合并進入release-test分支校读,就需要打包上傳到TestFlight。這個功能利用jenkins也很好實現(xiàn)祖能。

1歉秫、進入任務(wù)的配置界面,在"構(gòu)建觸發(fā)器"欄中勾選Poll SCM养铸,并填寫代碼:"* * * * *", 這代表每分鐘jenkins自動檢測一次你在"源碼管理-Branches to build"欄中填寫的分支是否有代碼變化雁芙,一旦有變化即觸發(fā)自動打包。

2钞螟、檢測時間間隔可以自行調(diào)整兔甘,比如"H * * * *":每小時檢測一次,"H */2 * * *":每兩小時檢測一次鳞滨。

3裂明、上傳到iTC之后,testFlight每次都會詢問是否修改了加密協(xié)議,不能自動發(fā)布testflight版本闽晦,這時需要在info.plist中加入字段"App Uses Non-Exempt Encryption", 值設(shè)置為NO扳碍。 即可實現(xiàn)每次上傳之后都會自動觸發(fā)testflight版本發(fā)布。

jenkins中的全局環(huán)境變量"BUILD_CAUSE"代表了觸發(fā)原因仙蛉,值為"SCMTRIGGER"時表示自動觸發(fā)笋敞,"MANUALTRIGGER"表示手動觸發(fā)。

打包腳本的版本管理

項目優(yōu)化到這一步我們發(fā)現(xiàn)腳本越來越長荠瘪,而且增加了幾個swift腳本夯巷,還有ExportOptions.plist文件,已經(jīng)略顯龐大哀墓。而且腳本直接寫在jenkins的"Execute shell"中很不安全趁餐,一旦誤刪前功盡棄。這時可以考慮給所有的打包腳本和工具放在一個單獨的Git倉庫中篮绰,每次觸發(fā)構(gòu)建時拉取最新的腳本和項目代碼后雷,進行打包。這樣做方便自動打包項目的維護和移植吠各。

1臀突、使用Execute shell中的代碼建立archive_upload.sh文件,并把ta和剛剛建立的swift腳本贾漏,ExportOptions.plist文件放在一起候学,單獨建立git倉庫。

2纵散、在"Jenkins-插件管理"中下載插件"Multiple SCMs Plugin"

3梳码、在項目配置頁面,"源碼管理"中勾選"Multiple SCMs"伍掀,分別配置項目git地址和腳本git地址掰茶,并通過"Additional Behaviours-Check out to a sub-directory"分別建立下級文件夾。

4硕盹、修改Execute shell為:

#!/bin/sh

root_path=`pwd`
project_path="$root_path/ProjectPath"
script_path="$root_path/AutoPackScripts/archive_upload.sh"

chmod +x $script_path

#執(zhí)行腳本
$script_path\
    --projectPath $project_path\
    --zhHans $release_notes_zhHans\
    --zhHant $release_notes_zhHant\

5符匾、給archive_upload.sh腳本增加參數(shù)解析功能叨咖,shell腳本的參數(shù)數(shù)量和名稱是可以任意拓展的瘩例。在archive_upload.sh中添加如下代碼即可解析:

while [ -n "$1" ]
do
    case "$1" in
    --projectPath)
        #工程目錄
        project_path=$2
        shift
        ;;
    --zhHans)
        #簡中發(fā)版文案
        release_notes_zhHans=$2    
        shift
        ;;
    --zhHant)
        #繁中發(fā)版文案
        release_notes_zhHant=$2
        shift
        ;;
    *)
        ;;
    esac
    shift
done

企業(yè)包自動上傳至蒲公英并自動發(fā)送下載鏈接到釘釘群

到現(xiàn)在我們的項目已經(jīng)可以自動打release包上傳到iTC了,那么自動打企業(yè)包只需要更換證書和修改ExportOptions.plist文件即可甸各,這里不多介紹垛贤,直接介紹如何自動上傳到蒲公英并發(fā)送二維碼到釘釘群的功能。

假設(shè)你的項目已經(jīng)可以成功打出企業(yè)簽名的包并且導(dǎo)出了ipa

1趣倾、在Jenkins-插件管理中安裝插件"Upload to pgyer".

2聘惦、在項目配置的"構(gòu)建"中,點擊"添加構(gòu)建步驟-Upload to pgyer", 并填寫api_key儒恋,在"file wildcard"中填寫導(dǎo)出的ipa路徑.

蒲公英配置.png

3善绎、在你的釘釘群中添加機器人黔漂,并復(fù)制其webhook鏈接。

4禀酱、在jenkins上創(chuàng)建一個新的任務(wù)"DingTalk_Sender", 直接在"Execute shell"中寫如下代碼:

#!/bin/sh

curl 'https://oapi.dingtalk.com/robot/send?access_token=xxx' \
   -H 'Content-Type: application/json' \
   -d '
  {     "msgtype": "link", 
        "link": {
        "text":"測試", 
       "title": "測試", 
        "picUrl": "", 
        "messageUrl": "https://www.pgyer.com/xxxx"
    }
    
  }'

curl填你的機器人的webhook鏈接, messageUrl字段填寫你的項目在蒲公英的地址炬守。

4、回到你的打包上傳任務(wù)中剂跟,在"構(gòu)建后操作"中减途,添加"Build other projects",填寫"DingTalk_Sender".這樣就使兩個任務(wù)相關(guān)聯(lián)曹洽,執(zhí)行完上傳后即自動執(zhí)行DingTalk_Sender任務(wù)鳍置。

FAQ

1、郵箱配置時送淆,發(fā)送測試郵件報錯:javax.mail.authenticationfailedexception: 535税产,有兩種可能:

  • 密碼填寫錯誤
  • 郵箱開啟了客戶端授權(quán)碼,但是密碼沒有填寫授權(quán)碼而是填寫了郵箱密碼

2坊夫、郵箱配置成功且測試郵件發(fā)送成功砖第,但是build成功之后發(fā)送郵件時控制臺輸出顯示:Connection error sending email, retrying once more in 10 seconds...并且發(fā)送郵件失敗。

在jenkins的系統(tǒng)設(shè)置中找到"Extended E-mail Notification"环凿,并按照之前的配置重新配置一遍梧兼。

Note also that depending on your plug-in set up, you may have another place to configure SMTP server. For example under "Manage Jenkins" -> "Configure System" -> "E-mail Notification".

That is not needed for this particular plug-in but it may lead you think you have everything done, while it is not :)

3、配置多個SCM之后智听,只要有一個倉庫發(fā)生變化都會觸發(fā)Poll SCM自動構(gòu)建羽杰,如何使其忽略某個倉庫?

在"源碼管理"中到推,在該倉庫下的'Advanced clone behaviors'中考赛,選擇'Polling ignores commits in certain paths',并在'Excluded Regions'中填寫'.*'莉测。

忽略某個repo.png

下一篇:iOS打包自動化實踐(四)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末颜骤,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子捣卤,更是在濱河造成了極大的恐慌忍抽,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,470評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件董朝,死亡現(xiàn)場離奇詭異鸠项,居然都是意外死亡,警方通過查閱死者的電腦和手機子姜,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,393評論 3 392
  • 文/潘曉璐 我一進店門祟绊,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事牧抽〖涡埽” “怎么了?”我有些...
    開封第一講書人閱讀 162,577評論 0 353
  • 文/不壞的土叔 我叫張陵扬舒,是天一觀的道長记舆。 經(jīng)常有香客問我,道長呼巴,這世上最難降的妖魔是什么泽腮? 我笑而不...
    開封第一講書人閱讀 58,176評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮衣赶,結(jié)果婚禮上诊赊,老公的妹妹穿的比我還像新娘。我一直安慰自己府瞄,他們只是感情好碧磅,可當(dāng)我...
    茶點故事閱讀 67,189評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著遵馆,像睡著了一般鲸郊。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上货邓,一...
    開封第一講書人閱讀 51,155評論 1 299
  • 那天秆撮,我揣著相機與錄音,去河邊找鬼换况。 笑死职辨,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的戈二。 我是一名探鬼主播舒裤,決...
    沈念sama閱讀 40,041評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼觉吭!你這毒婦竟也來了腾供?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,903評論 0 274
  • 序言:老撾萬榮一對情侶失蹤鲜滩,失蹤者是張志新(化名)和其女友劉穎伴鳖,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體绒北,經(jīng)...
    沈念sama閱讀 45,319評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡黎侈,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,539評論 2 332
  • 正文 我和宋清朗相戀三年察署,在試婚紗的時候發(fā)現(xiàn)自己被綠了闷游。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,703評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖脐往,靈堂內(nèi)的尸體忽然破棺而出休吠,到底是詐尸還是另有隱情,我是刑警寧澤业簿,帶...
    沈念sama閱讀 35,417評論 5 343
  • 正文 年R本政府宣布瘤礁,位于F島的核電站,受9級特大地震影響梅尤,放射性物質(zhì)發(fā)生泄漏柜思。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,013評論 3 325
  • 文/蒙蒙 一巷燥、第九天 我趴在偏房一處隱蔽的房頂上張望赡盘。 院中可真熱鬧,春花似錦缰揪、人聲如沸陨享。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,664評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽抛姑。三九已至,卻和暖如春艳狐,著一層夾襖步出監(jiān)牢的瞬間定硝,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,818評論 1 269
  • 我被黑心中介騙來泰國打工毫目, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留喷斋,地道東北人。 一個月前我還...
    沈念sama閱讀 47,711評論 2 368
  • 正文 我出身青樓蒜茴,卻偏偏與公主長得像星爪,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子粉私,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,601評論 2 353

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

  • 1顽腾、通過CocoaPods安裝項目名稱項目信息 AFNetworking網(wǎng)絡(luò)請求組件 FMDB本地數(shù)據(jù)庫組件 SD...
    陽明先生_X自主閱讀 15,979評論 3 119
  • 62抄肖、“當(dāng)我達到一定量的銷售時,就會停產(chǎn)這個產(chǎn)品……窖杀,’ 這種“產(chǎn)品停產(chǎn)”策略告訴你的潛在客戶漓摩,他們最好現(xiàn)在就購買...
    追著太陽的尾巴閱讀 280評論 0 0
  • 神農(nóng)幣是一只母狗,短腿入客,微黃的毛發(fā)管毙,是某種狗和中華田園犬的雜交品種腿椎,母親收留它時就是看上它長不高的個頭。 剛到我家...
    艾米小姐閱讀 1,150評論 0 2
  • 【七月影語】20170731學(xué)習(xí)力踐行Day71 1.聽鵝媽媽磨耳朵 2.大街上識認漢字“川夭咬,藥啃炸,草,電卓舵,工南用,生”...
    暖小柒閱讀 148評論 0 0
  • 所受辛勞都是應(yīng)該的,今天看到那句話說:怎么樣的努力發(fā)展才能趕得上父母老去的速度掏湾」妫可能也是之前幼稚,很多東西都沒有看...
    星辰大衍閱讀 198評論 0 0