简介
DevOps=开发(Development)+运维(Operations),是打通开发与运维之间的壁垒,促进开发、运营和质量保障(QA)等部门之间的沟通协作,以便对产品进行小规模、快速迭代式地开发和部署,快速响应客户的需求变化。强调的是开发运维一体化,加强团队间的沟通和快速反馈,达到快速交付产品和提高交付质量的目的。
DevOps并不是一种新的工具集,而是一种思想,一种文化,用以改变传统开发运维模式的一组最佳实践。一般做法是通过一些CI/CD(持续集成、持续部署)自动化的工具和流程来实现DevOps的思想,以流水线(pipeline)的形式改变传统开发人员和测试人员发布软件的方式。随着Docker和Kubernetes(以下简称k8s)等技术的普及,容器云平台基础设施越来越完善,加速了开发和运维角色的融合,使云原生的DevOps实践成为以后的趋势。
强调组织的沟通与协作
持续集成
持续集成(CONTINUOUS INTEGRATION,CI)指的是开发人员频繁的(一天多次的)将所有开发者的工作合并到主干上。这些新提交在最终合并到主线之前,都需要通过编译和自动化测试流进行验证,以保障所有的提交在合并主干之后的质量问题,对可能出现的一些问题进行预警。持续集成的核心在于确保新增的代码能够与原先代码正确的集成。
持续集成流程示意图
持续集成带来的好处是:
• 易于定位错误
• 易于控制开发流程
• 易于Code Review
• 易于减少不必要的工作
持续交付
持续交付的意思就是在不影响用户使用服务的前提下频繁把新功能发布给用户使用,要做到这点非常非常难。我们现在两周一个版本,每次上线之后都会给不同的用户造成不同程度的影响。
它更多是代表一种软件交付的能力,过程示例请参考图:
持续部署
持续部署(CONTINUOUS DEPLOYMENT)指的是通过自动化部署的手段将软件功能频繁的进行交付。与持续交付以及持续集成相比,持续部署强调了通过自动部署的手段,对新的软件功能进行集成。同持续交付相比持续集成的区别体现在对生产的自动化。从开发人员提交代码到编译、测试、部署的全流程不需要人工的干预,完全通过自动化的方式执行。这一策略加快了代码提交到功能上线的速度,保证新的功能能够第一时间部署到生产环境并被使用。
云原生DevOps特点
DevOps是PaaS平台里很关键的功能模块,包含以下重要能力:支持代码克隆、编译代码、运行脚本、构建发布镜像、部署yaml文件以及部署Helm应用等环节;支持丰富的流水线设置,比如资源限额、流水线运行条数、推送代码以及推送镜像触发流水线运行等,提供了用户在不同环境下的端到端高效流水线能力;提供开箱即用的镜像仓库中心;提供流水线缓存功能,可以自由配置整个流水线或每个步骤的运行缓存,在代码克隆、编译代码、构建镜像等步骤时均可利用缓存大大缩短运行时间,提升执行效率。具体功能清单如下:
- 缓存加速:自研容器化流水线的缓存技术,通过代码编译和镜像构建的缓存复用,平均加速流水线3~5倍;
- 细粒度缓存配置:任一阶段、步骤可以控制是否开启缓存及缓存路径;
- 支持临时配置:用户无需提交即可运行临时配置,避免频繁提交配置文件污染代码仓库;
- 开箱即用的镜像仓库;
- 提供完整的日志功能;
- 可视化编辑界面,灵活配置流水线;
- 支持多种代码仓库授权:GitHub、GitLab、Bitbucket等;
- 多种流水线触发方式:代码仓库触发,镜像推送触发等;
- 网络优化,加快镜像或依赖包的下载速度;
- 从商业决策上由基于Gate(Charter/DCP)的业务决策,转变为基于OBP的周期性审视;
- 从服务化组织上,支持E2E全功能团队,开发运维一体化,对团队充分授权;
- 从架构上进行服务化解耦,支持按服务小包独立交付;从开发和运维流程上,加强开发与运维的协同,支持更短的周期,更快的反馈;
- 从IT工具环境上,重用已有的成熟工具,引入先进的开源和商用软件,实现轻量级端到端DevOps工具链;
- 从服务流程上,支持服务的独立交付,自动化的环境部署