SlideShare a Scribd company logo
1 of 22
大型企业 CI 平台建设和实施分
         享

            腾讯 陈小光
A genda

现状 & 挑战
实践分享 - 平台建设
实践分享 - 实施推广
总结
Q&A
   7 年研发管理和优化经验,跨越银行、互联网等行业
   目前腾讯持续交付、持续集成实践者
   爱好广泛包括且不限敏捷实践,音乐,数学
   微博 @   v陈小光v
   Mail go2cxg@vip.qq.com
现状 & 挑战 - 现状
工程师 > 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

Docker 基礎介紹與實戰
Docker 基礎介紹與實戰Docker 基礎介紹與實戰
Docker 基礎介紹與實戰Bo-Yi Wu
 
用 Docker 改善團隊合作模式
用 Docker 改善團隊合作模式用 Docker 改善團隊合作模式
用 Docker 改善團隊合作模式Bo-Yi Wu
 
使用Rpm&yum进行基础软件管理
使用Rpm&yum进行基础软件管理使用Rpm&yum进行基础软件管理
使用Rpm&yum进行基础软件管理haiyuan ning
 
Docker 淺入淺出
Docker 淺入淺出Docker 淺入淺出
Docker 淺入淺出Miles Chou
 
Oprofile linux
Oprofile linuxOprofile linux
Oprofile linuxFeng Yu
 
企業導入微服務實戰 - updated
企業導入微服務實戰 - updated企業導入微服務實戰 - updated
企業導入微服務實戰 - updatedPaul 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 HOWTOeastsky
 
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 TalkLarry Cai
 
docker intro
docker introdocker intro
docker introkoji lin
 

What's hot (20)

Docker
DockerDocker
Docker
 
Docker 基礎介紹與實戰
Docker 基礎介紹與實戰Docker 基礎介紹與實戰
Docker 基礎介紹與實戰
 
用 Docker 改善團隊合作模式
用 Docker 改善團隊合作模式用 Docker 改善團隊合作模式
用 Docker 改善團隊合作模式
 
使用Rpm&yum进行基础软件管理
使用Rpm&yum进行基础软件管理使用Rpm&yum进行基础软件管理
使用Rpm&yum进行基础软件管理
 
Docker 淺入淺出
Docker 淺入淺出Docker 淺入淺出
Docker 淺入淺出
 
Oprofile linux
Oprofile linuxOprofile linux
Oprofile linux
 
企業導入微服務實戰 - updated
企業導入微服務實戰 - updated企業導入微服務實戰 - updated
企業導入微服務實戰 - updated
 
系統程式 -- 第 1 章
系統程式 -- 第 1 章系統程式 -- 第 1 章
系統程式 -- 第 1 章
 
《保哥線上講堂》打造一個具有 Linux 溫度的 Windows 命令提示字元工具
《保哥線上講堂》打造一個具有 Linux 溫度的 Windows 命令提示字元工具《保哥線上講堂》打造一個具有 Linux 溫度的 Windows 命令提示字元工具
《保哥線上講堂》打造一個具有 Linux 溫度的 Windows 命令提示字元工具
 
系統程式 -- 為何撰寫此書
系統程式 -- 為何撰寫此書系統程式 -- 為何撰寫此書
系統程式 -- 為何撰寫此書
 
廣宣學堂: 企業導入微服務實戰
廣宣學堂: 企業導入微服務實戰廣宣學堂: 企業導入微服務實戰
廣宣學堂: 企業導入微服務實戰
 
Ansible 101
Ansible 101Ansible 101
Ansible 101
 
Debian 套件打包教學指南 v0.19 - 繁體中文翻譯
Debian 套件打包教學指南 v0.19 - 繁體中文翻譯Debian 套件打包教學指南 v0.19 - 繁體中文翻譯
Debian 套件打包教學指南 v0.19 - 繁體中文翻譯
 
Kafka in Depth
Kafka in DepthKafka in Depth
Kafka in Depth
 
NCURSES Programming HOWTO
NCURSES Programming HOWTONCURSES Programming HOWTO
NCURSES Programming HOWTO
 
Dev-Ops与Docker的最佳实践 QCon2016 北京站演讲
Dev-Ops与Docker的最佳实践 QCon2016 北京站演讲Dev-Ops与Docker的最佳实践 QCon2016 北京站演讲
Dev-Ops与Docker的最佳实践 QCon2016 北京站演讲
 
Software Engineer Talk
Software Engineer TalkSoftware Engineer Talk
Software Engineer Talk
 
docker intro
docker introdocker intro
docker intro
 
Docker Build
Docker BuildDocker Build
Docker Build
 
Docker基礎
Docker基礎Docker基礎
Docker基礎
 

Viewers also liked

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 orderdeasy76
 
Cable Failed Down On The Earth
Cable Failed Down On The EarthCable Failed Down On The Earth
Cable Failed Down On The Earthweb2020
 
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ás
Carolina  y tomásCarolina  y tomás
Carolina y tomásQuinto A BN
 
4septiembre1921se venden enseres
4septiembre1921se venden enseres4septiembre1921se venden enseres
4septiembre1921se venden enseresVESCELIA
 
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
 

Viewers also liked (17)

ccs day
ccs dayccs day
ccs day
 
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...
 
Cara order
Cara orderCara order
Cara order
 
Cable Failed Down On The Earth
Cable Failed Down On The EarthCable Failed Down On The Earth
Cable Failed Down On The Earth
 
Aaa
AaaAaa
Aaa
 
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...
 
Carolina y tomás
Carolina  y tomásCarolina  y tomás
Carolina y tomás
 
4septiembre1921se venden enseres
4septiembre1921se venden enseres4septiembre1921se venden enseres
4septiembre1921se venden enseres
 
Lima 2009
Lima 2009Lima 2009
Lima 2009
 
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̇
 
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...
 
EIU Global Forecast April 2012
EIU Global Forecast April 2012EIU Global Forecast April 2012
EIU Global Forecast April 2012
 
Nylon cut loop
Nylon cut loopNylon cut loop
Nylon cut loop
 
Creamos un blog
Creamos un blogCreamos un blog
Creamos un blog
 
MSLesson 1 (Ques)
MSLesson 1 (Ques)MSLesson 1 (Ques)
MSLesson 1 (Ques)
 
ティファニーのジュエリーティファニーのジュエリーは
ティファニーのジュエリーティファニーのジュエリーはティファニーのジュエリーティファニーのジュエリーは
ティファニーのジュエリーティファニーのジュエリーは
 
Tt 10
Tt 10Tt 10
Tt 10
 

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

PyCon China 2012 孙毅
PyCon China 2012 孙毅PyCon China 2012 孙毅
PyCon China 2012 孙毅Yi Sun
 
02.python.开发最佳实践
02.python.开发最佳实践02.python.开发最佳实践
02.python.开发最佳实践Na Lee
 
持续交付最佳实践——百度技术沙龙201110
持续交付最佳实践——百度技术沙龙201110持续交付最佳实践——百度技术沙龙201110
持续交付最佳实践——百度技术沙龙201110Qiao Liang
 
Bitbucket pipeline CI
Bitbucket pipeline CIBitbucket pipeline CI
Bitbucket pipeline CIZero Huang
 
Pm 04 华胜天成openstack实践汇报-20120808
Pm 04 华胜天成openstack实践汇报-20120808Pm 04 华胜天成openstack实践汇报-20120808
Pm 04 华胜天成openstack实践汇报-20120808OpenCity Community
 
Continuous integration
Continuous integrationContinuous integration
Continuous integrationnetdbncku
 
Puppet安装总结
Puppet安装总结Puppet安装总结
Puppet安装总结Yiwei Ma
 
从运维系统的开发谈安全架构设计
从运维系统的开发谈安全架构设计从运维系统的开发谈安全架构设计
从运维系统的开发谈安全架构设计mysqlops
 
Bst svn专项培训
Bst svn专项培训Bst svn专项培训
Bst svn专项培训Wu Liang
 
打造面向服务的敏捷团队 Q con-beijing2012
打造面向服务的敏捷团队 Q con-beijing2012打造面向服务的敏捷团队 Q con-beijing2012
打造面向服务的敏捷团队 Q con-beijing2012Qiao 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-beijing2012Qiao Liang
 
自由軟體鑄造場_20111023_Subversion版本控制系統之操作_曾義峰(ant)
自由軟體鑄造場_20111023_Subversion版本控制系統之操作_曾義峰(ant)自由軟體鑄造場_20111023_Subversion版本控制系統之操作_曾義峰(ant)
自由軟體鑄造場_20111023_Subversion版本控制系統之操作_曾義峰(ant)OpenFoundry
 
Track2 -刘继伟--openstack in gamewave
Track2 -刘继伟--openstack in gamewaveTrack2 -刘继伟--openstack in gamewave
Track2 -刘继伟--openstack in gamewaveOpenCity 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
 
Maven初级培训
Maven初级培训Maven初级培训
Maven初级培训Cody Zhang
 
Track2 -何斌--openstack 在京东的应用实践
Track2 -何斌--openstack 在京东的应用实践Track2 -何斌--openstack 在京东的应用实践
Track2 -何斌--openstack 在京东的应用实践OpenCity Community
 
Subversion
SubversionSubversion
Subversioni7Xh
 

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

PyCon China 2012 孙毅
PyCon China 2012 孙毅PyCon China 2012 孙毅
PyCon China 2012 孙毅
 
Xpp
XppXpp
Xpp
 
02.python.开发最佳实践
02.python.开发最佳实践02.python.开发最佳实践
02.python.开发最佳实践
 
持续交付最佳实践——百度技术沙龙201110
持续交付最佳实践——百度技术沙龙201110持续交付最佳实践——百度技术沙龙201110
持续交付最佳实践——百度技术沙龙201110
 
Intro to svn
Intro to svnIntro to svn
Intro to svn
 
Bitbucket pipeline CI
Bitbucket pipeline CIBitbucket pipeline CI
Bitbucket pipeline CI
 
Pm 04 华胜天成openstack实践汇报-20120808
Pm 04 华胜天成openstack实践汇报-20120808Pm 04 华胜天成openstack实践汇报-20120808
Pm 04 华胜天成openstack实践汇报-20120808
 
Continuous integration
Continuous integrationContinuous integration
Continuous integration
 
Puppet安装总结
Puppet安装总结Puppet安装总结
Puppet安装总结
 
从运维系统的开发谈安全架构设计
从运维系统的开发谈安全架构设计从运维系统的开发谈安全架构设计
从运维系统的开发谈安全架构设计
 
Bst svn专项培训
Bst svn专项培训Bst svn专项培训
Bst svn专项培训
 
打造面向服务的敏捷团队 Q con-beijing2012
打造面向服务的敏捷团队 Q con-beijing2012打造面向服务的敏捷团队 Q con-beijing2012
打造面向服务的敏捷团队 Q con-beijing2012
 
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
 
自由軟體鑄造場_20111023_Subversion版本控制系統之操作_曾義峰(ant)
自由軟體鑄造場_20111023_Subversion版本控制系統之操作_曾義峰(ant)自由軟體鑄造場_20111023_Subversion版本控制系統之操作_曾義峰(ant)
自由軟體鑄造場_20111023_Subversion版本控制系統之操作_曾義峰(ant)
 
Track2 -刘继伟--openstack in gamewave
Track2 -刘继伟--openstack in gamewaveTrack2 -刘继伟--openstack in gamewave
Track2 -刘继伟--openstack in gamewave
 
Cfengine培训文档 刘天斯
Cfengine培训文档 刘天斯Cfengine培训文档 刘天斯
Cfengine培训文档 刘天斯
 
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)
 
Maven初级培训
Maven初级培训Maven初级培训
Maven初级培训
 
Track2 -何斌--openstack 在京东的应用实践
Track2 -何斌--openstack 在京东的应用实践Track2 -何斌--openstack 在京东的应用实践
Track2 -何斌--openstack 在京东的应用实践
 
Subversion
SubversionSubversion
Subversion
 

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

  • 2. A genda 现状 & 挑战 实践分享 - 平台建设 实践分享 - 实施推广 总结 Q&A
  • 3. 7 年研发管理和优化经验,跨越银行、互联网等行业  目前腾讯持续交付、持续集成实践者  爱好广泛包括且不限敏捷实践,音乐,数学  微博 @ v陈小光v  Mail go2cxg@vip.qq.com
  • 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