持续集成的平衡之道

255 阅读21分钟

从亲历者的角度向大家分享从传统软件企业到Saas服务化企业,持续集成转型的感想,踩过的坑,受过的伤以及甜蜜的果实。也会分享一些特定场景下的技术管理+持续集成的落地方案。







4818666fd4ebce17f8da940d2f99567d48cf9070
第一个问题,人力成本。对于企业或团队,会认为需要一个专门的人来进行代码的审查和合并,这是目前比较常见的一种心态。对于大部分的CTO、技术总监、项目总监,思考这个问题会比较频繁。对他们而言,希望开发人员,测试人员的工作是OK的,并且是风险可控的,风险可控并不是说业务风险要可控,只要代码不写错就行了,而指的是内部流程上的可控。有时给内部团队过于的自由,导致出现了很多的问题。比如说开发,随随便便写一段代码,然后可能在他看来实现了一个基本的逻辑功能就OK了,甚至测试都测过了,但是,因为没有去对这一段代码进行审查,然后最终上线之后出现过大量的性能问题等等这些问题,其实是比较频繁的。在这时,需要一个专门的人来做一个审查和代码合并的工作,那么带来的问题就是,可能会承担一个额外的人力成本。


第三个问题,时间成本。一旦选择去做持续集成,在这个过程中遇到各种各样的,持续集成工具链中的问题,并且有些问题能解决,有些问题无法解决。因为持续集成这个泛概念在中国是比较流行的,但是具体到操作,有太多组合的可能性。从一个代码的管理角度来说,即便从最开始的,从跟踪使用什么样的工具,是使用Jira,还是使用别的工具?从第一步,分歧就开始了。选择使用一个什么样的工具,以及这个工具后面衍生出来的一个工具链,都会产生这样的问题。那么,如果你用的这套工具链中,有你不熟悉的产品,或者有国人不熟悉的产品,在解决这个工具链中遇到的问题的时候,带来的苦恼就会非常的大,幸福感很低。这是第三个问题,时间成本。




a392382ab0db94c7a98826bc2ce5615fe498df48
第一点,一些需求和bug是从客户反馈回来的,如何把它转换成系统内的需求点,功能点和bug处理的任务节点,这些问题如何去转化?另外,体制内自己产生的一些bug,比如,测试人员,QA人员对产品进行测试的时候,发现了一个bug,便反馈给开发人员,这也是需要解决的一块。以及产品经理,甚至销售人员,对产品提出了新的需求功能点,这些点如何尽快进入开发流程。这一问题是敏捷跟持续集成的大前提,如果要结合持续集成做敏捷开发,这是一个越不过去的坎,必须做,且要做得比较好,否则无法实现敏捷。如果为了做持续集成而把一个本身很敏捷的团队变成慢慢吞吞的一个团队,那就失去了持续集成的意义。




ed64ecc36a9cce48857f0384ccacb508cd81b0ec
第一步,过滤掉创建仓库这些基础操作,开发人员去拉取一个dev的分支,假设开发人员叫韩梅梅,命名为dev-hanmeimei。她在自己的分支上进行开发,开发完成之后把自己的个性化分支合并回原来的dev分支上。因为如果主干目录开放给所有的开发人员去进行同时增量的进行开发工作,发现一个最大的问题就是时间差效应。比如当安排多个开发人员同时去开发一个产品的时,由于每个人有不同的功能上限节点,当某个人发布的时候,另外的人可能只改了一半,已经提交了,这会导致产品界面残缺,界面功能互相影响。所以在这种情况下,反过来做一些调整,把主干分支永远作为一个合并类分支,不允许任何人进行手段操作,dev分支去进行一个统筹管理。这个分支只允许人去进行合并,而不允许人进行提交,防止我们的主干分支被污染。这样可以完美的避过时间差效应。







c635942a69b76dd25b0b762e3454783c72eb2136





0a5f19b9f44235d2650a83bb9e58fb38f80564fb






2538ef8588d0e81da7e6dd31888c1cadc15adaa6



73ee616d55d7232f0e2de9c279be18340a0e93a0




9096c9a0345808346013372d0d71e210a7ddef4f


c657f73ca7d3a31fa8d5c4dc9ff94cf9b14c01a6

最后,多产品项目的持续集成通过云效(RDC)的自定义流水线,降低了中间成员的时间成本,并且提高了效果。原因很简单,原来发布版本时,往往希望整个公司的人都到现场,原因是开发人员有时候没有足够高的自主权可以决定这个版本是否要上,出了问题是否回滚,甚至小一点的团队领导也没有这个权利。出了任何事情,开发人员需要征求项目管理者,遇到bug是回滚,还是后面再改bug,这占用了大量其他人的时间。现在通过自定义流水线的方式,可以开发人员直接发起一次请求之后,请求通过就可以发布了。前面所有的流程,包括构建,测试,打包,上传包,上传到测试服务器和线测服务器,都可以由开发人员完成,只有最后一步,确认发布到正式平台,迭代时,一定要某个项目管理者才可以发布,回滚也是同理,非常安全,且节约时间。



原文链接