4.4 自动化与自助化

我们先从自动化讲起。自动化可以节省时间,因为机器比人做得快;自动化可以节省成本,因为不需要为机器付工资;自动化可以带来可重复性,因为机器严格按照人预先编排好的方法来执行;自动化可以完备记录当时的执行情况,便于将来追溯、排查和审计。所以凡是有明确规则的、只要按照规则来执行和判断就可以的活动,都应该考虑实现自动化。

4.4.1 单项活动的自动化

对于单项活动的自动化,比如自动化构建、自动化安全扫描、自动化部署、自动化测试、自动化监控,要尽量提高自动化的程度。以部署为例,在各台服务器上执行脚本部署,这实现了一定程度的自动化,而再进一步,则是要实现在工具平台上一键完成部署。对于自动化测试,除了要关注测试执行的自动化,还要考虑测试脚本编写本身一定程度的自动化,比如自动化生成一些框架性内容。

4.4.2 流程的自动化

对于流程的自动化,典型的持续交付流水线就是指把各项活动串起来,尽管其中有些活动本身可能还没有做到自动化,比如人工审批环节。

当特性分支开发完成后,通过Pull Request或者Merge Request过程合入集成发布分支。如果Pull Request/Merge Request包含了一些流程控制,那么它也实现了某种流程的自动化。比如设置为,只有当特定评审人进行人工评审并通过,且自动触发的构建、代码扫描、单元测试等活动也执行通过时,才能算作Pull Request/Merge Request通过并完成合入。

OA(Office Automation,办公自动化)语境下的工作流,比如“一次申请—审批—流转—跟踪—催办”,也是某种流程的自动化。典型的,如一个申请线上变更的工单的流转。当然,如果在审批通过后触发自动执行变更,那么它就进而触发了单项活动的自动化。

4.4.3 自助化

自动化工具要好用,其中比较重要的一点是,用户可以方便地自行配置使用,也就是自助化。以应用部署为例,最基本的自动化是指由专职人员(这里指运维人员)登录到服务器运行脚本,如果做得好,则应该是由普通使用者(通常指开发人员)做一些简单的配置之后,每次点击一下按钮,就能完成部署全过程,将应用程序的新版本分批部署到各台服务器上。

事实上,不仅是自动化工具要好用,实现自助化,而且凡是与软件交付过程相关的软件工具、软件服务,也都应该操作便捷,实现自助化。

4.4.4 相关支持

为了能够自助使用工具,对工具的使用权限应该适当放开。不要总是想着通过限定哪些人可以使用工具让操作更安全,因为这会带来不同角色之间沟通、协作的成本,是不得已才使用的方法;而是应该尽量通过使工具更容易掌握和使用,以及通过增加工具的防护措施来避免人为出错,让操作更安全。

另外,所有的软件工具、软件服务都要有明确的负责人来负责其运维工作,以保证其稳定性甚至高可用性。