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
版权声明:本文标题:基于Docker的容器化DevOps平台设计与实现 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.freenas.com.cn/jishu/1704431284h459590.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论