持续交付:发布可靠软件的系统方法
上QQ阅读APP看书,第一时间看更新

第一部分 基础篇

1章 软件交付的问题

1.1 引言

作为软件从业人员,我们面临的最重要问题就是,如果有人想到了一个好点子,我们如何以最快的速度将它交付给用户?本书将给出这个问题的答案。

我们将专注于构建、部署、测试和发布过程,因为相对于软件生产全过程的其他环节来说,这部分内容的论著较为稀少。确切地说,我们并不认为软件开发方法不重要,如果没有对软件生命周期中其他方面的关注,只把它们作为全部问题的次要因素草率对待的话,就不可能实现可靠、迅速且低风险的软件发布,无法以高效的方式将我们的劳动成果交到用户手中。

现在有很多种软件开发方法,但它们主要关注于需求管理及其对开发工作的影响。市面上也有很多优秀的书,它们详细讨论了在软件设计、开发和测试方面各种各样的方法,但它们都仅仅讲述了将软件交付给作为客户的人或组织这一完整价值流的一部分。

一旦完成了需求定义以及方案的设计、开发和测试,我们接下来做什么?我们如何协调这些活动,尽可能地使交付过程更加可靠有效呢?我们如何让开发人员、测试人员,以及构建和运维人员在一起高效地工作呢?

本书描述了软件从开发到发布这一过程的有效模式。书中讲述了帮助大家实现这种模式的技术和最佳实践,展示了它与软件交付中其他活动是如何联系的。

本书的中心模式是部署流水线。从本质上讲,部署流水线就是指一个应用程序从构建、部署、测试到发布这整个过程的自动化实现。部署流水线的实现对于每个组织都将是不同的,这取决于他们对软件发布的价值流的定义,但其背后的原则是相同的。

部署流水线的示例如图1-1所示。

图1-1 一个简单的部署流水线

部署流水线大致的工作方式如下。对于应用程序的配置、源代码、环境或数据的每个变更都会触发创建一个新流水线实例的过程。流水线的首要步骤之一就是创建二进制文件和安装包,而其余部分都是基于第一步的产物所做的一系列测试,用于证明其达到了发布质量。每通过一步测试,我都会更加相信这些二进制文件、配置信息、环境和数据所构成的特殊组合可以正常工作。如果这个产品通过了所有的测试环节,那么它就可以发布了。

部署流水线以持续集成过程为其理论基石,从本质上讲,它是采纳持续集成原理后的自然结果。

部署流水线的目标有三个。首先,它让软件构建、部署、测试和发布过程对所有人可见,促进了合作。其次,它改善了反馈,以便在整个过程中,我们能够更早地发现并解决问题。最后,它使团队能够通过一个完全自动化的过程在任意环境上部署和发布软件的任意版本。