视频云SDK iOS持续集成项目实践

1. 前言

2016年, 我们维护的 iOS推流播放融合SDK KSYLive_iOS 在github上发布了40多个版本, 平均两周发布一个新版本,
经历了最初痛苦的全手动版本构建和维护, 到后来慢慢搭建起来的持续集成系统, 在这里简要的总结一下这个搭建过程中的一些实践经验.

1.1 持续集成的作用

持续集成系统主要在如下两个环节提供服务:

  • 开发阶段(build), 开发人员提交代码后, 在服务端能够自动对提交的版本进行构建和测试, 保证提交能够编译,并自动测试通过的代码可以不给同事添麻烦,提高工作效率. 对代码审查的人来说,能减轻不少负担.
  • 发布阶段(release), 当阶段性完成了开发任务后, 通过tag触发版本发布, 能够减少手动进行版本构建的工作, 并减少人工引入的疏忽和错误.

后面讲到每个工程组件的持续集成时,都需要针对这样两个环节分别说明.

1.2 持续集成的工具

持续集成可选的工具比较多, 比如Jenkins, Travis CI等等.由于我们内部的版本管理工具是gitlab[http://gitlab.com], gitlab作为代码管理仓库, 和code review的工具. 而gitlab最近的版本中直接提供了CI的server, 可以非常方便的用起来. 权限管理, 代码提交触发等都变得非常自然, 我们大部分的CI工作都是通过gitlabCI进行的.

gitlab ci Architecture

  • gitlab ci 的 server直接集成在了gitlab server中, 每当我们提交代码时, ci server就会生成一个构建任务, 在gitlab的页面上可以很直观的追踪到任务的执行情况和执行结果.
  • gitlab ci runner 是一个独立的应用程序, 跑在worker设备上. 他负责从ci server 领取一个任务并完成它.

gitlab ci的基本使用方法可以参考gitlab 自己的指南, 或者简书上搜搜中文版的图文教程.

2. 视频云SDK 持续集成实施

KSYLive_iOS 是一个提供了在手机上直播推流和播放的SDK, 在开发过程中, 我们有不同的同事分别维护demo代码,推流代码,播放内核代码和底层公用部分代码, 只是最后编译打包为一个完善的SDK提供给客户使用. 因此开发过程中涉及到每个模块自身的编译测试,以及多个模块之间的版本同步更新的问题.

2.1 SDK 项目结构

SDK arch
SDK arch

上图中,每个框都是一个gitlab上的代码仓库,存放着代码或编译后的二进制文件

  • codecs: 其实是多个开源项目的仓库, 包括aac,264等音视频的编码器, 作为FFMpeg的依赖项.
  • FFMpeg: 为推流和播放依赖的多媒体框架
  • libyuv: 对图像进行颜色空间转换的工具库
  • KSYCommon: 项目中推流和播放的公共代码
  • GPUImage: GPU图像处理的框架
  • KSYStreamer: 推流相关代码
  • KSYPlayer: 播放相关代码
  • KSYGPUFilter: 美颜滤镜相关代码
  • libksylivedep: 所有代码编译后的二进制库文件和头文件
  • KSYLive_iOS: 最终对外发布的SDK库和demo

整个持续集成系统要保证的是KSYLive_iOS中demo能够顺利build 通过和功能正常.
持续集成系统的中枢则是 libksylivedep, KSYLive_iOS中的SDK本质上是将libksylivedep中的静态库进行组合得到的, 其他项目的git仓库中都只存放代码.
libksylivedep 主要是因为有一些第三方库的构建过程比较耗时,且改动频率不高, 将其构建的结果直接存放到libksylivedep中, 能够起到节约时间的作用. 并且因为有libksylivedep的隔离, 每个项目的持续集成任务更加清晰,减少了项目依赖带来的复杂性.

2.2 SDK 持续集成结构

整个SDK的持续集成简单来说就是给以上的每个项目都添加CI配置. 这里一共有4种CI任务

  • 代码仓库的build任务
    每当开发人员对SDK代码进行了修改, 提交代码到gitlab之后, 都会触发此任务. 任务内容主要是保证SDK代码能够顺利编译出对应的静态库文件, 并保证sdk更新到KSYLive_iOS中去之后,demo能够也是正常工作的.
    这里有一些代码库的是没有依赖项的, build任务比较简单, 可以直接完成.
    而有的代码库则需要依赖其他库, 这个依赖关系主要是通过libksylivedep来解决的.
  • 代码仓库的release任务
    当每个迭代完成的时候, 一个代码仓库的所有改动汇总后打上对应版本号的tag, 可以发起一次release任务. release任务是在build通过的前提下, 将build的结果, 发布到libksylivedep中. 在libksylivedep的master分支的基础上, 更新本项目对应的静态库和头文件, 发起合并请求.
  • KSYLive_iOS 的build任务
    KSYLive_iOS 的build任务主要是用于检查demo代码修改和SDK静态库更新的正确性.
  • KSYLive_iOS 的release任务
    当完成一个迭代, 对应版本通过了QA的测试时, 可以出发release任务, 将SDK和demo更新到对外的github上.

3. 总结

视频云SDK iOS持续集成项目在开发阶段能够保证每次代码提交的质量, 能够提前发现自己引入的破坏开发环境的"坏"提交, 对提高开发效率有比较大的帮助. 在版本发布阶段, 可以将大量重复的操作自动完成,将发布环境和开发环境分离, 减少人为发布引入的不确定性问题。
在视频云 iOS SDK这个依赖关系比较复杂的项目中, 通过引入预编译二进制库存放的仓库, 减少了项目的构建时间, 隔离了依赖关系。

转载请注明:
作者金山视频云,首发简书 Jianshu.com


欢迎大家试用金山云短视频SDK,github仓库地址:

https://github.com/ksvc/KSYLive_iOS

金山云SDK相关的QQ交流群:

  • 视频云技术交流群:574179720
  • 视频云iOS技术交流:621137661
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 151,688评论 1 330
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 64,559评论 1 273
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 101,749评论 0 226
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 42,581评论 0 191
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 50,741评论 3 271
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 39,684评论 1 192
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,122评论 2 292
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 29,847评论 0 182
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 33,441评论 0 228
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 29,939评论 2 232
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,333评论 1 242
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 27,783评论 2 236
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,275评论 3 220
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 25,830评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,444评论 0 180
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 34,553评论 2 249
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 34,618评论 2 249

推荐阅读更多精彩内容