6.1 应该如何部署

    用一句话来概括这一章就是“所有部署相关的作业都应该实现自动化”。这里所说的部署是指将开发的代码以能够使用的状态放置到服务器上这一连串行为。把 WAR 文件上传到 Tomcat 等容器上的行为也可称为部署,但这个是更为广义上的部署。本章和《持续交付》1 在内容上虽然有重复的部分,但本书更为简明易懂,笔者将根据自身过去数百次的部署经验,对部署的自动化进行简单的说明。重点对部署的最优方法以及简化部署的工具的使用方法进行讲解。

    1 《持续交付:发布可靠软件的系统方法》David Farley、Jez Humble 著,乔梁译,人民邮电出版社,2011

    6.1.1 部署自动化带来的好处

    实现部署的自动化会带来哪些改善?首先我们来说一下自动化部署的优点。

    ●…… 细粒度、频繁地发布可以使风险可控

    部署工作本身就不是一件轻松的事情,如果几个月才能实施一次部署的话,程序就会有多个部分产生大量的代码修改。所有的修改都能正常运行自然最好,但现实往往并非如此。考虑到多个较大的故障同时发生所造成的严重后果,这的确是个棘手的问题。而如果实现部署的自动化和简易化,就能够频繁地实施部署,由此对故障规模进行控制就成为了可能。

    ●…… 能尽快地获得用户的反馈

    部署得越早,就能获得越多的用户反馈。尽快让用户体验新开发的功能,并将用户的反馈反映到下一阶段的开发中,若能形成这样的良性循环,就能确立市场的优势地位。通过频繁地进行部署来回收开发的投资,才可能产生收益。

    但上述情况的前提条件是:必须要有接受用户的反馈并反映到开发中的流程。具体来说包括分析用户的评论、意见以及系统的日志等,本章对此不做讲解。

    ●…… 团队的规模可控

    如果有 10 个产品,采用 10 种不同的方法手动实施部署的话会怎么样?每个产品每月至少会有 1 次部署的工作,那么负责部署的运维团队就需要专门的人员来实施部署。如果运维团队的人手不足,就可能发生新产品无法部署的事态。而如果实现了自动化部署,就不必担心运维团队的人手不足,这样就能够推出新产品并获得用户反馈。借助部署自动化,团队人数的规模变得可控,因此可以放心地增加产品数量。