基于Docker的分布式代码托管与持续集成系统的实现

 2022-01-17 11:01

论文总字数:29116字

目 录

1 绪论 1

1.1 研究背景及意义 1

1.2 国内外研究现状 2

1.2.1 持续集成相关研究 2

1.2.2 容器技术相关研究 3

1.3 论文研究内容 4

1.4 论文组织结构 4

2 系统分析 5

2.1 功能需求分析 5

2.2 可行性分析 6

3 开发技术及工具 6

3.1 集群管理 6

3.1.1 ZooKeeper 6

3.1.2 Mesos 6

3.1.3 Marathon 7

3.1.4 Docker 7

3.2 后端开发 8

3.2.1 Golang与LiteIDE 8

3.2.2 MongoDB与MongoVUE 8

3.2.3 Postman 8

3.3 前端开发 9

3.3.1 JavaScript 9

3.3.2 HTML 9

3.3.3 CSS 9

3.4 其他工具 9

3.4.1 Ansible 9

4 系统设计 10

4.1 系统总体设计 10

4.2 模块设计 11

4.2.1 ci_system的设计 11

4.2.2 web_ui的设计 12

4.3 数据库设计 13

5 系统实现 14

5.1 Ansible配置集群 14

5.2 模块实现 17

5.2.1 ci_system的实现 17

5.2.2 web_ui的实现 22

5.3 组件容器化 24

5.3.1 构建Gerrit的Docker镜像 24

5.3.2 构建Jenkins的Docker镜像 25

5.4 使用Marathon启动服务 25

6测试 27

6.1 测试意义 27

6.2 测试环境 27

6.3 测试方法与结果 27

6 结论与展望 28

参考文献 29

致谢 30

基于 Docker 的分布式代码托管与持续集成系统的实现

张以法

, China

Abstract: The main content of this thesis is to use the new technologies and tools in recent years to realize the continuous integration system. In the implementation, the use of two components which are the Gerrit and Jenkins, respectively, to build a code repository and continuous integration system. On this basis, I developed a server-side scheduler called ci_system, it is used to deal with service logic and store metadata. And a web-front called web_ui to provide user of the system with a visible interface for users to operate. Different from the traditional way, these four components are run in the Docker containers, and are deployed in the Mesos cluster. In this system, the components can achieve high availability and load balancing, and this improves the efficiency, stability and fault tolerance of the whole system. The thesis not only shows that container technology such as Docker can make continuous integration available, but also changes the traditional way to delivery programs and applications. It also shows the use of architecture of micro services and the concept of DevOps to develop software.

Keywords: Continuous integration; Code repository; Distributed system; Container; Docker

1 绪论

1.1 研究背景及意义

软件开发过程中的代码托管和持续集成是提高开发效率、改善软件质量、降低风险的重要途径,代码的版本控制与持续集成已经在生产中得以广泛运用。如何实施稳定高效且易于运行维护的代码持续集成一直是软件开发商的关注的。事实上,已经有多种成熟的代码版本控制工具用于协助开发者进行编写代码、提交更改并进行代码的版本控制与托管工作。在传统开发方式上,后续的代码编译、构建、测试、部署工作,基本交由开发人员、测试人员和运维人员手动完成。后来虽出现了一些自动化构建和集成工具,但其配置与部署工作相对较为复杂。集中式的单一服务器,也会带来性能上、稳定性和运营风险的担忧。

版本控制工具[1]的发展经过由Subversion为代表的中心架构式版本控制系统CVS(Concurrent Versions System),到以 Git [2]为代表的分布式版本控制系统DVCS(Distributed Versions Control System)。Git相比Subversion有更好的性能且更为易用。且由于社区代码贡献活跃,Git在近几年得以极大的发展。基于Git实现的代码托管与版本控制工具也比较多,比如GitLab,Gerrit等。其中Gerrit是一个由Java开发的,提供项目创建、代码审查和代码托管的Web程序,它提供RESTful API接口[3],用于外部程序进行调用。

持续集成方面,受敏捷软件开发方式和DevOps理念[4]的影响,已经有越来越多可用的持续集成工具,如Jenkins,Buildbot和Travis CI等。其中Jenkins是一个基于Java开发的开放易用开源持续集成工具。在一定程度的配置下,Jenkins可完成不同编程语言源码的自动构建工作[5]。配合Gerrit来托管源码,能够完成从代码提交到触发项目构建与测试,再到打包程序并生成集成报告的过程,这样的连续不断的集成方式就称为持续集成。持续集成在项目开发中的作用如图1-1所示。

图1-1 持续集成系统的作用

持续集成系统对促进软件项目开发具有重要意义:

  1. 及时发现问题

持续集成系统主要通过尽早集成、频繁集成来降低大量长期修改合并后引起的项目失败的风险。由于在每次代码变动后都能够触发构建和测试,而对每一次成功的集成,都能保证当前代码仓库中的工程整体是处于无明显错误的,比如语法错误、文件缺失的情况,能够保证当前构建是成功的并且自动化测试也是通过的。

  1. 提高软件质量

经开发和生产实践证明,比起“Big-Bang”式大规模集成、“迭代递增”式累积集成、“每日构建”式定期任务等经典集成方式,持续集成方式能够进行更为频繁的自动化构建和测试,能更为有效地保证软件质量[6]。避免代码提交后很久才发现问题。

  1. 提高团队效率

持续集成能够避免因为某次错误的代码提交而影响团队中其他人的开发工作。在实际开发中,如果没有进行构建测试就提交代码,这样的情况很可能就发生。持续集成通过反馈系统,及时报告问题给开发者、项目管理者,以便于及时解决问题并控制项目进度和发展趋势,这样对于加快开发效率、合理安排人力资源具有实际意义,有利于项目成本的控制。

  1. 便于持续发布和部署

持续集成为持续发布(Continuous Delivery)和持续部署(Continuous Deployment)提供了第一步,也是基础操作。在实际生产中,持续集成服务和持续发布、部署服务往往同时实现。持续集成系统的实现为后面进行无错误地持续发布和部署提供了保障。

然而在传统方式上,由于供电、网络、存储等不可抗力因素,还有程序漏洞、配置错误等问题,使得用单台或者数台独立的主机来进行代码托管和持续集成,并不一定能够实现一套稳定可靠的、易于维护的持续集成系统。

本系统旨在使用基于Docker的容器技术[7],设计一套从代码托管到持续集成的自动化系统,并利用分布式与弹性计算的优势,提升系统的稳定性和可靠性。因此本课题提出使用基于Docker的容器技术,设计与开发一套从代码托管到持续集成的自动化系统,并将应用部署于集群之中,能够提升系统的容错性、稳定性和高效性。

1.2 国内外研究现状

1.2.1 持续集成相关研究

目前在持续集成的研究领域里,国内外研究机构和IT公司已经取得了一些不错的成果。

在国外,已经多款用于持续集成的软件工具,如Jenkins、Buildbot、Travis CI、Strider等。Jenkins前身是一个称为Hudson的项目,是一个社区活跃、代码贡献频繁的开源,由于其在早起积累了众多用户,因此Jenkins用户数量也是较多的。Jenkins有很多的插件,能够支持多种额外的功能。除了持续集成的软件工具外,市场上也出现了一些提供开发者一整套持续集成服务的产品,比如Amazon的CodeDeploy平台。

在国内,ThoughtWorks公司在持续集成领域做出了重大贡献,ThoughtWorks开发了Cruise系统并帮助国内众多企业实施持续集成工作,并完成了开发流程的优化。在2009年,ThoughtWorks中国的员工就持续集成进行了深入的探讨并开发了一款称作iAnalysis的轻量级持续集成报告系统。国内也已经上线了提供开发者持续集成服务的平台,如树人云的CI/CD系统。

剩余内容已隐藏,请支付后下载全文,论文总字数:29116字

相关图片展示:

您需要先支付 80元 才能查看全部内容!立即支付

该课题毕业论文、开题报告、外文翻译、程序设计、图纸设计等资料可联系客服协助查找;