大型公司颁滨平台建设和实施分享
腾讯 陈小光
Agenda
.现状&挑战
.实践分享-平台建设
.实践分享-实施推广
.总结
.Q&A
.7年研发管理和优化经验,跨越银行、互联网等行业
.目前腾讯持续交付、持续集成实践者
.爱好广泛包括且不限敏捷实践,音乐,数学
.微博 @v陈小光v
.Mail go2cxg@vip.
现状&挑战-现状
.工程师>500
.同时进行的项目>20
.开发语言覆盖c,c++,php,java,以及手机平台等
.项目之间依赖复杂,涉及到多层循环
现状&挑战-挑战-平台
.同时存在CI平台五套,各自为政,平台不一,资源浪费,是否要整合?
.当项目代码量超过百万时,如何提升构建效率?如何管理复杂构建依赖?
.CI集群30台,如何能及时有效的更新工具和软件以及配置到相关环境里面?
.如何保证从开发->测试->上线三个步骤的源码和二进制包版本一致性?
.如果处理来自不同团队的对CI平台的需求?
现状&挑战-挑战-实施
.BU老大们对CI理解不一,如何获取他们的支持?
.开发对持续构建的失败漠不关心怎么办?
.如何让不到五人的CI团队,高满意度的支持大于五百人团队实施CI?
.如何提高开发编写单元测试的积极性?
.底层代码随意变更提交,影响到上层代码怎么办?
解决方案-平台-设计思想
.平台设计思想:
.统一平台和运维,减少维护成本和机器资源,成果共享
.环境保证绝对权威,跟线上、测试、开发保持一致
.提升易用性,减少用户学习成本
.统一测试和上线的包出口
.工具尽量使用开源
.Jenkins
.Subversion
.Testlink
解决方案-平台-拓扑结构
new.jpg
解决方案-平台-高效构建系统
. 基于开源scons自研的一套分布式统一构建系统
.支持c++,java,probuf,swig等多种语言
.代码变更后可以自动分析依赖关系
.集构建,测试,静态代码检查,高亮错误显示等功能
.支持增量和分布式编译和测试
. 解决了构建效率和依赖管理问题
.其他提升构建速度方法:
. 使用tmpfs,IO效率基本为0,需要大内存机器
. 使用cache机制,比如ccache
. 分布式编译,比如distcc
. 源码分层:抽离基础库代码专人维护,包括common和thirdparty
解决方案-构建分级
构建类型
.NightlyBuild:夜间,全量测试和构建,重建cache
.CheckInBuild:CheckInSvn,增量ut,增量构建,
基于cache
.HandleBuild:按需,全量构建和测试,为了打包
解决方案-平台-统一接入脚本
概述:统一某种类型的项目或代码的公共动作(比如编译,执行ut,静态检查,包上传等)到一
个脚本或工具里面,用户只需要输入路径配置即可完成CI的配置,减少用户学习和使用
成本