Upload
yiwei-ma
View
658
Download
5
Embed Size (px)
DESCRIPTION
Citation preview
百度实施持续集成之“工具战争”
路宁www.luning.name
11年4月6日星期三
•百度项目管理部工程师
•曾任ThoughtWorks咨询师
•热衷于敏捷和精益
关于我
11年4月6日星期三
一点背景
11年4月6日星期三
• C++的产品线,共100+人
•项目小,且多
•每个项目为涉及的模块分别拉分支
•选择模块试点CI, 涉及多个项目,20+人
11年4月6日星期三
R1
R2
P1
P2
P3
R3
11年4月6日星期三
P1
P2
P3
P4
R1 R2
11年4月6日星期三
11年4月6日星期三
11年4月6日星期三
开始征程
11年4月6日星期三
持续集成平台
编译平台
项目管理平台
测试平台
上线部署平台
11年4月6日星期三
?
持续集成平台上的构建无法在本地运行
11年4月6日星期三
11年4月6日星期三
11年4月6日星期三
11年4月6日星期三
11年4月6日星期三
DB
M 1 M 2 M 3M 1
M 2
M 3
11年4月6日星期三
DB
ant-1.8.2.jar
11年4月6日星期三
11年4月6日星期三
多个项目的Dev在Trunk上做本地编译遇到困难
?
11年4月6日星期三
在项目管理平台中建项目,拉分支,在编译平台上设置包编译依赖后才能做本地编译
11年4月6日星期三
•编译平台集中管理包编译依赖配置
•包编译依赖基于项目(而非软件模块)配置
编译平台的特点
11年4月6日星期三
•对包编译依赖配置缺乏有效的版本管理
•做本地做编译有重重约束
•针对“项目”设置依赖配置让问题变复杂
问题
11年4月6日星期三
Repository
junit-3.8.1.jar
11年4月6日星期三
用comake编译, 替代集中的编译平台,并在本地管理编译依赖配置
11年4月6日星期三
项目“降级”为功能点,用wiki记录,不用在项目管理平台上创建“繁
重”的项目
11年4月6日星期三
无法在本地任意运行所有测试
?
11年4月6日星期三
11年4月6日星期三
11年4月6日星期三
•要通过平台操作,还不能实现无需人工干预的自动化
•测试Case及数据通过基于Web的平台集中管理和存储,与生产代码脱节
问题
11年4月6日星期三
•开发和使用新测试平台,通过python脚本写测试,能完全自动运行
•测试平台源码、测试代码及数据与生产代码做同源版本管理
•测试环境标准化,每个人都可方便地在本地运行所以测试
方案
11年4月6日星期三
上线过程繁琐,依赖操作单,怎么自动化?
?
11年4月6日星期三
11年4月6日星期三
11年4月6日星期三
•线上配置及数据重复存放,且缺乏版本管理
• Dev的准备工作和OP的人工动作较多
问题
11年4月6日星期三
•配置,数据及部署脚本与源码做同源版本管理
•上线步骤全部脚本化,通过一条命令运行
•线上配置的修改与代码一样,需要自动化测试保证质量
•与Hudson集成,实现一键上线
方案
11年4月6日星期三
工具演进的规律
11年4月6日星期三
通过人工流程建立秩序
11年4月6日星期三
利用办公自动化式的平台
11年4月6日星期三
自动持续执行
11年4月6日星期三
DevOps
•用统一平台管理流程和数据
•通过界面进行可视化操作
•局部操作的自动化
•打破部门局限,各角色密切合作下的创新方案
•用靠谱的工具
•对一切做配置管理和自动化
办公自动化
行业现状
11年4月6日星期三
DevOps
•用统一平台管理流程和数据
•通过界面进行可视化操作
•局部操作的自动化
•打破部门局限,各角色密切合作下的创新方案
•用靠谱的工具
•对一切做配置管理和自动化
办公自动化
行业现状
11年4月6日星期三
测试平台的演进也类似
11年4月6日星期三
个人维护和运行测试
11年4月6日星期三
DB
平台统一管理和运行测试
11年4月6日星期三
同源版本管理,通过脚本运行
11年4月6日星期三
反思
11年4月6日星期三
一定要换工具吗?
11年4月6日星期三
大而全的平台可视化编辑
自主研发,方便以后定制包装一下,再起个响亮的名字
支持拖拽
11年4月6日星期三
文本和命令行 优于
只做好一件事的开放工具 优于
融入社区, 善用开源 优于
整体思考解决问题 优于
二进制和GUI
大而全的集中平台
二次包装和自主开发
依赖工具解决问题
11年4月6日星期三
开拓视野,融入社区
11年4月6日星期三
www.luning.com
Q&A
11年4月6日星期三