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
71
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
130
PyCon2014China-Zhuhai-meta programming
zoomquiet
1
100
PyCon2014China-Zhuhai-bpm.py
zoomquiet
0
80
PyCon2014China-Zhuhai-luna kv db
zoomquiet
0
84
PyCon2014China-Zhuhai-seed studio
zoomquiet
0
65
PyCon2014China-Zhuhai-Docker Registry Build By Python
zoomquiet
0
78
PyCon2014China-Zhuhai-jeff
zoomquiet
0
58
PyCon2014China-Zhuhai-pythonic front-end
zoomquiet
0
87
DevFest2014-Zhuhai-Polymer
zoomquiet
0
370
Other Decks in Programming
See All in Programming
わたしの星のままで一番星になる ~ 出産を機にSIerからEC事業会社に転職した話 ~
kimura_m_29
0
180
Spatial Rendering for Apple Vision Pro
warrenm
0
110
テストコードのガイドライン 〜作成から運用まで〜
riku929hr
5
710
今年一番支援させていただいたのは認証系サービスでした
satoshi256kbyte
1
260
Итераторы в Go 1.23: зачем они нужны, как использовать, и насколько они быстрые?
lamodatech
0
830
コンテナをたくさん詰め込んだシステムとランタイムの変化
makihiro
1
140
htmxって知っていますか?次世代のHTML
hiro_ghap1
0
340
PSR-15 はあなたのための ものではない? - phpcon2024
myamagishi
0
140
ドメインイベント増えすぎ問題
h0r15h0
2
350
range over funcの使い道と非同期N+1リゾルバーの夢 / about a range over func
mackee
0
110
短期間での新規プロダクト開発における「コスパの良い」Goのテスト戦略」 / kamakura.go
n3xem
2
170
Exploring: Partial and Independent Composables
blackbracken
0
100
Featured
See All Featured
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
232
17k
Speed Design
sergeychernyshev
25
670
Fireside Chat
paigeccino
34
3.1k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
28
900
Build The Right Thing And Hit Your Dates
maggiecrowley
33
2.4k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
44
6.9k
The Pragmatic Product Professional
lauravandoore
32
6.3k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
365
25k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
26
1.5k
Why Our Code Smells
bkeepers
PRO
335
57k
A Modern Web Designer's Workflow
chriscoyier
693
190k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
251
21k
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