Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
大型企业CI平台建设和实施分享           腾讯 陈小光
Agenda现状&挑战实践分享-平台建设实践分享-实施推广总结Q&A
   7年研发管理和优化经验,跨越银行、互联网等行业   目前腾讯持续交付、持续集成实践者   爱好广泛包括且不限敏捷实践,音乐,数学   微博 @v陈小光v   Mail go2cxg@vip.qq.com
现状&挑战-现状工程师>500同时进行的项目>20开发语言覆盖c,c++,php,java,以及手机平台等项目之间依赖复杂,涉及到多层循环
现状&挑战-挑战-平台同时存在CI平台五套,各自为政,平台不一,资源浪费,是否要整合?当项目代码量超过百万时,如何提升构建效率?如何管理复杂构建依赖?CI集群30台,如何能及时有效的更新工具和软件以及配置到相关环境里面?如何保证从开发-...
现状&挑战-挑战-实施BU老大们对CI理解不一,如何获取他们的支持?开发对持续构建的失败漠不关心怎么办?如何让不到五人的CI团队,高满意度的支持大于五百人团队实施CI?如何提高开发编写单元测试的积极性?底层代码随意变更提交,影响到上层...
解决方案-平台-设计思想平台设计思想: 统一平台和运维,减少维护成本和机器资源,成果共享 环境保证绝对权威,跟线上、测试、开发保持一致 提升易用性,减少用户学习成本 统一测试和上线的包出口工具尽量使用开源 Jenkins Sub...
解决方案-平台-拓扑结构
解决方案-平台-高效构建系统 基于开源scons自研的一套分布式统一构建系统  支持c++,java,probuf,swig等多种语言  代码变更后可以自动分析依赖关系  集构建,测试,静态代码检查,高亮错误显示等功能  支持增量和分...
解决方案-构建分级构建类型NightlyBuild:夜间,全量测试和构建,重建cacheCheckInBuild:CheckInSvn,增量ut,增量构建,基于cacheHandleBuild:按需,全量构建和测试,为了打包
解决方案-平台-统一接入脚本概述:统一某种类型的项目或代码的公共动作(比如编译,执行ut,静态检查,包上传等)到一个脚本或工具里面,用户只需要输入路径配置即可完成CI的配置,减少用户学习和使用成本。C++: 写好脚本ci_exec compil...
解决方案-平台-统一环境管理-puppet管理环境使用puppet做构建环境统一管理更新                    管理如下配置:                                       Hosts配置    ...
解决方案-平台-统一环境管理-Jenkins管理环节通过Jenkins本身管理构建环境,slave正在以后即可做。                         JenkinsSubversion               master  ...
解决方案-平台-presubmit方案-client模式      Subversion   CheckSvnService                   Check.py                   检查:提交的注释里面是否有...
两种Presubmit模式-Client/Server模式 验证、提交 Presubmit服务器        Source                     Control   CheckSvnService             ...
解决方案-平台-包服务器媒介                     包服务器              包服务器两分支                                       Test:用来存放从CI发过来的包,待测试 ...
解决方案-平台-报表平台jenkins构建的报表平台保存如下数据构建成功率构建时长测试覆盖率接入率等 有开源插件可支持数据报表展现!
解决方案-实施-先试点试点项目选择:交付压力小的重点项目成立联合虚拟项目组运作做好评估:缺陷率,代码质量等试点目标目标:摸索经验平台建立树立标杆建立影响透明效果取得重视
解决方案-实施-制度化接口人制度:1.需要实施CI部门指定接口人2.每个部门对应CI实施责任人3.对CI实施接口人进行trainingCI平台需求管理流程:1.把CI平台当做“产品”来做2.明确需求管理流程3.排期实现,可视化进度沉淀制度...
解决方案-实施-可视化周报:部门周报月报:整个事业部周报显示器:质量情况,放置门口
总结平台 总体架构:统一平台,包服务器,统一出口 构建平台:构建平台,管理依赖,支持分布,增量编译 公用脚本:封装复杂操作,减少dev学习和使用成本 环境管理:puppet,利用CI平台管理构建环境 Presubmit机制:pres...
Q&A
Upcoming SlideShare
Loading in …5
×

Scrum gathering 2012 shanghai 精益与持续改进分会场演讲话题: 大型企业ci平台建设和实施分享(陈小光)

1,367 views

Published on

大型企业CI平台建设和实施分享

腾讯 陈小光

Agenda
.现状&挑战
.实践分享-平台建设
.实践分享-实施推广
.总结
.Q&A

.7年研发管理和优化经验,跨越银行、互联网等行业
.目前腾讯持续交付、持续集成实践者
.爱好广泛包括且不限敏捷实践,音乐,数学
.微博 @v陈小光v
.Mail go2cxg@vip.qq.com

现状&挑战-现状

.工程师>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的配置,减少用户学习和使用
成本

Published in: Technology
  • Be the first to comment

Scrum gathering 2012 shanghai 精益与持续改进分会场演讲话题: 大型企业ci平台建设和实施分享(陈小光)

  1. 1. 大型企业CI平台建设和实施分享 腾讯 陈小光
  2. 2. Agenda现状&挑战实践分享-平台建设实践分享-实施推广总结Q&A
  3. 3.  7年研发管理和优化经验,跨越银行、互联网等行业 目前腾讯持续交付、持续集成实践者 爱好广泛包括且不限敏捷实践,音乐,数学 微博 @v陈小光v Mail go2cxg@vip.qq.com
  4. 4. 现状&挑战-现状工程师>500同时进行的项目>20开发语言覆盖c,c++,php,java,以及手机平台等项目之间依赖复杂,涉及到多层循环
  5. 5. 现状&挑战-挑战-平台同时存在CI平台五套,各自为政,平台不一,资源浪费,是否要整合?当项目代码量超过百万时,如何提升构建效率?如何管理复杂构建依赖?CI集群30台,如何能及时有效的更新工具和软件以及配置到相关环境里面?如何保证从开发->测试->上线三个步骤的源码和二进制包版本一致性?如果处理来自不同团队的对CI平台的需求?
  6. 6. 现状&挑战-挑战-实施BU老大们对CI理解不一,如何获取他们的支持?开发对持续构建的失败漠不关心怎么办?如何让不到五人的CI团队,高满意度的支持大于五百人团队实施CI?如何提高开发编写单元测试的积极性?底层代码随意变更提交,影响到上层代码怎么办?
  7. 7. 解决方案-平台-设计思想平台设计思想: 统一平台和运维,减少维护成本和机器资源,成果共享 环境保证绝对权威,跟线上、测试、开发保持一致 提升易用性,减少用户学习成本 统一测试和上线的包出口工具尽量使用开源 Jenkins Subversion Testlink
  8. 8. 解决方案-平台-拓扑结构
  9. 9. 解决方案-平台-高效构建系统 基于开源scons自研的一套分布式统一构建系统 支持c++,java,probuf,swig等多种语言 代码变更后可以自动分析依赖关系 集构建,测试,静态代码检查,高亮错误显示等功能 支持增量和分布式编译和测试 解决了构建效率和依赖管理问题其他提升构建速度方法:  使用tmpfs,IO效率基本为0,需要大内存机器  使用cache机制,比如ccache  分布式编译,比如distcc  源码分层:抽离基础库代码专人维护,包括common和thirdparty
  10. 10. 解决方案-构建分级构建类型NightlyBuild:夜间,全量测试和构建,重建cacheCheckInBuild:CheckInSvn,增量ut,增量构建,基于cacheHandleBuild:按需,全量构建和测试,为了打包
  11. 11. 解决方案-平台-统一接入脚本概述:统一某种类型的项目或代码的公共动作(比如编译,执行ut,静态检查,包上传等)到一个脚本或工具里面,用户只需要输入路径配置即可完成CI的配置,减少用户学习和使用成本。C++: 写好脚本ci_exec compile_dir=$dir1 ut_dir=$dir2 st_dir=$dir3Java(ant为例):
  12. 12. 解决方案-平台-统一环境管理-puppet管理环境使用puppet做构建环境统一管理更新 管理如下配置: Hosts配置 Puppet 构建脚本Subversion master 构建软件 Slave初始化脚本 CheckIn Slave上puppet初始化用rpm包实 现。 Puppet Puppet …WorkSpace slave1 slave1 亦可通过CI本身功能来管理环境 Jenkins提供多Slave配置功能
  13. 13. 解决方案-平台-统一环境管理-Jenkins管理环节通过Jenkins本身管理构建环境,slave正在以后即可做。 JenkinsSubversion master 通过Jenkins多Slave配置完成: 规划好SVN里面目录Conf bin等 CheckIn 在Slave机器上配置bin目录到$PATH Jenkins Jenkins … slave1 slave1修改工作区优点: 使用方便,测试通过以后直接提交到SVN即 可更新 Jenkins直接辐射到各个Slave,更新方便缺点: 没有整体视图
  14. 14. 解决方案-平台-presubmit方案-client模式 Subversion CheckSvnService Check.py 检查:提交的注释里面是否有指定加密串 通知:通过对应人 Upload.py: 1.检查是否被模块owner Codereview且被 Approved Dev工作区 2.在内存文件系统tmpfs中快速run编译和ut 3.做CodeStyle检查以及静态检查 4.成功则自动提交,在注视里面加标记 Upload.py专用提交脚本 5.失败给予提示 upload.py –i 33896 –I 后为codereview id 目的:把问题扼杀在提交到代码库之前,减少影响
  15. 15. 两种Presubmit模式-Client/Server模式 验证、提交 Presubmit服务器 Source Control CheckSvnService System Check.py 检查:提交的注释是否有指定加密串 通知:通过对应人 Dev工作区 presubmit.py脚本 检查、信息搜集、打diff、上传
  16. 16. 解决方案-平台-包服务器媒介 包服务器 包服务器两分支 Test:用来存放从CI发过来的包,待测试 Test Rel Rel:用来存放从已测的包,待发布 包服务器跟电子流串通 3 4 1 2 CI Test IDC1 CI里面执行手工打包,到包服务器test分支2 测试从包服务器取包部署测试测试环境3 得到测试通过信号后,被测通过的包自动转到rel分支4 发布系统从rel分支拉取测通过的包上线
  17. 17. 解决方案-平台-报表平台jenkins构建的报表平台保存如下数据构建成功率构建时长测试覆盖率接入率等 有开源插件可支持数据报表展现!
  18. 18. 解决方案-实施-先试点试点项目选择:交付压力小的重点项目成立联合虚拟项目组运作做好评估:缺陷率,代码质量等试点目标目标:摸索经验平台建立树立标杆建立影响透明效果取得重视
  19. 19. 解决方案-实施-制度化接口人制度:1.需要实施CI部门指定接口人2.每个部门对应CI实施责任人3.对CI实施接口人进行trainingCI平台需求管理流程:1.把CI平台当做“产品”来做2.明确需求管理流程3.排期实现,可视化进度沉淀制度1.把CI实施框架和FAQ沉淀到wiki2.每周专人值班辅助接口人3.常见问题沉淀到wiki合作,而非推广
  20. 20. 解决方案-实施-可视化周报:部门周报月报:整个事业部周报显示器:质量情况,放置门口
  21. 21. 总结平台 总体架构:统一平台,包服务器,统一出口 构建平台:构建平台,管理依赖,支持分布,增量编译 公用脚本:封装复杂操作,减少dev学习和使用成本 环境管理:puppet,利用CI平台管理构建环境 Presubmit机制:presubmit,codereview确保质量实施 试点先行:摸索经验,建立平台,树立标杆,扩大影响 推广策略:沉淀wiki,职责明确,值班制度,合作态度 报告和奖励机制:数据可视化
  22. 22. Q&A

×