Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
PyCon2012ChinaBj-CI-douban
Search
Zoom.Quiet
October 20, 2012
Programming
1
88
PyCon2012ChinaBj-CI-douban
http://cn.pycon.org/2012/schedulebj
Zoom.Quiet
October 20, 2012
Tweet
Share
More Decks by Zoom.Quiet
See All by Zoom.Quiet
PyCon2014China-Zhuhai-high performance
zoomquiet
0
180
PyCon2014China-Zhuhai-meta programming
zoomquiet
1
160
PyCon2014China-Zhuhai-bpm.py
zoomquiet
0
130
PyCon2014China-Zhuhai-luna kv db
zoomquiet
0
110
PyCon2014China-Zhuhai-seed studio
zoomquiet
0
120
PyCon2014China-Zhuhai-Docker Registry Build By Python
zoomquiet
0
150
PyCon2014China-Zhuhai-jeff
zoomquiet
0
110
PyCon2014China-Zhuhai-pythonic front-end
zoomquiet
0
150
DevFest2014-Zhuhai-Polymer
zoomquiet
0
450
Other Decks in Programming
See All in Programming
TipKitTips
ktcryomm
0
160
Go1.26 go fixをプロダクトに適用して困ったこと
kurakura0916
0
330
LangChain4jとは一味違うLangChain4j-CDI
kazumura
1
160
SourceGeneratorのマーカー属性問題について
htkym
0
170
What Spring Developers Should Know About Jakarta EE
ivargrimstad
0
280
CSC307 Lecture 15
javiergs
PRO
0
230
どんと来い、データベース信頼性エンジニアリング / Introduction to DBRE
nnaka2992
1
250
Railsの気持ちを考えながらコントローラとビューを整頓する/tidying-rails-controllers-and-views-as-rails-think
moro
4
380
Go Conference mini in Sendai 2026 : Goに新機能を提案し実装されるまでのフロー徹底解説
yamatoya
0
540
エンジニアの「手元の自動化」を加速するn8n 2026.02.27
symy2co
0
110
ふつうの Rubyist、ちいさなデバイス、大きな一年
bash0c7
0
740
Docコメントで始める簡単ガードレール
keisukeikeda
1
100
Featured
See All Featured
Reality Check: Gamification 10 Years Later
codingconduct
0
2k
Documentation Writing (for coders)
carmenintech
77
5.3k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
52
5.9k
SERP Conf. Vienna - Web Accessibility: Optimizing for Inclusivity and SEO
sarafernandez
1
1.3k
Tips & Tricks on How to Get Your First Job In Tech
honzajavorek
0
450
Leo the Paperboy
mayatellez
4
1.5k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
231
54k
Groundhog Day: Seeking Process in Gaming for Health
codingconduct
0
120
Collaborative Software Design: How to facilitate domain modelling decisions
baasie
0
150
Have SEOs Ruined the Internet? - User Awareness of SEO in 2025
akashhashmi
0
280
How To Speak Unicorn (iThemes Webinar)
marktimemedia
1
400
The SEO Collaboration Effect
kristinabergwall1
0
380
Transcript
豆瓣阅读中的持续集成/发布实践 豆瓣 孙毅
豆瓣阅读 豆瓣阅读是 豆瓣读书推出的数字阅读服务 • 拥有质量一流的内容 • 支持Web、iPad、iPhone、 Android、 Kindle等多种设备 •
提供极佳的阅读体验 • 社会化阅读
Why CI? • 减少风险 • 减少重复过程 • 任意时间,地点可部署 • 可见性
• 信心
场景1-开发 本地服务起 不来了? 依赖! 提交了才发 现问题? 开发服务器网速赶不上手速…
问题分析 • 开发环境复杂且不统一 • 本地构建困难 • 本地没有快速反馈机制
解决方案 • 本地的统一的虚拟开发环境
• 订阅上游依赖变更,用puppet管理 • 大家一起贡献模块 • 基准开发工具包 • 简单便捷的本地ci
订阅上游依赖变更 • 必要性 – 包依赖开发环境必须和线上环境同步升级 – 公司内部的服务依赖,lib依赖版本升级 • 现状:RSS订阅依赖更新消息 – 不是很先进,但是还算可靠
大家一起贡献模块 • 必要性 – 项目众多,每一个项目依赖和工具不同 • 现状: – fork,pull-request – Puppet主文件中用注释进行特性开关
基准开发工具包 • 工具的种类/版本 • 工具的配置 • 现状: – 静态检查 – 单元测试 – Web测试
简单便捷的本地集成(1) • pylint/jshint – 基准开发工具包包含工具 – 随项目代码进行检查项配置 – git pre-commit hook
简单便捷的本地集成(2) • unittest/apitest – 不干扰本地开发服务 – coverage – nosy/tag/etc..
简单便捷的本地集成(3) • web测试 – headless – webdriver – js error collection – html error
collection – xunit
对比 before now 只能在服务器开发 可迁移/可定制的完整本地开发环境 先提交,再跑集成测试,改bug 本地先进行测试,再提交 web测试只能在中心服务器 本地web测试
场景2-提交 好大一个diff! 懒得review 合入的时候咋 办啊。。 这功能谁 搞挂的?
问题分析 • review流于形式 • 分支合并成本高 • 问题定位困难
解决方案 • git / pull-request
• git分支的切换和合并成本极低 • 以pull-request作为review单元 – 鼓励更多提交,强制review后合并 – review覆盖面,针对性和参与度高 • 几乎每次merge都会触发构建 – pull-request的粒度保证问题追查较容易 – 通过构建job通知提交作者
对比 before now 定期review,覆盖面小 每个pull-request必须review review意⻅见很难定位到行 响应也不及时 review精确到行,提醒机制完善 修复一目了然 写一大堆再合并提交
天天合并/提交 (5个月,1275个pull-request,2725个 review意⻅见,全体参与) 构建diff太大,出问题不知道谁的 几乎每个构建只有1-2个merge (5个月,900次构建)
None
场景3-构建 大家都喜欢 下班前提交 跑一遍要 20分钟! CI服务器又 排队。。 跑了15分钟 才告诉我没 通过
: ( merge把主 干搞挂啦
问题分析 • 分支集成不足 • ci suite反馈速度慢 • 无法获取阶段结果 • 持续集成服务器资源问题
解决方案(1) • 基于opening pull request的分支持续集成
解决方案(2) • 构建链/测试分级 core lint pylint jshint yuicheck ut unitest
apitest servicetest webtest core full service- sync release- tag staging- regression online
None
解决方案(3) • 冗余计算资源利用 – 虚拟机开启jenkins-slave模块即接入ci系统 – 控制node的tag来分配接入的job
对比 before now 中心ci只跑主干代码的ci suite 活动中的pull-request分支均有自己 的ci suite,结果更新在pr记录中 静态检查4min 任务分拆并行化,关键任务11s/42s
后续任务1min48s 所有任务在中心服务器上排队 “下午4点的困扰” 大家贡献slave,大大提高了突然峰值 下的执行速度,自己的任务已经可以 由自己的slave全部消化 ci suite中的job过大过⻓长 先跑核心,再dailybuild全量 提交构建控制在10min
场景4-交付 上哪个版本? XX不在,怎 么上线来着? 手抖了。。 怕出线上问 题啊…
解决方案(1) • 继承ci suite的版本状态监测/标记 - 提交构建 - 打包打tag
解决方案(2) • 特性开关 - 重大变更 均使用feature-switch - switch 多种状态,可在线切换
解决方案(3) • 直接从ci集成自动化上线 - 从ci suite传入可上线的tag - 由jenkins job自动执行远程脚本 -
直接点击按钮触发
加入豆瓣 • 测试工程师/测试开发工程师 • 移动测试开发工程师 • 更多豆瓣职位 •
[email protected]
Q & A 您也可以通过以下方式找到我: 豆瓣主页: http://www.douban.com/people/tachikoma/ Email:
[email protected]
Thanks