从代码到上线, 云端Docker化持续交付实践
2016云栖大会·北京峰会于8月9号在国家会议中心拉开帷幕,在云栖社区开发者技术专场中,来自阿里云技术专家罗晶(瑶靖)为在场的听众带来《从代码到上线, 云端Docker化持续交付实践》精彩分享。
关于分享者:
罗晶,花名瑶靖。在加入阿里云之前,先后在支付宝平台数据技术事业群、百度基础架构部任职。现主要负责阿里云容器服务产品的集群管理系统的研发,从事容器的持续交付、持续集成的方案设计与实现。
演讲内容架构
- 大话持续交付
- 持续交付的前世
- 容器化DevOps
- 持续交付的今生
演讲主要内容
持续集成指的是,频繁地(一天多次)将代码集成到主干。持续集成的目的,就是让产品可以快速迭代,同时还能保持高质量。它的核心措施是,代码集成到主干之前,必须通过自动化测试。只要有一个测试用例失败,就不能集成。
持续交付(Continuous delivery)指的是,频繁地将软件的新版本,交付给质量团队或者用户,以供评审。如果评审通过,代码就进入生产阶段。
持续交付可以看作持续集成的下一步。它强调的是,不管怎么更新,软件是随时随地可以交付的。
持续集成和持续交付保证了软件的持续运行和有效反馈。
不同环境,不同交付运维方式。即便按照流程去做持续交付,系统地搭建出来整个持续集成的系统环境,一样会遇到七七八八这样的问题。就算是同一种语言,每一个开发者所依赖语言环境、依赖的包不一样,就会导致有非常多的编译环境,维护起来就很困难。
传统持续交付问题的根源在于:
- 开发者交付的只有代码以及代码的依赖;
- 运维者需要除了代码之外的运行环境,以及运行环境之间的依赖。
交付方式的变革
Docker的出现改变软件交付的方式。经济学家说过:没有集装箱,不可能有全球化。Docker就像把一堆零散的代码和我要的所有东西装在集装箱里,真正去交付给运维时,相当于把这个集装箱运行起来。它包含所有的环境依赖,所以在任何地方运行集装箱所达到的结果都是一样的。因为达到了环境一致性。
Docker之所以这么火,是由于它的敏捷、可移植、可控的特性决定的。敏捷意味着Docker可以秒级应用启动、轻量级隔离、细粒度资源控制、低性能损耗;可移植代表着Docker的环境无关的交付、部署方式、可用于软件生命周期中不同运行环境;可控表示容器级别的资源隔离和流控。
Docker Compose是Docker推出来的一个对多容器的编排技术,简单好用,便于开发。使用Docker Compose,可以一键构建本地开发环境,在团队中可以共享一份配置文件。它的优点是:
- 简单好用,便于开发
- 本地环境沙箱
- UT环境
- 编排容器、存储和网络
当然,它也存在不足:面向开发和部署,不支持自动化运维。
Docker Swarm把一组Docker引擎抽象成一个Docker引擎,以前所有在单机上对一个Docker引擎的工作,都可以透明的变成对一组Docker集群上的节点的操作。Docker Swarm它的优点是:
- 支持标准的 Docker API;
- 灵活、可扩展、可插拔的容器调度。
当然,它也存在不足:面向容器、缺少服务生命周期支持。
容器服务上有三个层面的概念:
- 资源层面——集群,节点。
- 内容层面——Compose模板,镜像。
- 应用层面——应用,服务,容器。
容器化DevOps,可以实现:
- 开发环境到生产环境的一致
- 可编程基础设施
- Infrastructure as Code
- 不可变基础架构
- Immutable infrastructure
- 全流程工具化、自动化、持续交付
- 降低试错成本,鼓励快速迭代
简单的容器化持续交付流程如下图所示:
复杂的容器化持续交付流程:开发人员在除了代码 、Config、Test脚本还要写Dockerfile。把这些代码传(Push)到代码仓库,有一个CI service通过代码仓库hook告诉你代码仓库有一个新的提交。把代码拉下来复制,进行两件事情 : Build和UT。在build的过程中,会从Docker Registry上面去拉下来( Pull )依赖的image,当build通过了之后会push image到这个Docker Registry单位里面去。然后CI 会有一个hook去通知CD,deploy Service根据Docker和image描述以及compose描述,把image部署到预发、测试或者生产环境。
持续交付“最后一公里”
发布时持续交付的“最后一公里”,常见的发布策略有蓝绿发布、金丝雀发布(灰度发布)、ABTest,在国内的开发者中,对这几个概念有独立的理解。
Rolling Update
- 依次停止老容器,启动新容器
- 整个过程自动化,无需用户手动操作
- 适合于多副本的应用发布
蓝绿发布(热部署)
- 不会停止老容器,为新服务启动新容器
- 需要用户设置路由权重,实现不同版本应用的上线、下线
- 适合于版本的快速发布,不会停机影响用户
金丝雀发布(灰度)
- 不会停止老容器,为新服务启动新容器
- 需要用户设置路由权重,实现不同版本应用的共存
- 支持A/B测试,适合多方案选择
从代码到上线, 云端Docker化持续交付实践相关推荐
- Docker学习总结(14)——从代码到上线, 云端Docker化持续交付实践
2016云栖大会·北京峰会于8月9号在国家会议中心拉开帷幕,在云栖社区开发者技术专场中,来自阿里云技术专家罗晶(瑶靖)为在场的听众带来<从代码到上线,云端Docker化持续交付实践>精彩分 ...
- 联想企业网盘:SaaS服务集群化持续交付实践
当代信息技术飞速发展,软件和系统的代码规模都变得越来越大,而且组件众多,依赖繁复,每次新版本的发布都仿佛是乘坐一次无座的绿皮车长途夜行,疲惫不堪.软件交付是一个复杂的工程,涉及到软件开发的各个细节,其 ...
- 为什么你需要考虑选择SaaS化持续交付产品?
一句话介绍CodePipeline CodePipeline是一款SaaS化持续交付产品:通过可视化配置,简单快捷地实现持续集成与交付的流程.它全量兼容并加固Jenkins插件,支持多语言环境(Jav ...
- Jenkins与Docker的持续集成实践
本文讲的是Jenkins与Docker的持续集成实践[编者的话]持续集成(CI/CD)是一种软件开发实践.用于帮助团队成员频繁.快速的集成,测试他们的工作成果,以尽快发现集成错误. 更频繁.更早的集成 ...
- Docker学习总结(8)——利用Docker开启持续交付之路
持续交付即Continuous Delivery,简称CD,随着DevOps的流行正越来越被传统企业所重视.持续交付讲求以短周期.小细粒度,自动化的方式频繁的交付软件,在这个过 程中要求开发.测试.用 ...
- 产品迭代发布如何更快速?阿里持续集成与持续交付实践之路全解析
2017年5月9日,云效平台资深研发工程师向禹通过直播分享了<持续集成与持续交付实践之路>.他从云效背景.云效方案.云效价值三个方面进行了分享.他主要分享了持续集成持续交付的解决方案和案例 ...
- OPPO粟俊娥:OPPO研发云持续交付实践之路
嘉宾 | 粟俊娥 整理 | 孙正印 出品 | CSDN云原生 2022年5月17日,在CSDN云原生系列在线峰会第5期"DevOps峰会"上,OPPO研发云产品负责人粟俊娥分享 ...
- DevOps与持续交付实践
Danilo Sato表示:DevOps是旨在打破开发团队与运维团队之间的壁垒的一次尝试,这两者对于成功的软件交付来说都是必不可少的.他的新作<实战DevOps:可靠的自动化软件交付>(D ...
- 大型金融企业DevOps持续交付实践
作者介绍 符强,新炬网络DevOps专家,从事IT行业10余年,拥有丰富的开发.测试.运维工作经验.现致力于DevOps相关建设与实施推广的研究,具有多个大型电信.金融企业DevOps项目经验. De ...
最新文章
- Sping中利用HandlerExceptionResolver实现全局异常捕获
- python使用matplotlib可视化条形图、使用barh函数可视化条形图(使用barh函数可视化多分类的并行条形图、side by side)
- Css实现checkbox及radio样式自定义
- bootcmd 和 bootargs 环境变量
- 实例1 -- 判断输入年份是否为闰年
- shell-1-命令与参数
- [数据结构-严蔚敏版]P37定义一个带头结点的线性链表
- 对c语言字符数组描述错误的是,下述对C语言字符数组的描述中错误的是( )。
- python 字符类型
- BiCubic Interpolation
- MPChart的柱状图BarChart
- (10万+浏览量)语句覆盖、条件覆盖(分支覆盖)、判定覆盖、条件-判定覆盖、组合覆盖、路径覆盖 的区别
- 怎么用python爬豆瓣_完全小白篇-用python爬取豆瓣影评
- 17家IT创业公司的血泪史(3)
- 详解重定向(HTTP状态码301/302/303/307/308)附案例
- Unity3D 自由视角代码之解析
- 数据驱动「付费转化」的3个思路
- 杭电oj 1426 Sudoku Killer(深度优先搜索 回溯)
- LeanTween 常用API
- WorkSheet 的方法:add、delete、activate和select、copy、move;属性:name、visible