admin 管理员组

文章数量: 887032


2024年1月5日发(作者:二分法c语言程序设计)

电子技术与软件工程Electronic

Technology

&

Software

Engineering软件开发与应用Software Development

And

Application基于Docker的容器化DevOps平台设计与实现邢如意(江苏联合职业技术学院徐州财经分院江苏省徐州市221008

)摘

要:本文以DevOps思想为基础,以Docker作为基础设施环境,通过整合Harbor、Gitlab、Sonar、Jenkins、JIRA软件,设计

和实现了基于Docker的容器化DevOps平台。通过实践证明,文中所述方案可行且运行可靠,为DevOps平台建设提供了新思路。关键词:DevOps;

Docker容器;持续集成DevOps是开发(Development)与运维(Operations)两者的组合,

其思想是通过软件开发人员和IT运维人员紧密协同工作、使用自

动化工具完成软件系统的构建、测试和发布,从而提高软件发布的

频率和质量⑴。在DevOps过程中,持续集成(CI)和持续部署(CD)

是基础,开发、测试和运维是三大工作内容。持续集成是自动化开发和运维的第一步。开发人员将代码提交

图1:持续集成、持续交付和持续部署流程到代码仓库后,DevOps平台自动从仓库拉取最新代码,然后自动

执行构建(编译)和测试,并且能够将构建和测试结果及时反馈给

开发人员。持续集成伴随着持续测试,能够更快更早地发现代码中

的错误并及时修正,使得软件可以快速迭代,从而保证软件质量。

实现持续集成需要用到版本控制软件(SVN、Git)、构建工具(Ant、

Maven、Gradle)和

CI

软件(Jenkins、CruiseControl)。持续交付是在持续集成完成后,将软件发布到预生产环境或测

试环境中,以便于客户进行评审,在评审通过后再部署到生产环境

中,完成系统上线。如果部署到生产环境也是自动化的,也可称为

这一环节为持续部署。持续部署可视为持续交付的下一环节,是指

在系统在完成预生产环境评审测试后自动部署到生产环境的过程,

例如App更新升级c图1展示了持续集成到持续部署的整个流程。DevOps的实施需要使用大量工具,以便于建立起从代码版本

管理、构建、测试、发布和部署完整流水线(Pipeline)。在这个

流水线上,需要运行多个软件或服务,这些服务的运行环境首选是

Docker

容器。Docker是一款分布式构建、迁移和运行的开放平台,它允许开

发和运维人员将应用以及依赖文件打包成一个标准化的容器,并将

此容器作为软件交付和部署的标准[2]o

Docker的基本组件包括容器、

镜像、注册服务(仓库)。其中容器可理解为镜像的运行状态、注

册服务(仓库)为存储多个镜像的空间、镜像本质为分层的文件系统,

可理解为运行环境和程序综合打包后的结果。借助Docker可以实

现开发、测试和生产环境的统一化和标准化,并且易于系统的构建、

迁移和部署。Docker容器不同于传统虚拟化软件,Docker以Linux

操作系统为基础,利用Linux提供的namespace机制实现资源隔离、

Control

Groups实现资源限制、Union

File

Systems实现镜像的分层

存储和容器存储驱动。Docker容器技术已经成为当前微服务构建的

首选部署方案和云计算厂商推出的容器即服务(CaaS)搭建的事实

标准。够开发人员够开发人员图2:容器化DevOps平台架构Habor-jobserviceHabor-uiHabor-adminserverNginx-photonHabor-dbHabor-logDocker registryHabor镜像仓库图3:

Habor运行容器架构使用Git进行代码版本管理,支持wiki、问题管理、监控及持续集

成与部署。Gitlab分为社区版、企业版和托管版。(2)

自动构建工具:Apache

Maven,跨平台的软件项目管理

工具,基于POM项目对象模型配置项目构建方式,可以完成项目

依赖库的统一管理、解决重复和冲突问题。开发人员只需要完成

1平台设计1.

1技术栈选型配置即可批量完成项目构建、报告和文档生成。(3)

持续集成工具:Jenkins,被广泛应用的独立开源自动化

服务器,使用Java语言开发的开源Web项目,可用于项目自动构建、

测试和部署。Jenkins提供了强大的插件功能,可实现与其它CI/CD

插件的功能集成。DevOps是一套方法论,不是一套工具或具体的软件。DevOps

作为指导软件项目开发的一种指导思想,意在通过自动化工具提出

一种产品快速迭代、交付和部署的解决方案,从而提高代码质量和

(4)

代码质量审查工具:Sonar,开源代码质量管理平台,用

于管理Java代码质量。Sonar通过插件机制,可集成其它测试工具

和代码分析工具、持续集成工具等。适应快速变化的业务需求。DevOps平台基于现有工具软件进行搭

建,通过不同职责软件的协同配合来完成项目自动化构建等任务,

形成持续集成和持续交付流水线。DevOps平台技术栈包括了代码仓库管理软件、自动化构建工

具、代码质量检查工具、自动化测试工具、持续集成工具、产品

质量管理软件、敏捷管理软件等。在选择各类软件时,要充分考

(5)

产品质量管理软件:JIRA,集项目计划、任务分配、需

求管理、问题追踪管理的综合项目管理软件,可以与Git等代码版

本系统集成,通过插件机制还可以和IDEA等开发工具集成。(6)

配置管理:Ansible,基于Python开发的自动化运维工具,

通过模块机制可以实现批量系统配置、批量部署、批量执行等功能。虑软件的可扩展性和可集成性[31o本文所述面向Java语言项目的

DevOps平台使用技术栈如下:(1)代码管理工具:Gitlab,开源的代码仓库管理Web软件,(7)

容器软件:Docker,轻量级操作操作系统级虚拟化解决

方案,底层为Linux容器LXC技术,基于镜像分层技术可实现快

速启动部署且占有用空间小。Docker的出现为软件的统一交付提供

了操作标准,且已在多个云计算公司IaaS平台中广泛应用。61

软件开发与应用Software

Development

And

Application电子技术与软件工程Electronic

Technology

&

Software

Engineering表1:

DevOps服务镜像列表服务名称镜像名称容器运行参数GitlabGitlab/gitlab-ceJenkinsJenkins/jenkins:ltsSonarQubeSonarqube:7.6-communityPostgresJIRA1.

2平台架构Cptactionhank/atlassian-jira-software:8.1.0-p

443:443

-p

80:80-v

/home/gitlab/etc:/etc/gitlab-v

/home/gitlab/data:/var/opt/gitlab-p

8080:8089

-p

50000:50000-v

/var/run/:/var/run//v

/home/jenkins-data:/var/jenkins_home-p 9000:9000-v

/opt/sonarqube_data:/opt/sonarqube/data-v

/opt/sonarqube_extensions:/opt/sonarqube/extensions-v

postgresqk/var/lib/postgresql-v

postgresql_data:/var/lib/postgresql/data-p

8080:8080-v /etc/localtime:/etc/localtime:ro服务容器;其次是完成服务间的集成。容器可以基于现有公有仓库

本文所述容器化DevOps平台方案即采用Docker容器作为服务

运行的基本单位,实现快速部署和扩展。在软件系统的测试环境和

线上运行环境上均采用镜像打包、分发和运行容器方式进行。具体

设计架构如图2所示。图2中所示Habor镜像仓库、Gitlab代码仓库、Jenkins集成服

务、Sonar代码审查服务、JIRA缺陷管理服务、预发布运行环境和

线上运行环境都为Docker容器。图2所示架构流程具体为:(1)

开发人员提交代码到Gitlab代码仓库,Sonar通过插件机

制与Gitlab连接,Sonar自动触发对所提交代码进行检测,并生成

检测报告反馈给Gitlabo(2)

Jenkins通过webhooks机制获取到Gitlab仓库有新的代

码提交,自动拉取最新代码到本地,然后执行Maven编译、测试、

打包。Jenkins通过插件机制与J1RA连通,自动将测试的bug信息

发布到JIRA系统中。(3)

Jenkins通过插件机制与docker服务连通,在测试完成后

的代码打包为docker镜像,并自动将镜像上传到镜像仓库。镜像上

传完成后,Jenkins执行配置脚本自动从Docker镜像仓库中获取刚

提交的镜像并运行,作为预发布容器环境。以上步骤即实现了代码

从提交到镜像打包持续集成过程。中镜像创建.也可以在现有镜像基础上(通过创建dockerfile文件)

创建自定义镜像。当多个服务容器之间存在依赖或联系时,可以使

用docker-compose进行容器编排。Docker内核基于Linux,因此宿主机操作系统建议安装Linux

发行版。本文使用CentOS7.6作为宿主机操作系统。本文所述

DevOps平台各服务容器使用的镜像如表1所示。服务间的集成主要包括SonarQube与Gitlab通过sonar-gitlab-

plugin插件集成以实现有新的代码提交到gitlab仓库时自动对代码

进行审核;Jenkins与Gitlab通过配置Webhooks实现有新代码提交

时自动进行构建;Jenkins与Ansible集成主要通过配置SSH插件通

过执行Shell代码实现远程部署;Jenkins通过安装Docker插件实

现自动创建镜像和容器运行⑸。3结语当前随着DevOps应用逐渐深入,部分企业开始转向使用

Hosted

CI解决方案,即采用专业CI服务提供商提供的SaaS

CI平

台,如平台等。采用Hosted

CI方案,软件开发公司不需要

本地搭建DevOps流水线,而是全程在线上进行构建配置,不仅节

省了机器等硬件成本和时间成本,而且能够对所用资源进行动态调

度和弹性计费。采用SaaS

CI平台能够让团队将主要精力放在开发

及测试反馈上,省去了环境配置及维护烦恼。Hosted

CI方案也是

初创软件技术公司建立DevOps平台的另一选择。本文描述的基于

Docker容器构造DevOps平台的设计与实现思路仅为一种实现方式,

DevOps作为一种思想和方法论,没有“银弹”。项目管理者应在

实际应用中面向场景不同选择适合的方案,同时还要考虑团队的技

(4)

测试人员或最终用户在预发布环境上进行测试,将测试

结果再次反馈到JIRA缺陷管理系统中。(5)

测试完成和评审通过后,从镜像仓库中拉取镜像部署到

生产环境中。2平台实现2.

1创建私有Docker镜像仓库能水平和管理能力,在实践中探索适合自身的DevOps平台建设最

优方案。Docker容器基于镜像创建,镜像存储在镜像仓库中,

DockerHub是目前最大的公有镜像仓库。在实际应用中,因为网络

原因导致直接访问公有镜像仓库不稳定,因此会创建私有镜像仓库

以供内部使用。创建私有镜像仓库有两种方式:(1)

使用官方registry镜像构建;(2)

使用第三方平台搭建。第1种方案中官方提供镜像没有管理界面,不便于管理和维护,

因此本文使用第二种方案⑷。本文使用vmware公司开源的企业级

Docker

Registry仓库项目一Harbor搭建本地镜像仓库服务。Harbor以官方开源的Registry为基础,提供了管理界面、基于

角色的访问控制、AD/LDAP集成等功能。Habor内部共分为6个

组件,每个组件都以Docker容器方式运行。图3展示了

Habor运

行时的容器架构。参考文献[1]

蔡建军,任女尔,魏金津.DevOps在软件开发项目中的实践[J].

电脑知识与技术,2019,

15

(29):

242-244.[2]

贺宗平,张晓东,曹萍.基于容器技术的智慧校园大数据平台

持续集成研究[J].智能计算机与应用,2017, 7

(05):38-40.[3]

丘晖.基于容器的持续集成和部署方法研究[J].广东通信技

术,2017,

37

(10):

62-66.⑷

欧阳桂秀.浅谈使用Docker搭建本地私有仓库[J],福建电

脑,2018,

34

(10):

156-157.[5]刘万里.多环境下的CI/CD自动化集成部署设计[J].现代计

算机(专业版),

2019

(04):

83-87.作者简介邢如意(1982-),江苏省徐州市人。硕士学位,讲师。研究方向

为云计算、微服务架构与开发。2.

2

DevOps服务容器创建DevOps各环节服务容器创建分为两个步骤:首先是创建运行

62


本文标签: 镜像 容器 部署 代码 仓库