1.5 声明式脚本流水线的意义
声明式脚本流水线同时借鉴了声明式和命令式的优势,结合持续部署阶段、流水线化的特性,创造性地将两者进行整合,对更好地描述持续部署的阶段、降低纯声明式的学习曲线及落地持续部署具有重要的意义。
1.5.1 简化行为描述
声明式脚本流水线最重要的意义之一是简化了持续部署的行为描述。
如果使用纯命令式实现持续部署,那么需要运行一组有顺序的命令,但这组命令描述的是运行过程,而不是期望的最终状态。因此需要考虑命令的中间过程和状态,并解决重试、幂等问题,这将使持续部署各阶段的编程变得非常复杂。
而声明式脚本流水线提供了部分声明式状态描述和部分命令式的方案,既简化了对持续部署的行为描述,又解决了在特殊场景下必须要采用类似命令式的思想来实现部署流程控制的问题。
1.5.2 降低学习曲线
对于纯声明式的系统来说,由于系统隐藏了中间过程和状态,使用者只需定义最终状态,所以用户需要熟悉其声明式的用法,这将导致较高的学习曲线,尤其是在复杂的场景下对其声明式的定义,往往无法通过完全人工的方式来书写。
声明式脚本流水线可以结合图形化的配置,并将其转化为声明式的代码,这样能够极大程度地降低学习曲线。此外,脚本流水线保留了部分命令式的思想,使得在新增和修改配置脚本时能够根据类似命令行的参数形式进行书写。
1.5.3 落地持续部署
在任何一个技术团队内,落地持续部署都不是一件简单的事。持续部署本身是一种工程实践,也需要迭代升级,并通过不断实践最终建立符合团队和业务需求的持续部署方案。
声明式脚本流水线通过代码来描述持续部署流水线,这样对流水线的版本管理就转变成了对代码的版本管理,使得利用类似Git的版本管理工具管理流水线成为了可能。在流水线不断升级迭代的过程中,始终能够保留变更记录并可追溯,甚至对流水线的版本回退,这有利于在落地持续部署的过程中更高效地修改流水线。
1.5.4 实现自动化
声明式脚本流水线本身不为持续部署提供自动化的方案,而是通过对触发器(Trigger)的声明式描述来实现。
我们一般认为,触发器是启动持续部署流水线的入口,其有多种类型,且每种触发器条件、行为、触发规则可能会有一定的差异,这就需要使用声明式的方法对触发器进行特征描述。
持续部署流水线结合预定义的触发器,能够非常快速地实现自动化,例如通过声明描述Webhook触发器,结合上游持续构建系统,便能够通过事件的方式自动触发持续部署流水线,进而实现流水线自动化。