狠狠撸

狠狠撸Share a Scribd company logo
大型公司 CI 平台建设和实施分
         享

            腾讯 陈小光
A genda

?现状 & 挑战
?实践分享 - 平台建设
?实践分享 - 实施推广
?总结
?Q&A
?   7 年研发管理和优化经验,跨越银行、互联网等行业
?   目前腾讯持续交付、持续集成实践者
?   爱好广泛包括且不限敏捷实践,音乐,数学
?   微博 @   v陈小光v
?   Mail go2cxg@vip.
现状 & 挑战 - 现状
?工程师 > 500
?同时进行的项目 > 20
?开发语言覆盖 c,c+ + ,php,j va,以及手机平台等
                    a
?项目之间依赖复杂,涉及到多层循环
现状 & 挑战 - 挑战 - 平台

?同时存在 CI 平台五套,各自为政,平台不一,资源浪费,是否要整合?

?当项目代码量超过百万时,如何提升构建效率?如何管理复杂构建依赖?

?CI 集群 30 台,如何能及时有效的更新工具和软件以及配置到相关环境里面?

?如何保证从开发 -> 测试 -> 上线三个步骤的源码和二进制包版本一致性?

?如果处理来自不同团队的对 CI 平台的需求?
现状 & 挑战 - 挑战 - 实施

?B U 老大们对 CI 理解不一,如何获取他们的支持?


?开发对持续构建的失败漠不关心怎么办?


?如何让不到五人的 CI 团队,高满意度的支持大于五百人团队实施
CI ?


?如何提高开发编写单元测试的积极性?


?底层代码随意变更提交,影响到上层代码怎么办?
解决方案 - 平台 - 设计思想

?平台设计思想 :
 ?统一平台和运维,减少维护成本和机器资源,成果共享
 ?环境保证绝对权威,跟线上、测试、开发保持一致
 ?提升易用性,减少用户学习成本
 ?统一测试和上线的包出口

?工具尽量使用开源
 ?Jenkins
 ?Subversion
 ?T estlink
解决方案 - 平台 - 拓扑结构
解决方案 - 平台 - 高效构建系统

?   基于开源 scons 自研的一套分布式统一构建系统
    ?支持 c+ + ,j va
              a ,probuf,swig 等多种语言
    ?代码变更后可以自动分析依赖关系
    ?集构建,测试,静态代码检查,高亮错误显示等功能
    ?支持增量和分布式编译和测试

?   解决了构建效率和依赖管理问题

?其他提升构建速度方法 :
  ? 使用 tmpfs,I O 效率基本为 0 ,需要大内存机器
  ? 使用 ca 机制,比如 cca
         che          che
  ? 分布式编译,比如 distcc
  ? 源码分层 : 抽离基础库代码专人维护 , 包括 common 和 thirdparty
解决方案 - 构建分级

构建类型
?NightlyB uild: 夜间,全量测试和构建,重建 cache

?CheckI nB uild:CheckI nSvn ,增量 ut,增量构建,基于
cache

?HandleB uild: 按需,全量构建和测试,为了打包
解决方案 - 平台 - 统一接入脚本

概述: 统一某种类型的项目或代码的公共动作 ( 比如编译 , 执行 ut, 静态检查 , 包上传等 )
到一个脚本或工具里面,用户只需要输入路径配置即可完成 CI 的配置,减少用户学习和
使用成本。

C+ + :
  写好脚本 ci_exec compil
                    e_dir= $dir1 ut_dir= $dir2 s_dir= $dir3
                                               t

Java( ant 为例 ) :
解决方案 - 平台 - 统一环境管理 -puppet 管理环境

使用 puppet做构建环境统一管理更新                   管理如下配置:
                                       ?Hosts配置
                         Puppet        ?构建脚本
Subversion               master        ?构建软件
                                       ?Sla 初始化脚本
                                           ve

      CheckIn
                                       Sla 上 puppet初始化用 rpm 包实现。
                                          ve
                Puppet    Puppet
                                   …
WorkSpace       slave1    slave1
                                       亦可通过 CI 本身功能来管理环境
                                       Jenkins提供多 Sla 配置功能
                                                     ve
解决方案 - 平台 - 统一环境管理 -Jenkins 管理环节

通过 Jenkins 本身管理构建环境, slave 正在以后即可做。

                         Jenkins
Subversion               master
                                        通过 Jenkins 多 S lave配置完成:
                                        ?规划好 SVN 里面目录 Conf bin 等
     CheckIn                            ?在 Sla 机器上配置 bin 目录到 $PAT H
                                              ve

               Jenkins    Jenkins
                                    …
                slave1    slave1
 修改工作区




?优点:
   ?使用方便,测试通过以后直接提交到 SVN 即
   可更新
   ?Jenkins直接辐射到各个 Sla ,更新方便
                      ve
?缺点:
   ?没有整体视图
解决方案 - 平台 -presubm 方案 -client 模式
                  it


      Subversion      CheckSvnService

                    Check.py
                    ?检查 : 提交的注释里面是否有指定加密串
                    ?通知 : 通过对应人


                     Upload.py :
                     1 . 检查是否被模块 owner Codereview 且被 Approved
                     2. 在内存文件系统 tmpfs中快速 run 编译和 ut
   D ev 工作区          3. 做 CodeStyle 检查以及静态检查
                     4. 成功则自动提交 , 在注视里面加标记
                     5. 失败给予提示
 Upload.py 专用提交脚本    upl oad.py –i 33896 –I 后为 codereview id
                     目的:把问题扼杀在提交到代码库之前,减少影
                     响
两种 Presubm 模式 -Client/S erver 模式
          it
 ?验证、提交

  Presubmit服务器        Source
                      Control      CheckSvnService
                      System
                                Check.py
                                ?检查 : 提交的注释是否有指定加密串
                                ?通知 : 通过对应人




   D ev 工作区
 presubmit.py 脚本
 ?检查、信息搜集、打 diff、上传
解决方案 - 平台 - 包服务器媒介

                      包服务器                包服务器两分支
                                          ?T est: 用来存放从 CI 发过来的包,待测试
              Test              Rel       ?Rel: 用来存放从已测的包,待发布
                                          包服务器跟电子流串通
                          3
                                      4
       1              2


 CI                  Test                 IDC


 1   CI 里面执行手工打包,到包服务器 test分支

 2   测试从包服务器取包部署测试测试环境

 3   得到测试通过信号后,被测通过的包自动转到 rel分支

 4   发布系统从 rel分支拉取测通过的包上线
解决方案 - 平台 - 报表平台
jenkins 构建的报表平台
保存如下数据
?构建成功率
?构建时长
?测试覆盖率
?接入率等




 有开源插件可支持数据报表展现
 !
解决方案 - 实施 - 先试点

?试点项目选择 :
?交付压力小的重点项目
?成立联合虚拟项目组运作
?做好评估 : 缺陷率 , 代码质量等


?试点目标目标 :
?摸索经验
?平台建立
?树立标杆
?建立影响
?透明效果
?取得重视
解决方案 - 实施 - 制度化

?接口人制度 :
1 . 需要实施 CI 部门指定接口人
2. 每个部门对应 CI 实施责任人
3. 对 CI 实施接口人进行 training

?CI 平台需求管理流程 :
1 . 把 CI 平台当做“产物”来做
2. 明确需求管理流程
3. 排期实现,可视化进度

?沉淀制度
1 . 把 CI 实施框架和 FAQ 沉淀到 wiki
2. 每周专人值班辅助接口人
3. 常见问题沉淀到 wiki

?合作,而非推广
解决方案 - 实施 - 可视化
?周报 : 部门周报
?月报 : 整个事业部周报
?显示器 : 质量情况 , 放置门口
总结

?平台
 ?总体架构:统一平台,包服务器,统一出口
 ?构建平台:构建平台,管理依赖,支持分布,增量编译
 ?公用脚本:封装复杂操作,减少 dev 学习和使用成本
 ?环境管理: puppet ,利用 CI 平台管理构建环境
 ?Presubmit 机制: presubmit , codereview 确保质量



?实施
 ?试点先行:摸索经验,建立平台,树立标杆,扩大影响
 ?推广策略:沉淀 wiki ,职责明确,值班制度,合作态度
 ?报告和奖励机制:数据可视化
Q&A

More Related Content

What's hot (20)

Docker
DockerDocker
Docker
旭 張
?
Docker 基礎介紹與實戰
Docker 基礎介紹與實戰Docker 基礎介紹與實戰
Docker 基礎介紹與實戰
Bo-Yi Wu
?
用 Docker 改善團隊合作模式
用 Docker 改善團隊合作模式用 Docker 改善團隊合作模式
用 Docker 改善團隊合作模式
Bo-Yi Wu
?
使用搁辫尘&补尘辫;测耻尘进行基础软件管理
使用搁辫尘&补尘辫;测耻尘进行基础软件管理使用搁辫尘&补尘辫;测耻尘进行基础软件管理
使用搁辫尘&补尘辫;测耻尘进行基础软件管理
haiyuan ning
?
Docker 淺入淺出
Docker 淺入淺出Docker 淺入淺出
Docker 淺入淺出
Miles Chou
?
Oprofile linux
Oprofile linuxOprofile linux
Oprofile linux
Feng Yu
?
企業導入微服務實戰 - updated
企業導入微服務實戰 - updated企業導入微服務實戰 - updated
企業導入微服務實戰 - updated
Paul Chao
?
系統程式 -- 第 1 章
系統程式 -- 第 1 章系統程式 -- 第 1 章
系統程式 -- 第 1 章
鍾誠 陳鍾誠
?
《保哥線上講堂》打造一個具有 Linux 溫度的 Windows 命令提示字元工具
《保哥線上講堂》打造一個具有 Linux 溫度的 Windows 命令提示字元工具《保哥線上講堂》打造一個具有 Linux 溫度的 Windows 命令提示字元工具
《保哥線上講堂》打造一個具有 Linux 溫度的 Windows 命令提示字元工具
Will Huang
?
系統程式 -- 為何撰寫此書
系統程式 -- 為何撰寫此書系統程式 -- 為何撰寫此書
系統程式 -- 為何撰寫此書
鍾誠 陳鍾誠
?
广宣学堂: 企業導入微服務實戰
广宣学堂: 企業導入微服務實戰广宣学堂: 企業導入微服務實戰
广宣学堂: 企業導入微服務實戰
Paul Chao
?
Ansible 101
Ansible 101Ansible 101
Ansible 101
YI-CHING WU
?
Debian 套件打包教學指南 v0.19 - 繁體中文翻譯
Debian 套件打包教學指南 v0.19 - 繁體中文翻譯Debian 套件打包教學指南 v0.19 - 繁體中文翻譯
Debian 套件打包教學指南 v0.19 - 繁體中文翻譯
SZ Lin
?
Kafka in Depth
Kafka in DepthKafka in Depth
Kafka in Depth
YI-CHING WU
?
NCURSES Programming HOWTO
NCURSES Programming HOWTONCURSES Programming HOWTO
NCURSES Programming HOWTO
eastsky
?
Dev-Ops与Docker的最佳实践 QCon2016 北京站演讲
Dev-Ops与Docker的最佳实践 QCon2016 北京站演讲Dev-Ops与Docker的最佳实践 QCon2016 北京站演讲
Dev-Ops与Docker的最佳实践 QCon2016 北京站演讲
ChinaNetCloud
?
Software Engineer Talk
Software Engineer TalkSoftware Engineer Talk
Software Engineer Talk
Larry Cai
?
Docker Build
Docker BuildDocker Build
Docker Build
Miles Chou
?
顿辞肠办别谤基础
顿辞肠办别谤基础顿辞肠办别谤基础
顿辞肠办别谤基础
國昭 張
?
Docker 基礎介紹與實戰
Docker 基礎介紹與實戰Docker 基礎介紹與實戰
Docker 基礎介紹與實戰
Bo-Yi Wu
?
用 Docker 改善團隊合作模式
用 Docker 改善團隊合作模式用 Docker 改善團隊合作模式
用 Docker 改善團隊合作模式
Bo-Yi Wu
?
使用搁辫尘&补尘辫;测耻尘进行基础软件管理
使用搁辫尘&补尘辫;测耻尘进行基础软件管理使用搁辫尘&补尘辫;测耻尘进行基础软件管理
使用搁辫尘&补尘辫;测耻尘进行基础软件管理
haiyuan ning
?
Docker 淺入淺出
Docker 淺入淺出Docker 淺入淺出
Docker 淺入淺出
Miles Chou
?
Oprofile linux
Oprofile linuxOprofile linux
Oprofile linux
Feng Yu
?
企業導入微服務實戰 - updated
企業導入微服務實戰 - updated企業導入微服務實戰 - updated
企業導入微服務實戰 - updated
Paul Chao
?
《保哥線上講堂》打造一個具有 Linux 溫度的 Windows 命令提示字元工具
《保哥線上講堂》打造一個具有 Linux 溫度的 Windows 命令提示字元工具《保哥線上講堂》打造一個具有 Linux 溫度的 Windows 命令提示字元工具
《保哥線上講堂》打造一個具有 Linux 溫度的 Windows 命令提示字元工具
Will Huang
?
系統程式 -- 為何撰寫此書
系統程式 -- 為何撰寫此書系統程式 -- 為何撰寫此書
系統程式 -- 為何撰寫此書
鍾誠 陳鍾誠
?
广宣学堂: 企業導入微服務實戰
广宣学堂: 企業導入微服務實戰广宣学堂: 企業導入微服務實戰
广宣学堂: 企業導入微服務實戰
Paul Chao
?
Debian 套件打包教學指南 v0.19 - 繁體中文翻譯
Debian 套件打包教學指南 v0.19 - 繁體中文翻譯Debian 套件打包教學指南 v0.19 - 繁體中文翻譯
Debian 套件打包教學指南 v0.19 - 繁體中文翻譯
SZ Lin
?
NCURSES Programming HOWTO
NCURSES Programming HOWTONCURSES Programming HOWTO
NCURSES Programming HOWTO
eastsky
?
Dev-Ops与Docker的最佳实践 QCon2016 北京站演讲
Dev-Ops与Docker的最佳实践 QCon2016 北京站演讲Dev-Ops与Docker的最佳实践 QCon2016 北京站演讲
Dev-Ops与Docker的最佳实践 QCon2016 北京站演讲
ChinaNetCloud
?
Software Engineer Talk
Software Engineer TalkSoftware Engineer Talk
Software Engineer Talk
Larry Cai
?
顿辞肠办别谤基础
顿辞肠办别谤基础顿辞肠办别谤基础
顿辞肠办别谤基础
國昭 張
?

Viewers also liked (17)

ccs day
ccs dayccs day
ccs day
Joan Rajah
?
SEO Training in Hyderabad | SEO Classes in Hyderbad | SEO Coaching in Hyde...
SEO Training in Hyderabad |  SEO  Classes in Hyderbad | SEO Coaching in  Hyde...SEO Training in Hyderabad |  SEO  Classes in Hyderbad | SEO Coaching in  Hyde...
SEO Training in Hyderabad | SEO Classes in Hyderbad | SEO Coaching in Hyde...
Prasad Reddy
?
Cara order
Cara orderCara order
Cara order
deasy76
?
Cable Failed Down On The Earth
Cable Failed Down On The EarthCable Failed Down On The Earth
Cable Failed Down On The Earth
web2020
?
Aaa
AaaAaa
Aaa
Cuong Nguyen
?
White Paper: Smart Style Office as iSCSI Target for Storage Array and Storage...
White Paper: Smart Style Office as iSCSI Target for Storage Array and Storage...White Paper: Smart Style Office as iSCSI Target for Storage Array and Storage...
White Paper: Smart Style Office as iSCSI Target for Storage Array and Storage...
247 Invest
?
Carolina  y tomásCarolina  y tomás
Carolina y tomás
Quinto A BN
?
4septiembre1921se venden enseres4septiembre1921se venden enseres
4septiembre1921se venden enseres
VESCELIA
?
Lima 2009
Lima 2009Lima 2009
Lima 2009
charles1010
?
Erdo?an ve abd basinindaki? kari?katürleri?
Erdo?an ve abd basinindaki? kari?katürleri?Erdo?an ve abd basinindaki? kari?katürleri?
Erdo?an ve abd basinindaki? kari?katürleri?
addgenelmerkezi
?
Biblioteca a Medellín, Colombia (G. Mazzanti) Marina Rosselló Pe?a, Maria Sán...
Biblioteca a Medellín, Colombia (G. Mazzanti) Marina Rosselló Pe?a, Maria Sán...Biblioteca a Medellín, Colombia (G. Mazzanti) Marina Rosselló Pe?a, Maria Sán...
Biblioteca a Medellín, Colombia (G. Mazzanti) Marina Rosselló Pe?a, Maria Sán...
mariasn1
?
EIU Global Forecast April 2012
EIU Global Forecast April 2012EIU Global Forecast April 2012
EIU Global Forecast April 2012
The Economist Media Businesses
?
Creamos un blogCreamos un blog
Creamos un blog
Francisco Mu?oz de la Pe?a
?
MSLesson 1 (Ques)
MSLesson 1 (Ques)MSLesson 1 (Ques)
MSLesson 1 (Ques)
Suki Chen
?
ティファニーのジュエリーティファニーのジュエリーは
ティファニーのジュエリーティファニーのジュエリーはティファニーのジュエリーティファニーのジュエリーは
ティファニーのジュエリーティファニーのジュエリーは
luhan506
?
SEO Training in Hyderabad | SEO Classes in Hyderbad | SEO Coaching in Hyde...
SEO Training in Hyderabad |  SEO  Classes in Hyderbad | SEO Coaching in  Hyde...SEO Training in Hyderabad |  SEO  Classes in Hyderbad | SEO Coaching in  Hyde...
SEO Training in Hyderabad | SEO Classes in Hyderbad | SEO Coaching in Hyde...
Prasad Reddy
?
Cable Failed Down On The Earth
Cable Failed Down On The EarthCable Failed Down On The Earth
Cable Failed Down On The Earth
web2020
?
White Paper: Smart Style Office as iSCSI Target for Storage Array and Storage...
White Paper: Smart Style Office as iSCSI Target for Storage Array and Storage...White Paper: Smart Style Office as iSCSI Target for Storage Array and Storage...
White Paper: Smart Style Office as iSCSI Target for Storage Array and Storage...
247 Invest
?
Carolina  y tomásCarolina  y tomás
Carolina y tomás
Quinto A BN
?
4septiembre1921se venden enseres4septiembre1921se venden enseres
4septiembre1921se venden enseres
VESCELIA
?
Erdo?an ve abd basinindaki? kari?katürleri?
Erdo?an ve abd basinindaki? kari?katürleri?Erdo?an ve abd basinindaki? kari?katürleri?
Erdo?an ve abd basinindaki? kari?katürleri?
addgenelmerkezi
?
Biblioteca a Medellín, Colombia (G. Mazzanti) Marina Rosselló Pe?a, Maria Sán...
Biblioteca a Medellín, Colombia (G. Mazzanti) Marina Rosselló Pe?a, Maria Sán...Biblioteca a Medellín, Colombia (G. Mazzanti) Marina Rosselló Pe?a, Maria Sán...
Biblioteca a Medellín, Colombia (G. Mazzanti) Marina Rosselló Pe?a, Maria Sán...
mariasn1
?
MSLesson 1 (Ques)
MSLesson 1 (Ques)MSLesson 1 (Ques)
MSLesson 1 (Ques)
Suki Chen
?
ティファニーのジュエリーティファニーのジュエリーは
ティファニーのジュエリーティファニーのジュエリーはティファニーのジュエリーティファニーのジュエリーは
ティファニーのジュエリーティファニーのジュエリーは
luhan506
?

Similar to Scrum gathering 2012 Shanghai_精益与持续改进分会场演讲话题: 大型公司ci平台建设和实施分享(陈小光) (20)

PyCon China 2012 孙毅
PyCon China 2012 孙毅PyCon China 2012 孙毅
PyCon China 2012 孙毅
Yi Sun
?
02.辫测迟丑辞苍.开发最佳实践
02.辫测迟丑辞苍.开发最佳实践02.辫测迟丑辞苍.开发最佳实践
02.辫测迟丑辞苍.开发最佳实践
Na Lee
?
持续交付最佳实践——百度技术沙龙201110
持续交付最佳实践——百度技术沙龙201110持续交付最佳实践——百度技术沙龙201110
持续交付最佳实践——百度技术沙龙201110
Qiao Liang
?
Bitbucket pipeline CI
Bitbucket pipeline CIBitbucket pipeline CI
Bitbucket pipeline CI
Zero Huang
?
Pm 04 华胜天成openstack实践汇报-20120808
Pm 04 华胜天成openstack实践汇报-20120808Pm 04 华胜天成openstack实践汇报-20120808
Pm 04 华胜天成openstack实践汇报-20120808
OpenCity Community
?
Continuous integration
Continuous integrationContinuous integration
Continuous integration
netdbncku
?
笔耻辫辫别迟安装总结
笔耻辫辫别迟安装总结笔耻辫辫别迟安装总结
笔耻辫辫别迟安装总结
Yiwei Ma
?
从运维系统的开发谈安全架构设计
从运维系统的开发谈安全架构设计从运维系统的开发谈安全架构设计
从运维系统的开发谈安全架构设计
mysqlops
?
Bst svn专项培训
Bst svn专项培训Bst svn专项培训
Bst svn专项培训
Wu Liang
?
打造面向服务的敏捷团队 Q con-beijing2012
打造面向服务的敏捷团队 Q con-beijing2012打造面向服务的敏捷团队 Q con-beijing2012
打造面向服务的敏捷团队 Q con-beijing2012
Qiao Liang
?
service-oriented agile team-Q con-beijing2012
service-oriented agile team-Q con-beijing2012service-oriented agile team-Q con-beijing2012
service-oriented agile team-Q con-beijing2012
Qiao Liang
?
自由软体铸造场冲20111023冲厂耻产惫别谤蝉颈辞苍版本控制系统之操作冲曾义峰(补苍迟)
自由软体铸造场冲20111023冲厂耻产惫别谤蝉颈辞苍版本控制系统之操作冲曾义峰(补苍迟)自由软体铸造场冲20111023冲厂耻产惫别谤蝉颈辞苍版本控制系统之操作冲曾义峰(补苍迟)
自由软体铸造场冲20111023冲厂耻产惫别谤蝉颈辞苍版本控制系统之操作冲曾义峰(补苍迟)
OpenFoundry
?
Track2 -刘继伟--openstack in gamewave
Track2 -刘继伟--openstack in gamewaveTrack2 -刘继伟--openstack in gamewave
Track2 -刘继伟--openstack in gamewave
OpenCity Community
?
Cfengine培训文档 刘天斯
Cfengine培训文档 刘天斯Cfengine培训文档 刘天斯
Cfengine培训文档 刘天斯
liuts
?
Nae client(using Node.js to create shell cmd)
Nae client(using Node.js to create shell cmd)Nae client(using Node.js to create shell cmd)
Nae client(using Node.js to create shell cmd)
fisher zheng
?
惭补惫别苍初级培训
惭补惫别苍初级培训惭补惫别苍初级培训
惭补惫别苍初级培训
Cody Zhang
?
Track2 -何斌--openstack 在京东的应用实践
Track2 -何斌--openstack 在京东的应用实践Track2 -何斌--openstack 在京东的应用实践
Track2 -何斌--openstack 在京东的应用实践
OpenCity Community
?
Subversion
SubversionSubversion
Subversion
i7Xh
?
PyCon China 2012 孙毅
PyCon China 2012 孙毅PyCon China 2012 孙毅
PyCon China 2012 孙毅
Yi Sun
?
02.辫测迟丑辞苍.开发最佳实践
02.辫测迟丑辞苍.开发最佳实践02.辫测迟丑辞苍.开发最佳实践
02.辫测迟丑辞苍.开发最佳实践
Na Lee
?
持续交付最佳实践——百度技术沙龙201110
持续交付最佳实践——百度技术沙龙201110持续交付最佳实践——百度技术沙龙201110
持续交付最佳实践——百度技术沙龙201110
Qiao Liang
?
Bitbucket pipeline CI
Bitbucket pipeline CIBitbucket pipeline CI
Bitbucket pipeline CI
Zero Huang
?
Pm 04 华胜天成openstack实践汇报-20120808
Pm 04 华胜天成openstack实践汇报-20120808Pm 04 华胜天成openstack实践汇报-20120808
Pm 04 华胜天成openstack实践汇报-20120808
OpenCity Community
?
Continuous integration
Continuous integrationContinuous integration
Continuous integration
netdbncku
?
笔耻辫辫别迟安装总结
笔耻辫辫别迟安装总结笔耻辫辫别迟安装总结
笔耻辫辫别迟安装总结
Yiwei Ma
?
从运维系统的开发谈安全架构设计
从运维系统的开发谈安全架构设计从运维系统的开发谈安全架构设计
从运维系统的开发谈安全架构设计
mysqlops
?
Bst svn专项培训
Bst svn专项培训Bst svn专项培训
Bst svn专项培训
Wu Liang
?
打造面向服务的敏捷团队 Q con-beijing2012
打造面向服务的敏捷团队 Q con-beijing2012打造面向服务的敏捷团队 Q con-beijing2012
打造面向服务的敏捷团队 Q con-beijing2012
Qiao Liang
?
service-oriented agile team-Q con-beijing2012
service-oriented agile team-Q con-beijing2012service-oriented agile team-Q con-beijing2012
service-oriented agile team-Q con-beijing2012
Qiao Liang
?
自由软体铸造场冲20111023冲厂耻产惫别谤蝉颈辞苍版本控制系统之操作冲曾义峰(补苍迟)
自由软体铸造场冲20111023冲厂耻产惫别谤蝉颈辞苍版本控制系统之操作冲曾义峰(补苍迟)自由软体铸造场冲20111023冲厂耻产惫别谤蝉颈辞苍版本控制系统之操作冲曾义峰(补苍迟)
自由软体铸造场冲20111023冲厂耻产惫别谤蝉颈辞苍版本控制系统之操作冲曾义峰(补苍迟)
OpenFoundry
?
Track2 -刘继伟--openstack in gamewave
Track2 -刘继伟--openstack in gamewaveTrack2 -刘继伟--openstack in gamewave
Track2 -刘继伟--openstack in gamewave
OpenCity Community
?
Cfengine培训文档 刘天斯
Cfengine培训文档 刘天斯Cfengine培训文档 刘天斯
Cfengine培训文档 刘天斯
liuts
?
Nae client(using Node.js to create shell cmd)
Nae client(using Node.js to create shell cmd)Nae client(using Node.js to create shell cmd)
Nae client(using Node.js to create shell cmd)
fisher zheng
?
惭补惫别苍初级培训
惭补惫别苍初级培训惭补惫别苍初级培训
惭补惫别苍初级培训
Cody Zhang
?
Track2 -何斌--openstack 在京东的应用实践
Track2 -何斌--openstack 在京东的应用实践Track2 -何斌--openstack 在京东的应用实践
Track2 -何斌--openstack 在京东的应用实践
OpenCity Community
?
Subversion
SubversionSubversion
Subversion
i7Xh
?

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

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