对于一个简单的项目来说,使用一些常用的 IDE 就可以满足对项目的构建和测试,但对于一些比较复杂的项目,需要多人协作开发,那么使用脚本来执行应用程序的构建、测试和打包是很有必要的。不管我们是采取哪种方式对项目进行构建和部署,我们都应该使其一直保持活力,也就是说这个系统不仅要从项目开始就开发,而且一直要持续到软件在生产环境中的维护阶段。
一 构建工具概览
一个项目如果是采用手动的方式去构建的话,缺点显而易见可。所有采用合适的构建工具是必不可少的。对于构建工具来说,它们都有一个共同的核心功能,即对依赖关系建模,在执行过程中,可以以正确顺序去执行一系列的任务,计算如何达到你所指定的目标,而且被依赖的任务只需要被执行一次也应该只被执行一次。举个栗子:当我们想要去运行测试时,构建工具就可以帮我们把运行测试之前的一些操作执行了(初始化测试数据、编译测试)。一个简单的构建依赖关系图:
简单的构建依赖图对于图中的每一个任务它都包含两个特点:
- 这个任务是做什么的
- 这个任务所依赖的是什么
对于构建工具可以分为:
- 产品导向:依据一系列的任务描述依赖网络
- 任务导向:根据它们生成的产物来描述的
二 构建部署脚本化的原则与实践
- 为部署流水线的每一个阶段创建脚本
把创建的脚本和源代码放在同一版本库中。 - 使用恰当的技术部署应用程序
- 使用同样的脚本向所有环境部署
- 使用操作系统自带的包管理工具
- 确保部署流程是幂等的
目的是为了在开始部署时目标处于何种状态,部署流程也应该总是令目标环境达到同样(正确)的状态,并以之为结束点。 - 部署系统的增量式演进
三 部署脚本化
对于一个复杂的项目来说,手动的去进行项目部署会消费很大的精力,而出错的几率也是非常大的,所以我们应该去避免手动去部署。这也是环境管理的核心原则之一,即测试和生产环境的修改只能由自动化过程去执行,我们不应该手动远程登录到这些环境中去部署工作,而应该完全脚本化。脚本化部署的三种方式:
- 写一个脚本,让其登录到每台机子上,运行适当的脚本集
- 写一个本地运行的脚本,在每一个机器上装一个代理,由代理在器共宿主机上运行该脚本
- 利用系统自身的包管理技术去打包应用程序,然后使用一些工具拿到最新版,运行必要的工具去初始化中间件。
疑问
- 部署流程的幂等是什么意思
- 为什么说 利用系统自身的包管理技术去打包应用程序,然后使用一些部署工具拿到最新版,运行必要的工具去初始化中间件 这个方式的脚本化部署是最强大的?
网友评论