持续集成之“自动化部署”

上传人:飞*** 文档编号:40642713 上传时间:2018-05-26 格式:DOCX 页数:5 大小:37.61KB
返回 下载 相关 举报
持续集成之“自动化部署”_第1页
第1页 / 共5页
持续集成之“自动化部署”_第2页
第2页 / 共5页
持续集成之“自动化部署”_第3页
第3页 / 共5页
持续集成之“自动化部署”_第4页
第4页 / 共5页
持续集成之“自动化部署”_第5页
第5页 / 共5页
亲,该文档总共5页,全部预览完了,如果喜欢就下载吧!
资源描述

《持续集成之“自动化部署”》由会员分享,可在线阅读,更多相关《持续集成之“自动化部署”(5页珍藏版)》请在金锄头文库上搜索。

1、持续集成之持续集成之“自动化部署自动化部署”在前文依赖管理中, 我们讨论了如何在代码变得庞大,组件增多的情况下, 做好外部库和内部组件依赖管理,从而提高构建效率。可以应用的实践包括: 一次生成,多次复用;建立统一 制品库,外部依赖库可以使用像 Maven 或 Ivy 这样的工具进行统一管理;对架构进行调整,使一个大的代码库分成多个组件; 每个组件有自己的持续集成体 系;对多个组件做持续集成。然而,解决一个问 题后,总会有另一个问题等在那里,需要你来解决。这次 Joe 的团队遇到了部 署问题。星期一早上,Alice 一进办公室,就看到一脸倦意的 Joe 坐在椅子上,喝着咖 啡。“今天怎么来得这么

2、早?看样子,你没睡好啊?”Alice 问道。“当然啦,昨天晚上我就来了。”Joe 无精打采地回答道。“怎么啦?”“还不是因为新版本上线出了点儿问题”,Joe 说道。“看来我们要把部署这 件事好好讨论一下,再这样下去,不只我要来,你们也要和我一样啦!呵呵! ”当天下午,Joe 邀请了运维团队的主要负责人 Tom 和 Steven,召开了一个关于 部署问题的讨论会。Joe 说道:“先请运维部门的 Tom 介绍一下上周末的新版本上线过程和发现的 问题吧。”Tom 描述了上线部署全过程。不可重复且不可靠、易出错的手工部署过程不可重复且不可靠、易出错的手工部署过程1.当新版本开发测试完成后,由开发团队的

3、成员在浏览器上登录运维平台,填写上线 申请单。申请单的内容包括新版本的上线部署步骤。 2.测试人员为了保证能够升级部署成功,首先要复制生产环境中的程序和数据到本地 的测试环境中,然后根据上线申请单中所描述的上线部署步骤进行操作,对上线步 骤进行验证。 3.运维人员登录到运维平台,收到上线申请单后,确认“已收到”。 4.运维人员发现上线部署步骤有问题,生产环境的路径与上线部署步骤中描述的不一 致。于是与开发人员进行沟通,让开发人员修改上线部署步骤。 5.开发人员修改后,再次通知测试人员和运维人员查看并确认。6.确认无误后,运维人员根据部署计划,登录到生产环境中,依照上线部署步骤,手 工操作完成。

4、“上周末上线部署时出现的情况是:在本次部署之前,我们的集群中,有两台 机器因 HotFix,其程序配置被修改过,与其它机器不一致。因此,该机器 上 的部署失败,导致部分服务不可用。运维人员查了很长时间没有发现问题,星 期日打电话把 Joe 叫来帮助我们查问题时,Joe 才回忆起有那么一次 HotFix, 但当时负责的运维人员已经离职,没人其它运维人员知道这件事情。”Tom 说 道,“我们对问题进行了分析,认为应该加强我们的上线流程管理, 对于那种 HotFix 也应该发起一个审批流程,并且在该流程中不但要主要负责人审批,而 且要对相关人发出周知通报。另外,我们的运维人员应该对上线单进行 严格审

5、 核,并对部署中所涉及的机器进行更详细的验证,对生产环境中的任何修改都 要进行登记。即使非常紧急,也要在事后补充记录一下。”“这些方法固然很好,但其实我们可以采用更好的办法来解决。”Joe 接着说 到,“假如我们在部署运维工作也能够借鉴持续集成的做法,利用一些最佳实 践,那么这次部署事故根本就不会发生。比如(1)将部署操作脚本化;(2) 进行持续部署验证测试;(3)部署脚本通用化,环境变量等使用配置方式传入; (4)让测试环境尽可能与生产环境一致,至少在成本条件允许的情况下尽量保 持相似;(5)对环境配置进行版本控制;(6)任何人不得直接对生产环境进 行直 接的手工操作,等等。”将部署操作脚本

6、化,并进行部署验证测试将部署操作脚本化,并进行部署验证测试Bob 说道:“嗯,其实那些上线步骤中所描述的内容都可以进行脚本化,之前 也讨论过这一问题。目前上线步骤中的内容基本都可以写成自动化脚本,即使 现在不行,也可以通过少量改造,使其可以自动化。但问题是. .”Bob 犹 豫了一下,接着说道,“如何来验证这些脚本是正确的呢?”Joe 说道:“保证运维人员是如何验证上线申请单上的上线步骤是正确的呢? 同样,我们也可以做一些部署验证就行了。这些部署的验证也可以通过脚本方 式来进行,比 如在安装之前验证程序所用端口没有被占用,安装之后验证该端 口已被该程序所使用;比如安装之前验证程序日志中记录了该

7、程序已停止运行, 在安装之后验证程序 日志中刻录该程序已重新启动;等等”。Alice 问道:“那我们还要调试这些部署脚本呀?没有线上生产环境,我们怎 么调试呢?”各类环境尽可能相似,并使部署脚本通用化各类环境尽可能相似,并使部署脚本通用化Joe 回答道:“首先我们应该加强基础设施这方面的投入。在力所能及的情况 下,让测试环境与生产环境相似。比如,生产环境可能有 100 台机器的集群,那我们至少 要找两台机器的集群做测试环境。生产环境中使用 Tomcat,我们 的测试环境和开发环境中也应该使用相同的 Tomcat,而不用 Jetty。”Joe 停下来,喝了一口咖啡,接着说道:“这样一来,我们的部

8、署脚本就可以 在开发环境、测试环境进行测试了。当开发人员进行本地测试时,可以使用这 个脚本进行单 机的部署。当测试人员进行集成测试时,可以使用同样的脚本进 行多机部署。与机器数量无关的配置可以统一放在某配置文件中。而与机器数 量等相关的配置可以放 在另外的配置文件中。由于在真正上线部署之前,开发 人员和测试人员已经使用同一个脚本进行多次部署,就是对该脚本进行的测试。 当我们上线部署时,只有与机 器相关的配置文件会有变化,其它配置基本相同, 所以上线部署时脚本出错的几率已经比较小了。而且,这种自动化没有人工干 预,也不会发生手工误操作。”Tom 问道:“那这些脚本由谁来写?由谁维护呢?”Joe

9、回答道:“谁最了解情况,就由谁来写。其实,我们也应该像对待产品代 码一样,来对待这些脚本和配置文件,把它们放在我们的代码库里,进行版本 控制。无论是运维人员还是开发人员,或者测试人员,对这些脚本的修改都应 该提交到版本控制库中,除非他所做的修改只是为了测试他自己在本地的程序, 那就不 用提交了。这样一来,谁在什么时候对什么进行了修改,为什么做修 改?这个审计问题就可以直接由版本控制系统来回答,也就做到了所有内容 可追踪了。”对环境管理进行版本控制,杜绝对生产环境的手工直接修对环境管理进行版本控制,杜绝对生产环境的手工直接修改改“听上去,对于配置文件、脚本等进行版本管理的确是解决了运维部署的很多

10、 问题。但如何对环境管理进行版本控制呢?”Tom 问道。Joe 想了想,说道:“环境管理比较复杂。一般来说,环境包括几个层次,包 括硬件及网络配置、操作系统、我们的应用程序所依赖的软件堆栈及其配置、 以及我们的应用程序运行时所需的数据及其配置。目前对我们来说,对于硬件 及网络配置、操作系统这两层来说,有两种方式进行管理。一种是利用一些专 用软件进 行自动化的远程配置,即只要给机器加电,就可以通过一些技术对一 台机器进行系统的安装与配置。另一种是使用虚拟化技术来进行系统配置管理。 对我们现在的游 戏平台来说, 使用后者即可。只要将基本的环境做成虚拟机 镜像文件,并将其作为环境基线进行版本管理。当

11、然,由于镜像通常较大,所 以最好不要使用常见的版本控制工具(如 subversion,Git 等)进行,而使用 某种简单的机制即可。”Joe 停了一下,看看大家没有提问的意思,于是接着说道:“至于基于其上的 软件堆栈及堆栈中各软件的配置管理完全可以利用类似于 CfEngine,Puppet 或 Chef 的工具进行。这些软件环境管理工具 都提供某种领域专属语言来描述软件堆栈配置,并保存在文本文件中。这些工具一般通过服务器/客户端的工作 方式运行,客户端向服务器发送请求,验证本机器节 点的软件配置是否与服务 器中的设置相符,如果不符,就会自动更新。尤其重要的是,这些更新操作都 是幂等的,即无论这

12、些配置在该客户机上执行多少遍,每次的 结果状态都是相 同的。另外,它们通常能与版本控制工具集成。所以,只要将我们的软件堆栈 配置管理信息放到版本控制库中,就可以同时管理数台机器。”“oh, 对不起,Joe,我想打断一下,”Tom 问道:“你能画一个图来解释一下 你刚才所说的这种软件环境配置管理工具吗?”“当然没问题。”Joe 拿起笔在白板上画了一个 Puppet 的工作示意图,如下图 所示。“看上去清楚多啦。”Tom 笑道,“通过这种方式,我们就只需要将版本控制 库中保存的配置信息检出到本地,进行相应的修改,再提交到版本控制库中, 这种工具就会自动帮我们完成必要的配置更新了。是这样的吗?”“对

13、,”Joe 点了点头,说道,“如果我们的部署脚本也是通过这种方式来做 的,那么我们就根本没有必要登录到生产环境的机器上,进行手工操作了。而 且,Puppet 还提供一种 Try Run 功能,可以进行配置变更的模拟,让你能够对 比一下变更前后的不同之处。”Tom 说道:“你说的这些听上去都不错。但并不是所有人都能够修改生产环境 的配置信息的。所以我们还是需要一个软件平台来管理上线的申请审批流程。 ”“在任何企业中,这种申请审批流程和生产环境变更的授权都是必要的,但这 仅仅是审核流程的操作。而真正与软件部署相同的具体操作都不应该在这种审 批流程当中。”Joe 回答道。Tom 接过话来,说道:“嗯

14、,这样的话,我们仍旧能够做到:有权限的人才能 真正修改生产环境的配置文件,同时达到了无人真正直接操作生产环境的目的, 避免了手工误操作带来的问题。”参加本次会议的测试人员和运维人员对这种做法产生了浓厚的兴趣,并要求开 发人员给予配合,将目前游戏平台的部署自动化。Tom 说道:“这就是我们运 维工作的一个方向。让枯燥易出错的重复性手工操作变成受控的自动化,从而 解放运维人员,让我们可以关注于更加有价值的运行监控等工作中。”Alice 说道:“这看上去还是有一定的工作量啊。”“当然,我们可能需要做一些工作,但我想这些投入是值得的。”Joe 回答道。 “同时,还需要各种角色之间更紧密的配合,而不是像之前那样,通过一个代 表上个世纪八十年代先进技术的办公自动化平台来描述部署上线步骤这类关键 的业务操作信息。”Tom 也点了点头,说:“嗯,应该使用版本控制方式。但我们还是需要一个上 线审批的流程,只不过,这个流程中不再保存上线步骤这类与实际部署相关的 业务信息,而只是为了部署人员的资格审核与信息周知的目标。”经过一番讨论,开发、测试和运维团队在这件事情上达成了一致,并按计划开 始实施了。需要注意的是,他们似乎没有谈到数据管理。他们会遇到相关的问题吗?需要注意的是,他们似乎没有谈到数据管理。他们会遇到相关的问题吗?

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 资格认证/考试 > 其它考试类文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号