持续交付(Continuous Delivery)和持续部署(Continuous Deployment)的区别
持续交付并不是指软件每一个改动都要尽快的部署到产品环境中。它指的是任何的修改都已证明可以在任何时候实施部署。
— Carl Caum (@ccaum) August 28, 2013
我在上周三写的这条微博。它在微博上激起了活跃的讨论,周四的时候已经被转发了87次,获得了25个赞。
很显然,这是个很火的话题,很多人对持续交付和持续部署之间的区别很困惑。有必要用超出微博字数限制的文字来说说这个概念。
持续交付(Continuous Delivery)是一系列的开发实践方法,用来确保让代码能够快速、安全的部署到产品环境中,它通过将每一次改动都提交到一个模拟产品环境中,使用严格的自动化测试,确保业务应用和服务能符合预期。因为使用完全的自动化过程来把每个变更自动的提交到测试环境中,所以当业务开发完成时,你有信心只需要按一次按钮就能将应用安全的部署到产品环境中。
@ccaum @steveburnett 我想很多人都混淆了“交付”和“部署”。
— Magnus Hedemark (@Magnus919) August 29, 2013
持续部署(Continuous deployment)是持续交付的更高阶段:所有通过了自动化测试的改动都自动的部署到产品环境里。大多数的公司如果没有制度的约束或其它条件的影响,都应该以持续部署为目标。
有很多的业务场景里,一种业务需要等待另外的功能特征出现才能上线,这使得持续部署成为不可能。虽然使用功能切换能解决很多这样的情况,但并不是每次都会这样。所以,持续部署是否适合你的公司是基于你们的业务需求——而不是技术限制。
Inspired by Yassal Sundman’s blog post on Crisp’s Blog.
虽然持续部署并不适合所有公司,但持续交付绝对应该是每个公司需要追求的目标。只有当你能够持续交付你的代码时,你才能有信心通过点击“go”按钮,在几分钟内让你的修改提交给客户、服务于客户。才有信心在任何时候——一旦业务允许——可以立即点这个按钮。