配置管理
问:配置管理什么?
答:配置管理是一个过程。通过这个过程,所有与项目相关的产物,以及他们之间的关系都被唯一定义、修改、存储和及检索。
配置管理策略
- 记录你的系统及应用程序的演进过程
- 对团队成员协作方式的管理
1.为管理应用程序的构建、部署、测试和发布过程做好准备。
2.管理应用软件的配置信息
3.整个环境的配置管理,这包括应用程序所依赖的软件、硬件和基础设施。
环境管理背后的原则,包括操作系统、应用服务器、数据库和其他商业现货(COTS)软件.
2.2使用版本控制
1. 对所有内容进行版本控制
- UNIX下的专属工具——SCCS(源代码控制系统)
- RCS(修订控制系统)
- CVS(并发版本控制系统)
- 开源工具——Subversion、Mercurial和Git
将所有的东西都提交到版本控制是重要前提——持续集成、自动化测试、一键式发布和部署
版本控制的目的:
1.对于我们开发的应用软件,某个特定的版本由哪些文件和配置组成
如何再现一份与生产环境一模一样的软硬件环境
2.什么时候修改的内容,是谁修改的,以及为什么要修改
2.频繁提交代码到主干
(1)提交代码之前运行测试套件
(2)增量式引入变化提交代码
3.使用意义明显的提交注释
2.3依赖管理
1.外部库文件管理
外部库文件以二进制的形式存在,除非使用解释型语言;
通常安装在全局系统路径中,并由包管理系统来管理(Ruby的Gems和Perl的modules)
2.组件管理
组件之间相互关联,敲几行代码,就可以以正确的顺序构建组件。
2.4软件配置管理
1.配置与灵活性
先提供具有高价值且可配置程度较低的功能,再根据需要添加可配置选项。
2.配置的分类
(1)在生成二进制文件时,构建脚本可以在构建时引入相关配置项。
(2)不建议构建或打包时将配置项植入,应将相同的二进制安装包向所有的环境中部署——确保发布的软件被测试过。相邻的两次部署之间,任何变更都应被作为配置项捕获和记录。
(3)软件在启动或运行时可获取其配置项。
(4)在安装部署软件程序时,部署脚本或安装程序可获得必要的部署信息。
3.应用程序的配置管理
(1)如何描述配置信息?
- 通常以键值对的形式来表示;
- 应用软件的配置信息一般保存在:数据库、版本控制库、文件目录或注册表;
- 配置信息的安全性:特定于测试环境或生产环境的配置信息有必要存放于与源码分离的单独代码库中。例:不要把密码签入到版本控制系统中;不要把密码硬编译到应用程序中。
(2)获取配置信息
- 文件系统(跨平台和各语言的支持)缺点:集群时,配置信息同步成为问题。
- 从某个中心库中获取信息
- 开源工具ESCAPE通过REST式接口获取和管理配置信息
- 应用程序可执行HTTP GET请求,在URI中包含应用程序名和环境名称。(在部署和运行时的配置信息更有效)
- 将环境名称传给部署脚本,再由部署脚本从配置服务获取配置信息
(3)为配置项建模
配置信息由元组构成。元组及取值取决于:应用程序、应用程序的版本、该版本所运行的环境。
不同环境管理配置信息的方法:把预期的生产环境的配置信息作为默认信息,在其他环境中,通过适当的方式覆盖默认值。
(4)系统配置的测试
- 保证配置设置中对外部服务的引用是良好的
- 当应用程序一旦安装好,就要在其上进行一些冒烟测试(若应用程序所依赖的任何部分没有准备好,部署或安装脚本都应该报错),以验证它正常运行。
4.跨应用的配置管理
为每个应用程序维护一份所有配置选项的索引表,记录配置保存在什么地方,生命周期以及怎样修改他们。
5.管理配置信息的原则
(1)在应用程序的生命周期中,应该在什么时候注入哪类配置信息
(2)将应用程序的配置项与源代码保存在同一个存储库中,但要把配置项的值保存在别处。
(3)通过自动化的过程将配置项从保存配置信息的存储库中取出并设置好。
(4)配置系统应该能依据应用、应用软件的版本、将要部署的环境,为打包、安装以及部署脚本提供不同的配置值。
(5)对每个配置项有良好的命名习惯(易懂)
(6)配置信息模块化且封闭
(7)DRY(Don't Repeat Yourself);是每个配置元素在整个系统中唯一
(8)最少化,即配置信息尽可能简单且集中。
(9)确保测试已覆盖到部署或已安装时的配置操作。
2.5环境管理
高效配置管理策略的两个原则
- 将二进制文件与配置信息分离
- 将所有的配置信息保存在一处
1.环境管理工具
Puppet和CfEngine、虚拟化技术
2.变更过程管理
应该用相同的机制来管理、配置、部署生产环境和测试环境
未经组织内部正式的变更管理过程,不得修改生产环境
总结与感悟
- 配置管理是基础,没有配置管理,就没有持续集成、发布管理和部署流水线。
- 依靠保存在版本控制中的数据,可以从无到有重建生产系统。
- 可以将应用程序回滚到以前某个正确的状态下。
- 确保在测试、试运行、正式上线时,以同样的方式创建部署环境。
- 对于第一章的问题,理解了新成员可以快速的构建应用程序、修改代码会给出提示、怎样控制使其自动化及可返回待发布的版本,都是通过版本控制实现的
- 对配置项建模及怎样配置还不是特别理解.......