持续交付之六——构建与部署的脚本化
2016-05-01 17:06
281 查看
其他持续交付相关文章:《持续交付》系列文章目录
自动构建
自动部署
构建和部署系统一直要保持活力,这个系统不仅要从项目开始就开发,而且一直持续到产品到上线维护阶段,细心设计和维护它,像对待项目源代码一样,并定期使用,确保我们每次想用时,都能正确运行
三个问题
项目结构死板
扩展它要写代码(mojo插件)
默认情况下,自动更新,可能会导致某次构建无法重现
依赖和配置惯例参见第十三章
记住,部署脚本一定要放在版本控制库中
很难实现,作为目标前进吧
任何生成的配置或元数据都应放在target下
单元测试与源代码对应
版本控制库应该忽略target目录
确保应用程序所有依赖都与应用程序的二进制包一起打包
第二层,操作系统,操作系统配置
第三层,中间件,中间件配置
第四层,应用/服务/组件,应用配置
保证下一层是准确的,可控的,稳定的配置,再开始上一层的部署
确认能从数据库拿到一条记录
确认能连上网站
断言消息代理中的已注册的消息集合是正确的
透过防火墙发送几次“ping”命令,证明线路是通的,且各服务器之间提供了一个循环分配负荷
关于基础设施管理,第十一章有更详细的描述
当做第二次时要警觉,当你需要重复做第三次时,就把它自动化
第六章 构建与部署的脚本化
1. 引言
要实现自动构建
自动部署
构建和部署系统一直要保持活力,这个系统不仅要从项目开始就开发,而且一直持续到产品到上线维护阶段,细心设计和维护它,像对待项目源代码一样,并定期使用,确保我们每次想用时,都能正确运行
2. 构建工具概览
由于我使用Java,用Maven构建,所以其他相关工具略过2.1. Make
略2.2. Ant
略2.3. NAnt与MSBuild
略2.4. Maven
惯例由于配置三个问题
项目结构死板
扩展它要写代码(mojo插件)
默认情况下,自动更新,可能会导致某次构建无法重现
依赖和配置惯例参见第十三章
2.5. Rake
略2.6. Builder
略2.7. Psake
略3. 部署构建脚本化的原则与实践
3.1.为部署流水线的每个阶段创建脚本
刚开始可能只需要一个脚本,但是项目大了之后就要拆分,易于管理和维护记住,部署脚本一定要放在版本控制库中
3.2. 使用恰当的技术部署应用程序
部署脚本应该能完成应用程序的安装和升级任务,在部署之前,他要能关闭当前运行的版本,而且既支持在当前数据库上升级,又能从头创建数据库3.3. 使用同样的脚本向所有环境部署
将部署脚本和需要用到的配置信息分离开来,详情可参见第二章3.4. 使用操作系统自带的包管理工具
让自己的应用程序包的安装也想apache的安装一样3.5. 确保部署流程是幂等的
确保每次部署都以已知状态良好的环境作为起点很难实现,作为目标前进吧
3.6. 部署系统的增量式演进
逐步完善,每自动化一个过程,就是一个进步4. 面向JVM的应用程序的项目结构
推荐使用Maven,Maven最大的贡献就是标准化了项目结构任何生成的配置或元数据都应放在target下
单元测试与源代码对应
版本控制库应该忽略target目录
确保应用程序所有依赖都与应用程序的二进制包一起打包
5. 部署脚本化
核心原则:对测试和生产环境的修改只能由自动化过程执行5.1. 多层的部署和测试
第一层(最底层),硬件第二层,操作系统,操作系统配置
第三层,中间件,中间件配置
第四层,应用/服务/组件,应用配置
保证下一层是准确的,可控的,稳定的配置,再开始上一层的部署
5.2. 测试环境配置
简单的冒烟测试,证明我们的配置可以工作,可以从如下几方面入手确认能从数据库拿到一条记录
确认能连上网站
断言消息代理中的已注册的消息集合是正确的
透过防火墙发送几次“ping”命令,证明线路是通的,且各服务器之间提供了一个循环分配负荷
关于基础设施管理,第十一章有更详细的描述
6. 小贴士
6.1. 总是使用相对路径
如果不可避免要使用绝对路径,尽可能将这部分内容独立出来,不要让它影响构建系统的其他部分6.2. 消除手工步骤
枯燥,极易出错,文档容易过时当做第二次时要警觉,当你需要重复做第三次时,就把它自动化
6.3. 从二进制包到版本控制库的内建可追溯性
保证知道哪个二进制包是哪个版本库的哪个版本生成的6.4. 不要把二进制包作为构建的一部分放到版本控制库中
6.5. “test”不应该让构建失败
不要一碰到错误就失败,最好都执行一遍流程,报告出所有错误,再失败6.6. 用集成冒烟测试来限制应用程序
部署前简要测试一下机器是否正确,环境是否正确等6.7. .NET小贴士
略7. 小结
以迭代的方式来识别最令你痛苦的步骤,并将其自动化,沿着部署流水线,逐步完善自动化构建和部署能力。请时刻牢记最终目标,即在开发、测试和生产环境中共享同一种部署机制,但不要过早地纠结于工具的创建相关文章推荐
- poj 1002 487-3279
- ERROR! The server quit without updating PID file (/var/lib/mysql/service.pid).
- 梦断代码阅读笔记01
- 《Java程序设计》第9周学习总结
- [解决]UserLibrary中的jar包不会自动发布Tomcat的lib目录下(基于MyEclipse2014)
- spark源码阅读笔记RDD(五) RDD中的checkpoint原理
- C++类中const函数与非const函数的调用规则
- 学习安排
- mipmap 只是放 launcher icons
- loadbalancer linux下tomcat负载均衡配置
- GBDT 学习
- DP 动态规划 Problem M 1013 母牛问题
- 欢迎使用CSDN-markdown编辑器
- poj 1007 DNA Sorting
- 20160501--struts2入门2
- Poj 2907 Collecting Beepers【枚举+最短路径】
- vSphere-03 Adding the ESXi host to the vCenter
- 单例模式例子
- n位数乘一位数
- leetcode 063 Unique Paths II