Coolblue 的技术开拓者 Paul de Raaij 提出,持续部署会得到更强的责任感和更好的部署质量。代码规范预防代码库混乱,自动化检查很合适完成冗长而无聊的检查,人工检查很合适去检查代码的逻辑和用法实际上是否成立。
De Raaij 写了一篇博文《我们软件的持续部署》,在文章中他解释了 Coolblue 是如何完成持续部署的。
仅仅开发软件是不够的。你还需要让它投入使用,并确保部署了高质量的软件且未对其造成破坏。
Paul de Raaij 将在敏捷和软件架构专题研讨会 2016 上讨论 Coolblue 的持续部署。InfoQ 有幸采访了他,请他谈了谈 Coolblue 的部署、持续部署的优势和缺点、质量保证的技术和实践、代码规范、应用监控,以及 Coolblue 面临的挑战和他们将如何应对。
InfoQ:什么使 Coolblue 决定要创造条件让开发人员自己完成部署的?
Paul de Raaij:我们希望软件尽快投入使用。这能帮我们快速得到我们开发的功能的反馈意见,并使用这些反馈去了解是否需要改变方向。我们也喜欢让开发团队对他们的产品有完全的所有权。举例来说,比如发布工程师正在转移责任,其关键就在于拥有完全的所有权。如果你破坏了它,就必须由你来修复它。没有人为你擦屁股。它会使大家拥有更高的责任感,使部署有更高的质量。
InfoQ:目前部署是如何来做的?
De Raaij:很难就此给出一个简单而又全面的答案,简短概括一下:我们使用 gitflow 工作流并将 GIT 作为分布式版本系统工具。当一名开发人员想要把他的新代码提交上线时,会创建一个 pull 请求。这个 pull 请求将会得到自动化和人工的审核。全都亮绿灯了?那么就会自动地把它打包并放到部署和验收测试服务器上。人工按一下按钮就会把它部署到生产环境。当然,这里面还有很多的内容,我将在 ASAS 会议上详细探讨。
InfoQ:持续交付的优势是什么?
De Raaij:它有很多的优势。对于初学者而言,如果做法正确,你就有能力把自己的软件部署到一台服务器上。通过各种检查工具的自动化检查,它将显示明确的质量水平。如果适当地设立了回归测试,你就能保障原有功能在你部署之后仍可正常工作。
InfoQ:有什么缺点吗?
De Raaij:在最后他仍然是个人工过程,是由人来配置的。它能轻松确保愉快路径,但有些东西仍有可能出错。所以在你的持续集成过程配置中有许多值得思考的地方。例如,如果你使用的在线服务(比如 GitHub)出故障了,那么会对你的流程造成什么影响?
另外还要想想你的开发团队的规模。500 个开发人员在同一流程中工作和只有两个人去做更新肯定会让你的持续集成流水线有完全不同的工作方式。所以,提前思考你的解决方案有怎样的可伸缩性。能否轻松地为代码检查增加额外的代理?在一个 pull 请求接受检查之前等待半个小时是否可行?
InfoQ:哪些技术和实践被 Coolblue 拿来用于质量保证?为什么?
De Raaij:我们使用了多种方法,它们也使人工和自动化检查更加多样化了。自动化检查能很好地完成冗长乏味的检查(比如 linting)、代码规范的检查、回归测试的执行。人工检查很合适去检查代码的逻辑和用法实际上是否成立,实际编码的内容是否实际解决了全部的使用案例。
InfoQ:如何应用编码规范?这么做会带来什么好处?
De Raaij:编码规范非常重要,能避免你的代码库变得混乱。如果每位开发人员都按自己的缩进、间距和命名规则的话,很快就会变得一团糟。这将极大影响软件和可交付物的质量,也会令开发人员的工作难以开展,迅速产生挫败感而恼怒不已。
在我们的案例中,代码规范大多数是遵循行业规范来定义的。比如我们的 PHP 规范就主要遵循了 PSR 的规范,同时又进行了少量的微调。
InfoQ:你们是如何监控应用的?
De Raaij:很多工具都在我们的监控中发挥着作用。针对机器的技术监控,我们严重依赖 Nagios 作为我们的监控应用。这实际关注的是机器的状态以及应用和守护进程是否在运行。在我们的软件生态中监控极其重要,所有应用都有自己的指标,我们将它们用于健康检查、洞察力和分析。这些指标通过一个 StatsD 像聚合器一样发送到数据日志。除了指标,我们还会利用 ELK 栈深入分析日志。
InfoQ:Coolblue 正在面临着什么挑战,你们将如何去应对它们?
De Raaij:完全的持续交付对于我们来说可是个大事。我们已经取得了相当的进展,但我们前方还有许多障碍,横在我们走向真正的自动化部署的路上。其中一个大的障碍是如何处理系统中的数据迁移,在我们应用的生态中它可是个大难题。如果我们解决了它,事实上就非常接近真正的持续部署了。
敏捷和软件架构专题研讨会 2016 将于 2016 年 9 月 28 日在荷兰阿纳姆的 GelreDome 球场召开:
ASAS 是一个具体解决方案驱动的会议,在这里技术带头人、软件架构师、业务分析师和工程主管能够了解和讨论交付软件解决方案的更好的方式,使其更适合于他们的用户。
InfoQ 将使用问答、总结和文章全程报导本次大会。
评论