一 点睛
自动部署就是在部署的时候通过计算机自动执行全部命令,人最多只是做命令开始的触发工作,决策是否让计算机来执行操作,而不是驱动每个命令的手动执行。
同一项操作,由计算机程序完成,运行的速度和准确性是不变的。如果由人来完成,受到情绪、状态的影响,速度和准确性都会有差异。
二 准备
在实现自动化部署前,要保证依赖的环境、配置等都有一个统一的标准。
具有统一标准的底层能够简化程序的手写难度,让程序的主要流程都是处理发布相关的逻辑,从而减少对不同环境的判断,减少程序的分支。
统一标准也会降低工具出错的概率。
服务运行的操作系统版本、依赖的底层系统库、使用的程序框架,程序部署和产生文件的目录位置等程序依赖的环境都要统一标准。为了统一标准,架构师需要制定一套完善的标准,并且相关程序环境都要符合这个标准。
业务程序产生的日志文件也要统一。
尽量减少由于环境不一致导致结果不一致的情况,让自动化操作更简单,同时减低出错的概率。
随着容器技术和虚拟化技术的发展,统一环境的问题也变得越来越简单。
三 实现
要实现自动部署,可采用如下步骤:
1 梳理外部依赖
需要梳理上层应用系统所使用的依赖。
例如,依赖的接口权限,依赖的 Mysql、Redis、MQ 等权限,有什么特殊逻辑(例如,访问外网权限,开通哪些白名单),上层应用的基础软件有什么地方需要修改(例如,Nginx的特殊配置, 机器的参数等)。
2 部署文档化
无论是否实现自动化,对于部署操作,肯定不能只依赖开发人员的大脑记忆来操作,而是要先梳理出一份部署文档。这份部署文档要满足一个基本要求:另外一个位开发人员能够根据文档中的内容完成部署操作。
3 部署半自动化
把文档的每个步骤的操作都做成脚本,参数从命令行或配置文件中获取,由人工触发每一步操作的执行,人只影响每一步操作的顺序和每一步操作的参数的数值。
4 支持自动处理依赖
每个系统都提供 API 供外部调用,这是一个解决不同系统集成的好方法。
对于服务器的申请,可以通过调用云的 API 实现。
对于依赖软件的安装,也可以通过脚本结合云端的API来实现。
通过对外部API接口的调用来实现自动处理依赖是一个通用的集成方法。
5 全自动串联整体逻辑
实现自动处理依赖后,所有步骤都可以用程序来完成。可以把之前半自动化的部分集成起来,把每个步骤间的调用和转换也集成为一个统一的程序。运维人员只负责启动脚本。
6 开发测试验证程序
自动化部署后服务是否正常,也要有自动验证的程序。可以结合测试用例,跑通业务逻辑来测试是否可以对外提供服务。
7 最小化人工操作,可视化集成
整合运维操作中的多个步骤,尽量减少人工操作的步骤,同时嵌入可视化的系统之中,提升运维操作的体验。
四 验证
除了验证服务是否可用外,还要验证整体的自动化流程集成后是否正常运行。
有两种因素会导致再执行自动部署会失败。
1 从前的自动部署程序可能有问题,之所以上次成功,是因为出问题的部分被人工临时处理绕过去了。
2 系统在这段时间内升级,之前的自动部署脚本没有升级。
自动部署的方案和脚本做完后,要从头到尾完全利用自动工具执行一遍,类似于演戏,把所有曾经人工接入的部分都恢复成原样,或者干脆申请一套新环境,提前演习一遍。
演习是一种有效的验证策略,在没有发生问题的时候预演处理过程。如果发现问题,则可以为解决问题提供充足的时间。