文章目录
什么是敏捷开发
常用的的4种开发模式:
- 瀑布开发:需求分析、设计、编码、集成、测试、维护
- 迭代式开发:整个开发工作被组织为一系列小项目(需求分析,设计,实现与测试),
- 螺旋式开发:引入风险分析,特点—制定计划、风险分析、实施工程、客户评估
- 敏捷软件开发:开发周期更短,快速适应需求的变化
DevOps
是通过自动化的基本设施、自动化的工作流程和持续可测量的应用性能,来整合开发团队和运维团队,以达到更高的合作效率和生产率。
- 精益管理的7个原则:消除浪费、增强学习、延迟决策、快速交付、团队授权、内置完整性、考虑全局
- DevOps可以用一个公式表达:文化观念的改变+自动化工具=不断适应快速变化的市场
核心价值:更快速地交付,响应市场的变化和更多关注业务的改进与提升 - DevOps的开发流程:提交-》编译-》单元测试-》部署到测试环境-》预生产测试-》部署到生产环境
敏捷开发2.0解决的问题:
- 持续集成:要求团队成员经常集成其工作
- 持续交付:在持续集成的基础上,将集成后的代码部署到更贴近真实的运行环境的预生产环境中。
- 持续部署:所有通过了自动化测试ide改动都自动地部署到生产环境中。
为了实现敏捷开发2.0,我们需要采用持续部署、微服务和容器三种技术方案
- 持续部署:能够持续自动反馈应用程序的提交状态,减少错误等;同时为产品的交付提供了质量保证,能快速投入市场。
- 微服务:使技术选型、构架系统更自由;开发更快速、周期更短;服务更容易扩展
- 容器:使部署成百上千的微服务更加容易,系统更加稳定。
敏捷开发的自动化流程
持续集成
向代码库中提交代码-》静态代码分析-》部署前的单元测试-》打包部署到测试环境-》预生产环境测试
持续支付和持续部署
持续交付要求完美地实现所有预期,随时准备部署上线,在通过了全部的流程后,不再需要人工测试阶段,因为持续交付技术本身能够最大程度地保证所有编译结果都是正确的。持续部署能够全自动地把每一次通过编译测试的代码直接部署到生产环境中,是一套完整的自动化过程
敏捷开发的常用自动化工具
分布式版本控制工具Git
持续继承和持续交付工具Jenkins:
具有持续集成和持续交付的功能、安装简单、配置简单(web界面配置)、丰富的插件和扩展性、是分布式的,能很轻松地实现跨多主机或多平台的分布式部署。
基础平台管理工具SaltStack
采用C/S模式,其Server端是Master,Client端是Minion,Minion与Master之间通过ZeroMQ消息队列通信,是一个同时对一组服务器远程执行命令和状态管理的工具。
SaltStack的执行步骤:
- SaltStack的与Minion之间通过ZeroMQ进行消息传递,使用了ZeroMQ的发布-订阅模式,连接方式包括TCP、IPC
- 将cmd.run Is命令从salt.client.LocalClient.cmd_cli发布到Master,获取一个Jobid,根据Jobid获取命令的执行结果。
- Master接收到命令后,将要执行的命令发送给客户端Minion
- Minion从消息总线上接收到要处理的命令,交给minion._handle_aes处理。
- Minion._handle_aes发起一个本地线程调用cmdmod执行Is命令。线程执行完Is后,调用minion._return_pub方法,将执行结果通过消息总线返回给Master
- Master接收到客户端返回的结果,调用master._handle_aes方法,将结果写到文件中。
- Salt.client.LocalClient.cmd_cli通过轮询获取Job的执行结果,将结果输出到终端。
Docker容器化工具
基本组件
- Docker镜像(Image)是一个运行容器的只读模板
- Docker容器(Container)是一个运行应用的标准化单元
- Docker注册服务器(Registry)用来存放镜像
- Docker引擎(Docker Engine)用于在主机上创建、运行和管理容器
Docker的主要管理工具
- Docker Machine:让用户在基础架构平台上快速部署Docker宿主机
- Docker Swarm:让用户在集群环境中调度和运行容器
- Docker Compose:让用户在集群环境中编排和部署应用
- Kubernetes、Mesos:比较流行的第三方的管理编排工具