当有版本通过持续集成流水线进行构建之后,就可以将其部署至某个具体的环境,这就需要自动化部署技术,将这个自动化部署和持续集成流水线连接起来,就可实现持续部署。如图1所示,实现持续部署的前提是至少拥有一条完整的自动化构建、部署、测试和发布流程。
传统软件的部署模式通常有如下几种。
□ 通过纯手工的方式来部署应用软件。
□ 在开发人员完成代码以后,才在生产环境做部署。
□ 运维人员在生产环境通过手工方式修改配置。
这 3 种方式的执行效率较低,发布质量也没有稳定的保障,极大地限制了IT系统对业务的能力支撑,坚持传统部署模式,已经不能满足灵活多变的市场需求。DevOps 持续部署的适时出现,既解决了执行效率问题,又保障了交付质量。
持续部署作为 DevOps 流水线上的重要环节,在实施的过程当中有哪些场景是需要重点关注的,我们来看一下持续部署的关键要素有哪些。
(1)部署的执行者必须参与创建部署的过程,也就是说工程师需要完全参与每一个具体的过程,亲身经历部署过程。
(2)在整个部署过程当中,应该详细、明确地记录下每一个环节的所有经过以及相关活动的输入输出,通常不会选择去删除整个部署过程当中相关的或产生的任何数据,而是采用转移的方式,统一保存到规划好的地方,这样一方面方便做数据的回滚,另一方面也方便在对历史版本去做追溯的时候能够有据可查。
(3)持续部署是整个团队的共同责任,我们通常认为部署是运维人员的职责,而 DevOps 强调的是开发、运维一体化。每一次部署目标都是团队内的成员共同努力的结果,持续部署的本质是对团队交付成果的一次检验。
(4)新的部署动作应该采用预发布的方式,在准生产环境或者测试环境预先部署并验证,避免给生产环境带来不可控的直接影响。对应方法有蓝绿发布、金丝雀发布等模式。
(5)积极面对快速失败。DevOps 方法论里一直在强调敏捷,敏捷就代表着快速,越快的失败,能够越快地给我们带来结果的反馈,也方便我们能够尽快地发现过程中出现的任何问题,促进问题的分析定位和修复。
(6)统一的启动脚本。持续部署通常会面临同一应用程序在不同阶段的不同环境,在不同环境采用不一致的启动方式,非常容易导致测试环境和生产环境的不一致,因此 DevOps 要求准备统一的启动脚本,并通过传参的方式来调用,从而保障同一应用程序在不同环境的一致性部署。