持续交付11-构建和部署的脚本化

构建和部署的脚本化

自动化部署:部署应用运行需要的环境.包括了配置应用程序,初始化数据,配置基础设施,操作系统,中间件,安装所需的模拟外部系统等.

脚本:指辅助构建,测试,部署和发布应用程序的指令集.持续交付中自动化脚本应该贯穿应用的整个生命周期.

构建工具:用于自动化构建的辅助工具.功能包括:初始化,设置测试数据,编译源代码,编译测试,运行测试.

分类:任务导向,产品导向.

任务导向:根据一系列任务描述依赖网络.每个任务知道自己是否已经执行,且不会记录执行状态.
产品导向:根据生成的产物描述依赖网络.每一步会生成对应的文件,文件中记录执行状态和时间戳.

构建工具概述:

  1. make.产品导向构建工具.能在单次构建中追踪依赖关系,还只构建受本次修改影响的组件.缺点:复杂应用和依赖难以调试;特殊字符敏感;依赖脚本环境;
  2. ant.任务导向.Java语言的跨平台,灵活.缺点:xml语法不简洁,不易读;领域模型理解不到位;声明式语言,不易理解;测量指标难以使用;
  3. Nant,MSBuild..net版的ant.问题跟上面类似.
  4. maven.任务导向.约定胜于配置来简化配置,进行命令式构建;自动依赖管理;问题:必须要遵守约定,灵活性较差;xml写dsl;配置依赖更新第一次耗时,且不易回退;
  5. Rake.产品导向.ruby语言.调试方便;通用语言;缺点:只能理解任务和依赖;依赖ruby运行环境;需要组合使用rubygems.
  6. buildr,gradle,gantt.任务导向,内部dsl构建.约定优于配置;定制任务和创建新任务很容易;
  7. psake.window的内部dsl构建工具.

解决什么问题

规范构建和部署流程;
介绍一些构建工具和技巧;

怎么做

构建部署脚本化的原则

  1. 为部署流水线每个阶段创建脚本.保持脚本的良好结构.
  2. 使用恰当的技术部署应用程序.
  3. 使用同样的脚本向所有环境部署.
  4. 使用操作系统自带的包管理工具.集中统一管理
  5. 确保部署流程是幂等的.需要结合良好的配置管理达到部署状态已知的状态.最好是修改时全流程部署,但是针对分布式服务,组件的情形,已经进行了版本测试的化,单独部署效果会更好.
  6. 部署系统的增量式演进.找到自动化脚本部署切入点,不断增加自动化比例,逐渐实现部署流程的自动化.

部署脚本化

环境管理的核心原则之一是:对测试和生产环境的修改只能由自动化过程执行.实际部署方式有三种:

  1. 写个远程登录脚本,执行对应的指令集;
  2. 写个本地执行脚本,通过代理来触发该脚本;
  3. 通过一些基础设施管理或部署工具来执行部署.需要通过操作系统自身包管理工具打包,进行环境初始化操作.

实践技巧

  1. 总是使用相对路径.便于不同环境的部署
  2. 消除手工步骤.避免手工文档的维护失真
  3. 从二进制包到版本控制库的内建可追溯性.二进制包中存放版本库构建版本标识
  4. 不要把二进制包作为构建的一部分放到版本控制库中.简化版本控制库,二进制包可重复构建
  5. 测试不应让构建失败.一次性构建整个阶段后再反馈测试中问题,避免异常退出操作,最大化单次构建价值.
  6. 用集成冒烟测试来限制应用程序.
  7. 删除代码中的无用文件.
原文地址:https://www.cnblogs.com/chengmuyu/p/13355919.html