• / 43
  • 下载费用:5 金币  

轻量级持续集成环境的支撑技术与系统构建.docx

关 键 词:
轻量级 持续 集成 环境 支撑 技术 系统 构建
资源描述:
毕业设计(论文)I┊┊┊┊┊┊┊┊┊┊┊┊┊装┊┊┊┊┊订┊┊┊┊┊线┊┊┊┊┊┊┊┊┊┊┊┊┊轻量级持续集成环境的支撑技术与系统构建摘要随着软件开发复杂度的不断提高,团队开发成员间如何更好地协同工作以确保软件开发的质量已经慢慢成为开发过程中不可回避的问题。尤其是近些年来,敏捷在软件工程领域越来越流行,如何能在不断变化的需求中快速适应和保证软件的质量也显得尤其的重要。同时,随着项目越来越庞杂,如何能够减轻每次环境部署和交付的压力也成为了一个值得探究的问题。本课题基于这样的背景,研究和开发了一个基于 Docker 的持续集成环境。持续集成是针对上述问题的一种软件开发实践。它倡导团队必须经常集成他们的工作,每次的集成都是通过自动化的构建来验证,从而尽快地发现集成错误。同时利用 Docker 容器的特性,提供轻量级的虚拟化方式,让开发或者生产环境可以通过 Image 的形式分享和交付。关键词:软件工程,敏捷开发,持续集成,Docker毕业设计(论文)II┊┊┊┊┊┊┊┊┊┊┊┊┊装┊┊┊┊┊订┊┊┊┊┊线┊┊┊┊┊┊┊┊┊┊┊┊┊Underlying Techniques and System Construction for Continuous IntegrationAbstractWith the increasing complexity of software development, development among team members on how to better work together to ensure the quality of software development, the development process has slowly become an unavoidable issue. Especially in recent years, more and more popular in agile software engineering, how to quickly adapt and ensure the quality of the software also is particularly important in a changing demand. Meanwhile, more and more complex as the project, how the environment can reduce stress every deployment and delivery has also become a question worth exploring. The topic this background, the research and development of a continuous integration environment based Docker. Continuous Integration is a software development practice for the above-mentioned problems. It advocates the team must integrate their work frequently, every time automation integration are built to verify, to discover integration errors as quickly as possible. Docker containers while taking advantage of the characteristics provide lightweight virtualization, which allows the development or production environments can share and delivered via Image form.Key words: Software Engineering, Agile software development, Continuous Integration, Docker毕业设计(论文)III┊┊┊┊┊┊┊┊┊┊┊┊┊装┊┊┊┊┊订┊┊┊┊┊线┊┊┊┊┊┊┊┊┊┊┊┊┊目 录1. 引言 ........................................................................................................................................................11.1. 背景综述 .....................................................................................................................................11.2. 国内外研究现状 .........................................................................................................................21.3. 课题研究的目的和意义 .............................................................................................................31.4. 论文的组织结构 .........................................................................................................................32. 系统架构和功能设计 ............................................................................................................................42.1. 系统架构 .....................................................................................................................................42.2. 系统功能性分析 .........................................................................................................................52.2.1. 持续集成任务构建模块 ..................................................................................................52.2.2. Docker 集成模块 .............................................................................................................52.2.3. 持续集成环境后台管理模块 ..........................................................................................52.2.4. 分布式集群管理 ..............................................................................................................62.2.5. 外部 API .........................................................................................................................62.2.6. 用户管理模块 ..................................................................................................................62.3. 系统拓展性分析 .........................................................................................................................63. 相关技术概论 ........................................................................................................................................73.1. 技术选择 .....................................................................................................................................73.2. Docker..........................................................................................................................................73.3. Ruby on Rails.............................................................................................................................133.4. React...........................................................................................................................................144. 系统详细设计与实现 ..........................................................................................................................154.1. 系统总体设计 ...........................................................................................................................154.1.1. 设计思想 ........................................................................................................................154.1.2. 设计原则 ........................................................................................................................164.1.3. 系统体系结构 ................................................................................................................174.2. 数据库设计 ...............................................................................................................................184.3. 系统实现 ...................................................................................................................................194.3.1. 文件结构 ........................................................................................................................194.3.2. Controller 实现 ..............................................................................................................204.3.3. View 实现 ......................................................................................................................224.3.4. Route 实现 .....................................................................................................................244.3.5. 工具类实现 ....................................................................................................................254.3.6. 构建任务队列 ................................................................................................................264.3.7. Docker 集成 ...................................................................................................................294.4. 系统部署 ...................................................................................................................................30毕业设计(论文)IV┊┊┊┊┊┊┊┊┊┊┊┊┊装┊┊┊┊┊订┊┊┊┊┊线┊┊┊┊┊┊┊┊┊┊┊┊┊5. 系统测试 ..............................................................................................................................................335.1. 单元测试 ...................................................................................................................................335.2. 功能测试 ...................................................................................................................................335.3. 集成测试 ...................................................................................................................................355.4. 测试过程 ...................................................................................................................................366. 结论和展望 ..........................................................................................................................................376.1. 结论 ...........................................................................................................................................376.2. 展望 ...........................................................................................................................................377. 参考文献 ..............................................................................................................................................38谢辞 ...........................................................................................................................................................39毕业设计(论文)共 39 页 第 1 页┊┊┊┊┊┊┊┊┊┊┊┊┊装┊┊┊┊┊订┊┊┊┊┊线┊┊┊┊┊┊┊┊┊┊┊┊┊1. 引言1.1. 背景综述随着软件开发复杂度的不断提高,团队开发成员间如何更好地协同工作以确保软件开发的质量已经慢慢成为开发过程中不可回避的问题。尤其是近些年来,敏捷(Agile) 在软件工程领域越来越红火,如何能再不断变化的需求中快速适应和保证软件的质量也显得尤其的重要。持续集成正是针对这一类问题的一种软件开发实践。它倡导团队开发成员必须经常集成他们的工作,甚至每天都可能发生多次集成。而每次的集成都是通过自动化的构建来验证,包括自动编译、发布和测试,从而尽快地发现集成错误,让团队能够更快的开发内聚的软件。考虑到一个实际的例子,有一个项目除了尚不清楚的需求范围和很紧的期限外,还有如下这些额外的要求:功能要及早交付、功能在部署到生产环境前要先部署的一个测试环境、功能必须经过测试、要减少后期维护的工作、支持协同开发等。这正是持续集成所要解决的典型场景。可以说持续集成就是敏捷的魔法药,它见效快、副作用小、业界的争论少。每每运用在混乱的项目中时,几周内项目就开始持续的产出经过测试的功能。对于独立项目,以持续集成为中心的持续部署绝对是不二选择。但传统的持续集成也有其困境。当业务和功能线越来越复杂,需要不断地进行细分。在这个过程中,原本单一的项目软件结构随着业务系统的增加变得不再简单,整个项目环境变得越来越复杂。比如多个子项目同时依赖于一个基础库,这时候要升级这个库的如何确保所有依赖于此的项目都能够正常运行。比如要对项目环境进行升级或者回滚。这个时候传统的持续集成不足以很好的解决上述等问题。这时候就需要一个新的利器,通过对持续集成加入环境的管理,来解决这些传统持续其先天不足的这类问题。什么是环境?系统运行所依赖和包含的一切就是其环境:硬件、操作系统,网络资源(IP 地址、域名) ,服务容器,服务器软件配置,环境亦是,运行时依赖的命令和包,项目本身的包和配置都是环境的一部分。对于部署而言,广义上,这些通通应该纳入环境管理的范畴,但狭义上,从软件系统的角度看,一个环境就是其运行需要的软件及其配置(我们先把操作系统和网络资源当做基础设施,其在部署时已处于就位的情况) 。因此:项目的生产环境 = 项目本身的软件包 + 项目运行时依赖的软件包 + 项目运行时依赖的其它软件 + 项目的配置信息。由于,项目本身的软件包、项目运行时依赖的软件包,以及项目运行时依赖的其它软件在本质上没有区别——都是软件,上面的定义可以进一步抽象为:环境 = 软件包 + 配置信息。加入了对环境的管理,才能更好的承担目前越来越庞大的软件对持续集成的压力。为了解决环境管理的问题,本文引入了时下流行的容器技术—— Docker。Docker 号称是下一代的虚拟机,它在启动和创建速度、性能、移植性等方面均优于传统虚拟机。Docker 是 PaaS 提供商 dotCloud 开源的一个基于 LXC 的高级容器引擎。它能够让开发者打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。Docker 容器完全使用沙箱机制,相互之间没有任何接口。Docker 几乎没有性能开销,可毕业设计(论文)共 39 页 第 2 页┊┊┊┊┊┊┊┊┊┊┊┊┊装┊┊┊┊┊订┊┊┊┊┊线┊┊┊┊┊┊┊┊┊┊┊┊┊以很容易地在机器和数据中心中运行。最重要的是, 他们不依赖于任何语言、框架或系统。使用容器技术可以在一定程度上很好的解决环境管理的问题,再结合项目代码的集成,可以做到更加全面的持续集成。本文所研究的就是基于 Docker 的轻量级持续集成环境的系统构建。1.2. 国内外研究现状持续集成是国内外探索已久的开发实践。业界普遍认同的持续集成的原则包括:1、需要版本控制软件保障团队成员提交的代码不会导致集成失败。常用的版本控制软件有 Git、CVS 、Subversion 等;2、开发人员必须及时向版本控制库中提交代码,也必须经常性地从版本控制库中更新代码到本地;3、需要有专门的集成服务器来执行集成构建。根据项目的具体实际,集成构建可以被软件的修改来直接触发,也可以定时启动,如每半个小时构建一次;4、必须保证构建的成功。如果构建失败,修复构建过程中的错误是优先级最高的工作。一旦修复,需要手动启动一次构建。由此可见,一个完整的构建系统必须包括:1、一个自动构建过程,包括自动编译、分发、部署和测试等。2、一个代码存储库,即需要版本控制软件来保障代码的可维护性,同时作为构建过程的素材库。3、一个持续集成服务器。本文中所研究的就是一个配置简单和使用方便的持续集成服务器。最近也已经有相关产品具有上述所讨论的加入环境管理部分的持续集成。从流行的持续集成环境来说,Jenkins 应该算是最为大众所知,也使用最多的。Jenkins 是一个开源项目,提供了一种易于使用的持续集成系统,使开发者从繁杂的集成中解脱出来,专注于更为重要的业务逻辑实现上。同时 Jenkins 能实施监控集成中存在的错误,提供详细的日志文件和提醒功能,还能用图表的形式形象地展示项目构建的趋势和稳定性。可以通过各种手段触发构建。例如提交给版本控制系统时被触发,也可以通过类似 Cron 的机制调度,也可以在其他的构建已经完成时,还可以通过一个特定的 URL 进行请求。Jenkins 经过多年的发展,有成熟丰富的插件支持,扩展性非常好。甚至也能够通过插件增加对于 Docker 的支持。但也因为功能大而全,配置和使用起来并不是非常简明易懂。随着 Docker 的流行,也出现了许多基于 Docker 的持续集成环境, Drone 就是其中的典型代表。Drone 是一个构建在 Docker 之上的开源持续集成平台 (CI)。Drone 提供了一组预建的Docker 映像,支持 12+种语言和几乎所有主要的数据库。这意味着你不必花时间来安装软件和配置您的构建环境。当然,如果你需要一个高度定制的环境,Drone 提供了足够的灵活性来使用自定义 Docker 映像。Drone 完全采用 Go 语言开发。具有快速,高效的特点。另外,由于Drone 基于 Docker 使用,所以部署到生产环境也非常容易。毕业设计(论文)共 39 页 第 3 页┊┊┊┊┊┊┊┊┊┊┊┊┊装┊┊┊┊┊订┊┊┊┊┊线┊┊┊┊┊┊┊┊┊┊┊┊┊1.3. 课题研究的目的和意义持续集成的核心价值在于:1. 持续集成中的任何一个环节都是自动完成的,无需太多的人工干预,有利于减少重复过程以节省时间、费用和工作量;2. 持续集成保障了每个时间点上团队成员提交的代码是能成功集成的。换言之,任何时间点都能第一时间发现软件的集成问题,使任意时间发布可部署的软件成为了可能;3. 持续集成还能利于软件本身的发展趋势,这点在需求不明确或是频繁性变更的情景中尤其重要,持续集成的质量能帮助团队进行有效决策,同时建立团队对开发产品的信心。因为非常频繁的进行集成,能够有效减少追查问题的时间,更好的专注于功能的开发。同时,使用持续集成环境,能够解决以往长时间的集成过程。能够快速发现问题,并且扼杀在初期阶段。因为上述原因,需要提供了一种易于使用的持续集成系统,使开发者从繁杂的集成中解脱出来,专注于更为重要的业务逻辑实现上。现有的软件有 Jenkins 等。虽然功能非常强大,但搭建起来比较复杂,同时维护上也不容易。而且使用这种传统的持续集成环境,更注重的是代码集成过程,环境的改变,交付过程等都没有很好得到的控制。我们需要其它的工具,来做到对于代码和环境同时集成。本论文将提供一种基于 Docker 的持续集成环境。Docker 是一种增加了高级 API 的 Linux Container(LXC)技术,提供了能够独立运行 Unix 进程的轻量级虚拟化解决方案。它提供了一种在安全、可重复的环境中自动部署软件的方式。相比原来的持续集成环境,它能更快速的交付和部署,具有更高效的虚拟化,还有更简单的管理。传统的继承和交付过程,都是项目代码和环境分开交付和管理。使用 Docker 的情况下,能够方便快速的打包代码和运行环境,进行同时交付,减轻了继承和部署压力。1.4. 论文的组织结构本论文共分为六章:第一章为绪论,主要介绍了本论文的研究背景、意义、国内外的研究背景还有论文的组织结构。第二章为系统架构和功能设计,主要分析和设计了整个系统的架构,同时划分功能模块,并对系统的拓展性进行了分析。第三章为相关技术概论,介绍了本项目使用的几种主要的技术和选其的原因。第四章为系统详细设计与实现,主要介绍了整个系统各个模块的详细设计,还有具体实现的方法。第五章为系统测试,主要介绍了本系统所使用的测试方法还有测试数据等。第六章为结论和展望,总结本论文所述,提出展望。毕业设计(论文)共 39 页 第 4 页┊┊┊┊┊┊┊┊┊┊┊┊┊装┊┊┊┊┊订┊┊┊┊┊线┊┊┊┊┊┊┊┊┊┊┊┊┊2. 系统架构和功能设计2.1. 系统架构本系统核心部分是一个持续集成环境,包括 Web 前后端和对外的 API 接口。具体包含如下图所示的几个部分: 图 2.1 系统流程上图所示为本论文要研究的基于 Docker 的持续集成环境的过程。有如下几个部分:1. Project Repository每个项目有个仓库分别管理项目代码和项目环境。项目代码由传统的 Git 或者 SVN 等版本控制工具进行管理。2. Docker Registry项目的环境仓库,能够对项目的环境进行有效的控制和管理。通过 Docker,开发或者运维人员能够直接打包项目环境,并直接推送到 Docker Registry。3. Continuous Integration中心的部分是持续集成环境,能够自动更新不同分支的代码和环境进行持续集成。对于运行集成任务的机器,能够通过 Docker 进行自动部署,从而减轻持续集成环境的配置过程。在这样的环境下,开发人员只需要单纯的提交代码到代码库中,在服务器运行集成任务的时候,开发人员能够同时进行其它任务,提高工作效率。最后完成集成任务后,持续集成环境发送通知给开发人员报告集成结果。4. Nodes毕业设计(论文)共 39 页 第 5 页┊┊┊┊┊┊┊┊┊┊┊┊┊装┊┊┊┊┊订┊┊┊┊┊线┊┊┊┊┊┊┊┊┊┊┊┊┊分布式构建集成任务的集群,能够加快集成的效率。核心的部分有如下几点:1. 基于 Web 的持续集成环境管理界面,能够方便的完成一整套流程2. 持续集成环境能够自动接收项目代码库的更新推送,并执行配置好的集成任务3. 每个项目能够通过管理界面通过 Docker Registry 更新项目环境4. 集成任务完成以后能够发送任务报告给开发人员5. 能够配置集群,分布式执行集成任务2.2. 系统功能性分析2.2.1. 持续集成任务构建模块持续集成环境核心是构建持续集成任务,所以独立设置一个模块来处理持续集成任务的构建。这个模块能够根据用户需要创建相关的持续集成任务。用户在建立项目的时候,能够填入需要执行的脚本,来作为这个项目持续集成的构建任务。一般来说,这个需要执行的脚本可以是执行项目的测试,或者是相关的构建任务等。系统通过底层命令,执行设定好的脚本。并且保存好 status code、stderr、stdout 等执行后的输出结果,并且最终呈现给用户。2.2.2. Docker 集成模块为了加入对于项目环境的管理,加入了对 Docker 的集成。用户能够配置项目的 DockerFile 来简单方便的配置好项目环境。这个模块会根据用户配置的 DockerFile 或者 Docker Hub 的地址,在任务构建的机器上拉去用户项目最新的环境,并且直接通过 Docker 来安装。之后的所有持续集成任务,都将会在已经安装好的 Docker 容器内执行。从而保证好的隔离性,并且对环境和项目代码的集成进行了更好的测试。得益于 Docker 其本身的 AUFS 文件系统的优势,就算是不同项目的环境, 如果是有公共的部分,比如同样是基于 Debian 的容器,公共的部分能够避免重复占用硬盘空间。2.2.3. 持续集成环境后台管理模块为了更好的管理持续集成环境中的一些资源,比如项目信息、每一次任务的构建纪录、分布式集群的每台机器的信息等,需要有一个直观易用的后台管理模块。本项目使用 Ruby on Rails 来构建这个后台管理模块。其功能主要是管理项目信息,包括列出所有项目、创建、编辑还有删除一个项目,列出项目所对应的任务的信息,并且能够方便地手动执行一次构建任务。还有对于分布式集群机器的管理,能够方便地添加一台机器到集群中,并且对其进行管理,包括获取其状态、分配任务等。毕业设计(论文)共 39 页 第 6 页┊┊┊┊┊┊┊┊┊┊┊┊┊装┊┊┊┊┊订┊┊┊┊┊线┊┊┊┊┊┊┊┊┊┊┊┊┊2.2.4. 分布式集群管理为了更好更有效率的完成持续集成任务,用户可以自由的添加多台机器加入集群中来同步构建任务。这个模块主要是针对加入集群的机器进行管理,包括与主机间的通讯,获取每个节点的状态信息,以及最重要的分配任务。当有一个新的任务产生后,会自动加入任务队列中,主机会遍历所有的节点,寻找闲置状态的节点来分配任务。2.2.5. 外部 API为了实现自动构建任务,需要提供 API 给类似于 GitHub 这样的代码托管中心。提供的 API 主要用来触发一个新的集成任务,或者是查看某一次的集成任务的执行情况。对于 GitHub 来说,可以在项目的配置中通过 WebHook 的设置来关联这个持续集成环境。从而方便开发人员在 push 代码后自动构建持续集成任务,而不用手动点击。2.2.6. 用户管理模块提供标准的用户管理功能,包括注册、登陆、session 还有密码找回等基本功能。并且根据不同类型的用户,提供权限管理的功能。比如运维人员拥有添加编辑一个项目的权限,开发人员拥有构建持续集成任务的权限。2.3. 系统拓展性分析本系统使用模块化构建,能够方便的进行后续的拓展。模块间相互独立,互相不干扰。可以通过增加对于代码库的支持,当前只支持 Git 这一种版本控制工具,还可以加入SVN,CVS 等工具。可以添加 Chrome 插件来更好的在代码库中显示当前整个项目最新的 build 状态,比如develop 分支最新的一次提交 build 失败了,可以直接在代码库中友好的显示出来。这个功能需要额外增加 API 来实现。加入 New Relic 模块对整个系统的运行进行监控,加入 Log 模块,纪录关键性的操作过程等。更高效的进行 docker 的集成和构建任务,当前是串行处理 Docker image 的构建和持续集成任务的 build。但这两个任务无不干扰,在没有限制高 IO 的情况下,可以考虑两者同时进行。但对于 Amazon AWS 的一些低配置 VPS,同时进行这两个都是高 IO 的操作,可能会导致 VPS超额甚至 down 掉。增加更强大的权限管理,比如加入项目的管理者、普通开发人员、项目运维人员等多种角色的权限管理,这样对于项目的管理更加自由方便。
展开阅读全文
1
  金牌文库所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
0条评论

还可以输入200字符

暂无评论,赶快抢占沙发吧。

关于本文
本文标题:轻量级持续集成环境的支撑技术与系统构建.docx
链接地址:http://www.gold-doc.com/p-139211.html
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服客服 - 联系我们
copyright@ 2014-2018 金牌文库网站版权所有
经营许可证编号:浙ICP备15046084号-3
收起
展开