1. 前言
2016年, 我們維護(hù)的 iOS推流播放融合SDK KSYLive_iOS 在github上發(fā)布了40多個(gè)版本, 平均兩周發(fā)布一個(gè)新版本,經(jīng)歷了最初痛苦的全手動(dòng)版本構(gòu)建和維護(hù), 到后來慢慢搭建起來的持續(xù)集成系統(tǒng), 在這里簡要的總結(jié)一下這個(gè)搭建過程中的一些實(shí)踐經(jīng)驗(yàn)。
1.1 持續(xù)集成的作用
持續(xù)集成系統(tǒng)主要在如下兩個(gè)環(huán)節(jié)提供服務(wù):
開發(fā)階段(build), 開發(fā)人員提交代碼后, 在服務(wù)端能夠自動(dòng)對(duì)提交的版本進(jìn)行構(gòu)建和測(cè)試, 保證提交能夠編譯,并自動(dòng)測(cè)試通過的代碼可以不給同事添麻煩,提高工作效率. 對(duì)代碼審查的人來說,能減輕不少負(fù)擔(dān)。
發(fā)布階段(release), 當(dāng)階段性完成了開發(fā)任務(wù)后, 通過tag觸發(fā)版本發(fā)布, 能夠減少手動(dòng)進(jìn)行版本構(gòu)建的工作, 并減少人工引入的疏忽和錯(cuò)誤。
后面講到每個(gè)工程組件的持續(xù)集成時(shí),都需要針對(duì)這樣兩個(gè)環(huán)節(jié)分別說明:
1.2 持續(xù)集成的工具
持續(xù)集成可選的工具比較多, 比如Jenkins, Travis CI等等.由于我們內(nèi)部的版本管理工具是gitlab[http://gitlab.com], gitlab作為代碼管理倉庫, 和code review的工具. 而gitlab最近的版本中直接提供了CI的server, 可以非常方便的用起來. 權(quán)限管理, 代碼提交觸發(fā)等都變得非常自然, 我們大部分的CI工作都是通過gitlabCI進(jìn)行的.
gitlab ci Architecture
gitlab ci 的 server直接集成在了gitlab server中, 每當(dāng)我們提交代碼時(shí), ci server就會(huì)生成一個(gè)構(gòu)建任務(wù), 在gitlab的頁面上可以很直觀的追蹤到任務(wù)的執(zhí)行情況和執(zhí)行結(jié)果.
gitlab ci runner 是一個(gè)獨(dú)立的應(yīng)用程序, 跑在worker設(shè)備上. 他負(fù)責(zé)從ci server 領(lǐng)取一個(gè)任務(wù)并完成它.
gitlab ci的基本使用方法可以參考gitlab 自己的指南, 或者簡書上搜搜中文版的圖文教程.
2. 視頻云SDK 持續(xù)集成實(shí)施
KSYLive_iOS 是一個(gè)提供了在手機(jī)上直播推流和播放的SDK, 在開發(fā)過程中, 我們有不同的同事分別維護(hù)demo代碼,推流代碼,播放內(nèi)核代碼和底層公用部分代碼, 只是最后編譯打包為一個(gè)完善的SDK提供給客戶使用. 因此開發(fā)過程中涉及到每個(gè)模塊自身的編譯測(cè)試,以及多個(gè)模塊之間的版本同步更新的問題.
2.1 SDK 項(xiàng)目結(jié)構(gòu)
SDK arch
上圖中,每個(gè)框都是一個(gè)gitlab上的代碼倉庫,存放著代碼或編譯后的二進(jìn)制文件
codecs: 其實(shí)是多個(gè)開源項(xiàng)目的倉庫, 包括aac,264等音視頻的編碼器, 作為FFMpeg的依賴項(xiàng).
FFMpeg: 為推流和播放依賴的多媒體框架
libyuv: 對(duì)圖像進(jìn)行顏色空間轉(zhuǎn)換的工具庫
KSYCommon: 項(xiàng)目中推流和播放的公共代碼
GPUImage: GPU圖像處理的框架
KSYStreamer: 推流相關(guān)代碼
KSYPlayer: 播放相關(guān)代碼
KSYGPUFilter: 美顏濾鏡相關(guān)代碼
libksylivedep: 所有代碼編譯后的二進(jìn)制庫文件和頭文件
KSYLive_iOS: 最終對(duì)外發(fā)布的SDK庫和demo
整個(gè)持續(xù)集成系統(tǒng)要保證的是KSYLive_iOS中demo能夠順利build 通過和功能正常.
持續(xù)集成系統(tǒng)的中樞則是 libksylivedep, KSYLive_iOS中的SDK本質(zhì)上是將libksylivedep中的靜態(tài)庫進(jìn)行組合得到的, 其他項(xiàng)目的git倉庫中都只存放代碼.
libksylivedep 主要是因?yàn)橛幸恍┑谌綆斓臉?gòu)建過程比較耗時(shí),且改動(dòng)頻率不高, 將其構(gòu)建的結(jié)果直接存放到libksylivedep中, 能夠起到節(jié)約時(shí)間的作用. 并且因?yàn)橛衛(wèi)ibksylivedep的隔離, 每個(gè)項(xiàng)目的持續(xù)集成任務(wù)更加清晰,減少了項(xiàng)目依賴帶來的復(fù)雜性.
2.2 SDK 持續(xù)集成結(jié)構(gòu)
整個(gè)SDK的持續(xù)集成簡單來說就是給以上的每個(gè)項(xiàng)目都添加CI配置. 這里一共有4種CI任務(wù)
代碼倉庫的build任務(wù)
每當(dāng)開發(fā)人員對(duì)SDK代碼進(jìn)行了修改, 提交代碼到gitlab之后, 都會(huì)觸發(fā)此任務(wù). 任務(wù)內(nèi)容主要是保證SDK代碼能夠順利編譯出對(duì)應(yīng)的靜態(tài)庫文件, 并保證sdk更新到KSYLive_iOS中去之后,demo能夠也是正常工作的.
這里有一些代碼庫的是沒有依賴項(xiàng)的, build任務(wù)比較簡單, 可以直接完成.
而有的代碼庫則需要依賴其他庫, 這個(gè)依賴關(guān)系主要是通過libksylivedep來解決的.
代碼倉庫的release任務(wù)
當(dāng)每個(gè)迭代完成的時(shí)候, 一個(gè)代碼倉庫的所有改動(dòng)匯總后打上對(duì)應(yīng)版本號(hào)的tag, 可以發(fā)起一次release任務(wù). release任務(wù)是在build通過的前提下, 將build的結(jié)果, 發(fā)布到libksylivedep中. 在libksylivedep的master分支的基礎(chǔ)上, 更新本項(xiàng)目對(duì)應(yīng)的靜態(tài)庫和頭文件, 發(fā)起合并請(qǐng)求.
KSYLive_iOS 的build任務(wù)
KSYLive_iOS 的build任務(wù)主要是用于檢查demo代碼修改和SDK靜態(tài)庫更新的正確性.
KSYLive_iOS 的release任務(wù)
當(dāng)完成一個(gè)迭代, 對(duì)應(yīng)版本通過了QA的測(cè)試時(shí), 可以出發(fā)release任務(wù), 將SDK和demo更新到對(duì)外的github上.
3. 總結(jié)
視頻云SDK iOS持續(xù)集成項(xiàng)目在開發(fā)階段能夠保證每次代碼提交的質(zhì)量, 能夠提前發(fā)現(xiàn)自己引入的破壞開發(fā)環(huán)境的"壞"提交, 對(duì)提高開發(fā)效率有比較大的幫助. 在版本發(fā)布階段, 可以將大量重復(fù)的操作自動(dòng)完成,將發(fā)布環(huán)境和開發(fā)環(huán)境分離, 減少人為發(fā)布引入的不確定性問題。
在視頻云 iOS SDK這個(gè)依賴關(guān)系比較復(fù)雜的項(xiàng)目中, 通過引入預(yù)編譯二進(jìn)制庫存放的倉庫, 減少了項(xiàng)目的構(gòu)建時(shí)間, 隔離了依賴關(guān)系。
作者:金山視頻云
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。
網(wǎng)頁標(biāo)題:視頻云SDKiOS持續(xù)集成項(xiàng)目實(shí)踐-創(chuàng)新互聯(lián)
本文路徑:http://jinyejixie.com/article24/ccsjje.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供App設(shè)計(jì)、網(wǎng)站排名、靜態(tài)網(wǎng)站、電子商務(wù)、外貿(mào)網(wǎng)站建設(shè)、做網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容