fir.im 持续集成技术实施

互联网时代,人人都以追产品之很快响应、快速迭代和便捷验证。不论是创业团队或大中型公司,都当追究属于自己的快捷开发、持续交付的道。fir.im
团队吗在全面实施敏捷,并出新连集成服务—
flow.ci
,以救助公司将出测试流程自动化,更迅捷地交产品。

字对于多总人口来说是认识世界的钥匙。

4月15日,fir.im CTO
郭扬在“光环国际·2017敏捷春季峰会”带来了《敏捷工程实践的本——持续集成》的技巧实施,从高速方法论的角度分享了连集成流程的质实践及
fir.im 团队的 CI 技术实施。演讲实录整理如下,希望能带动为你有的思考。

靠文字,建构自己和别人之涉,建设协调同世风的关系。对于一个青睐文字的人来说,找到一个合盛放自己亲笔的地方,却休是起易之政工。文字有好有坏,这是人家的评。就终于敝帚也有自珍的理,别人意见青白相交,改变不了温馨对敝帚的珍视。

fir.im

争的地方才适合盛放自己之敝帚呢?寻寻觅觅多少年,写好了千八百字之稿子,不说怀孕十月,也总算搜肠刮肚。一奔落地,十年想,总想着要找个好之人家,才好放置自己的张上生活。这婆家需要什么条件也?自然而精彩掂量,挑挑拣拣。

郭扬,fir.im
CTO,曾就职于奔驰戴姆勒创新实验室,Thoughtworks,索尼移动通信,网易等公司,担任
DevLead,负责组建技术集团,管理型进度和项目风险,软件和 DevOps
的架构设计、高并发条件下之习性调优、敏捷教练等工作。

先是,它需要是一个有美感的地方。让人收看第一目就是会真切产生同样种植莫名的疼,就比如于人流熙熙攘攘的马路上,抬头见一个气球提溜着的飞屋,你见面不自觉地会停滞不前凝视,会心一笑,憧憬房子里的人数,幻想房子里的作业,留给未来天宇般明媚的设想。美感是独暧昧的词汇,对于让您心动的事物,嫁接美感是意料之中的事情;而对一个叫您免动心的东西,却常常会针对它们杀是。我事先经常于相继博客里倒来倒去的折磨,使用了许多书面主题,依然找不至温馨喜欢的好;就算尝试从盖博客,有限的考虑呢不便突破桎梏。没有起IPhone,我们吧非明了一个所有美感的手机该是什么样。Iphone的面世定义了手机美学(或许只是曾经),我们就待代表认可。在尚未出现简书之前,我吧无亮堂一个具备美感的写作平台该是何等;直到撞了简书,才发觉一个清、简洁、让人口注意让文的环境是如何重要。一个叫丁快的写环境,会映射到一个口之契中。如是本身愿。

连发集成做呀

不止集成的定义出现在 2001 年,它实际上是一个 XP
极限编程的工程实行。那么连的是什么,集成是什么吗,非常简单就是“一直无鸣金收兵地并代码”。

随地集成是管代码频繁之合及基本,通过自动构建的点子证明软件之成色,让集体快速的响应质量,快速的修补问题,快速的为客户解决问题,快速地交又好的软件质量。

附带,有部分平静而亲切的伴。珍视的物用好友分享,就像进了一个古董,总想在懂行的朋友来观摩把打才有趣。敝帚自藏,如衣锦夜行,脚踩金鞋垫,憋得大、闷得慌。人太多矣啊出,闲言碎语,东拉西扯,顾左右而言他,也是败坏。有几只意思相投的食指,随着意兴来观,有眼缘则留步,写下几句感言,字字珠玑。以文会友,重要的是友。简书的归类订阅功能,可以让您自由选择感兴趣的话题,建立该一个方始的罗机制,至少是产生得兴趣的丰姿会看你的章。当然,每当有人好、评论、收录而的稿子时,自动发送至邮箱的邮件,会被你带来浅浅的开心。有价之输出就会见沾肯定,肯定是无比亲近的尊重。

咱俩为什么要召开持续集成

开发人员对下的软件开发场景颇熟稔,比如:

  • 场面一样:开发了新职能,老功能产生新的 bug;
  • 观二:修好一个 bug,又出其它 bug,甚至出现连环 bug;
  • 现象三:出现的 bug
    比较多,修改代码要充分小心,不熟识的模块一般不敢动,怕引起问题;

不止集成是怎么样缓解这个问题,Martin Fowler 大师都说过:

“Continuous Integration doesn’t get rid of bugs, but it does make them
dramatically easier to find and remove.” — Martin Fowler

如若上面所说,持续集成不能够解除 bug ,但亦可再次便于地意识
bug,更高速地修复,提升产品质量。那么,持续集成能给我们带哪些价值?

fir.im

自从马上张图上足见见,持续集成形成一个周的闭环。通过持续的并轨进行不断地检讨、调整,同时,项目的透明性为赢得了最特别之反映。

最后,它发出一个值得被你望的前景。我懂的简书不止是一个编的阳台,也会是一个转移写作生态之地方。传统的写模式将写作-编书-出版-发行分别,每个流程都发正式的人数承担,也尽管象征来特意的人口把控。细致分工提高了频率,也让个性化文字的扩带来了障碍。有个性之文字不自然非要等及编辑挖掘,自己来掏自己之价值,自己举行要好的编书人也会见是一个没错的道。借助于各种信息平台的开拓进取,编辑电子书的血本相较于纸质书大为降低,每个人还足以在简书的阳台及就策划-写作-发行的流水线,遇到合适的出版部门也可将的易吗纸质书。两长达路分别发展,又足以相互加。如果后在电子书的营销模式,简书可能以纸质书的运营模式之外,另修一个根据电子书的运营模式。每个人都是每个人的出版人,这个未来值得期待。

fir.im 如何开展连发集成实践

旋即是一个广阔的连集成流水线:

fir.im

当平常的出过程遭到,程序员在地方提交代码,持续集成流水线要求先行开相同糟地方集成,在地头开展说明后交由至源代码管理仓库被,之后源代码工具会生
webhook
触发至持续集成系统中。当构建/测试完了后,会及时通过钉钉或邮件通知团队(测试/研发/boss/产品经营)集成状态,产品经理或项目经理收到通知后会见在测试环境做验收测试,这是一个比较健全的反馈环。

苟测试通过验收完毕后,持续集成系统会活动触发部署至类似生产环节要测试环境,或出于专人手动部署到生育环境。

觅渡,觅渡,至简书。

缘何而做地方集成

先是,代码在长距离进行田间管理,每个人还见面交代码,远程的代码仓库会发生变化,所以当地头集成的时刻要求开展代码合并,以免出现分支冲突与代码冲突。其次,不要借助让不断集成系统给您结果,可能用
30 分钟的时光,不要让开发人员等待,一定要先行做当地集成。

望同简书一起新的旅程。

哪些做版本提交

再说一个交的题材,我们尽量确保每一样差提交都是一个整体的付出,也就是原子提交。

当代码变动而想创立提交时,这个提交该尽可能的微量,并且带有一个不可分割的特色(feature)、修复(fix)或优化(improved)。

拿每个产品开发都见面碰到的 login
功能开发举例,当填了的用户称和密码传到数据库,做截止证后给用户返回一个结果。那什么是一个原子提交?比如,提交认证一个用户称,这是一个完好无损的
feature ;验证密码是否切合格式(6位/8位),这为是一个完完全全的 feature
;当我说明完用户名和密码后重新传数据库后,查询正确也,这也是一个完全的
feature ;保证每次交是一个完好的 feature 或修复了一个
bug,不要代码写成半截。

连集成系统

此地谈话的凡狭义的不断集成系统,通常的 CI
系统接受提交之后会接触构建,构建会发出信息返回比如 commit id 、commit
信息、代码变更等,收到代码提交后会硌自动构建,接着安装依赖进行编译,并碰质量担保流程,也就是说自动化测试集。

fir.im

自动化测试集包括代码静态检查-单元测试-集成测试-验收测试-性能测试,也会时有发生压力测试、回归测试、monkey
test等等一样层层之测试。

fir.im

对接下去,我们切实说一下 fir.im 团队如何开展连发集成实践的。

fir.im 的快环境

fir.im 是一个内测分发平台,我们啊开了一个不住集成 CI
产品-flow.ci。先来拘禁一下咱在采取的迅速环境:

fir.im

  • Trello 看板;
  • 老三独环境(类生产条件,测试环境,生产条件);
  • CI
    工具(Jenkins/flow.ci)

说一下 Git 分支管理

咱以用 3 个分支 —— master/develop/feature 分支,对 feature
命名会有部分要求,持续集成系统一定会反映及 trello 的 kanban 里,所以于
feature 分支我们呢出这样的命名 feature/fci-{card number} 以造福分别。

fir.im

大抵分如何做往往地不断集成?

master 分支,即线及拨出。线达日常会有部分 hotfix,
任何产品都非可能避免免线上的 bug ,这些 bug 需要在 master
分支进行修复,修复好后连集成系统会告诉已上丝,收到团队反馈,这些代码会要求更新在
develop 分支上,之后有团队为会接收有关通知,那么 feature
分支会有转移吧?答案是一定之,因为频繁之融会可以预防代码偏离。这便是咱们差不多支构建的方针。

fir.im

还有一个策略——不等之支行不同之构建,持续集成系统跑了所有流程会很丰富,所以当
feature
分支频繁度会较在本土构建而大一些,但是也绝非那大。为了保险持续集成系统能迅速地接申报,需要以
feature 分支上开片定制的 workflow
,所以我们做了代码静态分析以及单元测试。

当 feature 分支的 card 做了事后(scrum 中 done
的含义是乘测试验收结束),集成及 develop 分支,develop
分支会自动部署及测试环境,会跑一个全副自动化测试集,为什么是这般的构建政策也?

俺们见面开代码 review ,当 feature 分支提 pr 到 develop 分支上,这样
develop 分支的构建标准是:当接受 pr
之后,开始走不停集成。假如部署到位整个测试跑了了活经理验收后,没毛病了,终于得以颁发了至
master 分支。

万事集体的构建频率可以看下这张图:

fir.im

地面集成的频率非常高,远程构建对应之是 feature 分支,会相对没有一下。QA
环境对应之是 develop
分支的构建粒度。这样的构建每天还见面产生,所以做得了事后不要积压,一定要是维持上线节奏。

fir.im

kanban + scrum
结合的点子结合我们每天构建,这是一个完完全全的构建政策及上线频率。

fir.im 的络绎不绝集成系统演变过程

罗马不是一上建成的,持续集成不是平开始即是一揽子的,持续集成系统的嬗变过程是稳中求进的。是于理想之开工作流——持续部署,也大概会更就几只演变阶段:

  • 初期级:提交代码-自动部署;
  • 相似等级:提交代码-代码静态分析-自动部署,最简便先还入代码静态分析;
  • flow.ci
    阶段:提交代码-代码静态分析-自动化测试集-自动部署;

    fir.im

及时是咱们当为此底自动化测试集,下面分别说生静态检查分析、单元测试、验收测试、性能测试的有血有肉用。

Step 1. 静态代码分析

每个企业都见面时有发生友好之代码规范,代码静态分析工具能够确保代码质量,现成的家伙来
java 的 FindBugs,ruby 的 rubocop
等。利用代码检查器得以助组织意识而重构的地方,输出产出 – HTML
报告,也会发觉神秘 bug;有的代码检查工具还会见检讨来一些安全漏洞。

及时三触及是代码静态分析最要之图。这里呢享受一个 GitHub
地址,列有片主流语言的代码分析工具,可以参照一下。

Step 2. “单元测试”

这边的
“单元测试”也助长了并测试,毕竟创业企业求资源最大化。程序员一定要是描绘单元测试,要战胜开发的惯性思维,不要甩锅。下面来部分留意的触及及大家大饱眼福:

  • 测试大——不仅仅测试是情况,也只要主动测试大;
  • 减掉耦合——保证单独的可是测试性;
  • 效能分别——单元测试流太长,超过 20
    分钟之语句使详细想转手如何将力量独立拆起来,效率还胜;
  • 测试=需求——从测试代码看到每个 class 是胡的,同时起 bug
    时,第一时间是圈测试,想想怎么由测试中复现;
Step 3. 验收测试

验收测试是端对端的测试,从收受用户名密码到回结果,是不是咱们所企望之一个价值,这是验收
Acceptance
Test,其实是验收了全职能。代码静态检查与单元测试,保证了咱们安怎么去描绘代码,验收测试保证了写是代码,符合开发需要。

flow.ci
做验收测试于多,用的凡比流行的框架 Cucumber + Selenium
WebDriver,目前支撑 3 栽数据库,5 栽 git 仓库,7 种 开发语言跑在 docker
容器云及,支持 iOS 构建跑在 mac 机器上,要保证这些排列组合正常运作,这是
flow.ci 做验收测试最好中心之价。

fir.im

实际上,持续集成是一个工作流,当 push 代码的时光才会 run 起来,但是
flow.ci
本身系统啊出外部依赖之特殊性,会靠一些叔在的 sevice(比如
GitHub/GitLab
等),验收测试该一直维持不住地运行,也堪给不止测试吧。因为咱们永久不能够担保第三正在的
api 会不会见改变:)

Step 4. 特性测试

俺们的性能测试做的比较简单,主要测试 api.因为 fir.im 做 app
的内测分发,我们需要性能测试保证 app
上传下载的健康稳定。性能测试是单用户的,压力测试是基本上用户之,这是两者之间的别。

属性测试会发出一些非强烈,有成百上千体系会生出缓存。flow.ci
的特性测试跑在 docker
上,是一个完完全全独立的环境,需要让系统预热运行一下。Locust/JMeter/LoadRunner是目前较流行的性质测试工具。
flow.ci
目前因此之凡 locust,可以参考一下。

穿梭集成的可视化、数据解析

俺们当一个好之连集成系统也要是形成种类进度的透明化,最传统的方是殡葬有关的邮件,但真相上发几单人口失去看吗?为这我们买了一个颇的屏幕来缓解此问题,用来天天提醒团队的某部构建结果。当然为堪用闪烁灯或音频的方式。

fir.im

说交数量统计分析,整个 ci
流程跑下来有的很多多少为死有开的值。比如,对于代码静态分析产生稍许
Offence、Risk、Bug,对于单元测试有失败率、测试覆盖率;对于验收测试或性质测试出多少之失败率,这些数量都出或成为衡量一个程序员的标准。

fir.im

结语

CI 就如坐大楼的下边手架同,没有脚手架便没有道为有一个够高的楼,没有 CI
就无法提交质量足够好的软件!

欢迎分享而的见地。


P.S.想要现场 slide
的同班,请扫码下图关注群众号flow_ci,并回复关键词「ci实践」即可取得 🙂

fir.im