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