提到软件发布确实是很令人头疼的一个过程,且还是高风险动作。借用一句话:“99%的故障是由于变更引起的”。本次分享内容着重介绍使用容器技术实现自动化构建、部署和测试过程,并使得开发、测试、运维之间能更好的协作,最终可以在几个小时甚至几分钟的时间,实现可重复,且可靠的软件发布系统。
在开发测试环境中测试均没有问题,但上生产环境的时候会有问题。即使我们在开发测试环境中部署上万遍没问题,但从来没有在生产环境中部署过一次,每到在新版本发布时,大家不仅要加班,而且都还很紧张。如果没有很好的回滚策略,即使发布成功了心还是悬着。
移动互联网飞速发展,业务要求敏捷,要在很短的时间完成从开发到上线的任务。很多企业从开发到上生产的周期都要花好几个月的时间完成,现有IT架构跟不上业务发展。
软件项目开发完成后,要将开发好的版本交付到客户的环境中。目前常见的做法是按照长长的安装文档,且是通过手动安装完成,此种模式不仅对安装实施人员的要求高,且出错几率很高。
1、环境管理
实践推荐:环境的管理在项目开始的时候,开发团队和运维团队就应该全面合作,后面的事情就会变的很容易。
2、组件和依赖管理
3、配置管理
4、版本管理
5、持续交付管理
以Docker为代表的容器技术,在短短的时间内发展迅速。容器技术早在2008年已经出现,Docker公司厉害的是提供了将软件运行环境整体打包的技术-镜像。
现实中很多不标准化的交付,使用镜像都可以实现标准化。标准化以后可以更好的实现自动化,并且能更好的促进上游和下游的发展。如:开发、测试、运维之间能更好的协助,践行DevOps文化。
原则:可重复、可靠;自动化;版本控制;团队责任。
1、可重复、可靠
2、自动化
容器技术在持续集成方面不仅仅解决了CI的问题,并且很好的解决了CD。利用容器实现持续交付区别于传统的做法是,原来开发交付出来的都是软件包和安装部署文档;利用容器技术开发人员交付的是应用模板+镜像,应用模板替代了安装部署文档,镜像技术更可靠的完成了软件包和软件运行环境的交付。并利用CI工具实现了,开发人员提交代码到代码库中,通过钩子可自动触发构建镜像。并可以对镜像以及应用做测试。
3、版本控制
4、团队责任
利用容器实现的交付流水线:
一切皆模板,服务于应用!
基于容器实现持续发布系统如下:
注解:
开发人员将代码提交至代码仓库
通过钩子自动触发构建镜像流程
镜像构建完成后,push到镜像仓库Registry
有新版本进行生成,自动触发部署流程,部署至测试环境
测试工作完成后,标记镜像状态为成功,自动触发部署至准生产环境
准生产环境测试完成后,可自动或半自动部署业务
Q1:国内代码提交,担心代码泄露,这个问题有考虑怎么解决吗?
A1:代码存放到企业私有代码库中。
Q2:张老师好,镜像比较大时,部署怎么解决速度问题?
A2:镜像大有几种原因:1.base镜像大;2.安装的软件没清除;3.构建镜像时下载软件用wget,不用add,这几步做好镜像大小能控制住。另外镜像要规划好,利用好镜像的分层技术。
Q3:构建镜像时,wget和add的区别?为什么用wget?
A3: 每条Dockerfile会生成一层,镜像是只读的。如使用add来下载软件包,然后在安装,软件包删除不了,处于不同层!使用RUN可以用wget下载后,安装,再删除,是同一层执行的操作!
原文发布时间为:2016-11-30
本文来自云栖社区合作伙伴DBAplus