电子技术与软件工程
Electronic Technology&Software Engineering
为什么jsp页面打开是代码软件开发与应用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)
是基础,开发、测试和运维是三大工作内容。
持续集成是自动化开发和运维的第一步。开发人员将代码提交到代码仓库后,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)搭建的事实标准。
1平台设计
1.1技术栈选型
DevOps是一套方法论,不是一套工具或具体的软件。DevOps 作为指导软件项目开发的一种指导思想,意在通过自动化工具提出一种产品快速迭代、交付和部署的解决方案,从而提高代码质量和适应快速变化的业务需求。DevOps平台基于现有工具软件进行搭建,通过不同职责软件的协同配合来完成项目自动化构建等任务,形成持续集成和持续交付流水线。
DevOps平台技术栈包括了代码仓库管理软件、自动化构建工具、代码质量检查工具、自动化测试工具、持续集成工具、产品质量管理软件、敏捷管理软件等。在选择各类软件时,要充分考虑软件的可扩展性和可集成性[31o本文所述面向Java语言项目的DevOps平台使用技术栈如下:
linux操作系统镜像(1)代码管理工具:Gitlab,开源的代码仓库管理Web软件,
图1:持续集成、持续交付和持续部署流程
够开发人员
够开发人员jsp简单代码
图2:容器化DevOps平台架构
Habor镜像仓库
Habor-jobservice Habor-ui Habor-adminserver
Nginx-photon Habor-db Habor-log
Docker registry
spss安装教程图3:Habor运行容器架构
使用Git进行代码版本管理,支持wiki、问题管理、监控及持续集成与部署。Gitlab分为社区版、企业版和托管版。
(2)自动构建工具:Apache Maven,跨平台的软件项目管理工具,基于POM项目对象模型配置项目构建方式,可以完成项目依赖库的统一管理、解决重复和冲突问题。开发人员只需要完成l配置即可批量完成项目构建、报告和文档生成。
(3)持续集成工具:Jenkins,被广泛应用的独立开源自动化服务器,使用Java语言开发的开源Web项目,可用于项目自动构建、测试和部署。Jenkins提供了强大的插件功能,可实现与其它CI/CD 插件的功能集成。
(4)代码质量审查工具:Sonar,开源代码质量管理平台,用于管理Java代码质量。Sonar通过插件机制,可集成其它测试工具和代码分析工具、持续集成工具等。
(5)产品质量管理软件:JIRA,集项目计划、任务分配、需求管理、问题追踪管理的综合项目管理软件,可以与Git等代码版本系统集成,通过插件机制还可以和IDEA等开发工具集成。
(6)配置管理:Ansible,基于Python开发的自动化运维工具,通过模块机制可以实现批量系统配置
手写富文本编辑器、批量部署、批量执行等功能。
(7)容器软件:Docker,轻量级操作操作系统级虚拟化解决方案,底层为Linux容器LXC技术,基于镜像分层技术可实现快速启动部署且占有用空间小。Docker的出现为软件的统一交付提供了操作标准,且已在多个云计算公司IaaS平台中广泛应用。
61
软件开发与应用
Software Development And Application
电子技术与软件工程
Electronic Technology&Software Engineering 表1:DevOps服务镜像列表
服务名称镜像名称容器运行参数
Gitlab Gitlab/gitlab-ce -p443:443-p80:80
-v/home/gitlab/etc:/etc/gitlab
alphanumericJenkins Jenkins/jenkins:lts -v/home/gitlab/data:/var/opt/gitlab
-p8080:8089-p50000:50000
-v/var/run/docker.sock:/var/run/docker.sock
Son a rQube Sonarqube:7.6-community /v/home/jenkins-data:/var/jenkins_home -p9000:9000
-v/opt/sonarqube_data:/opt/sonarqube/data
JIRA
Postgres
Cptactionhank/atlassian-jira-software:8.1.0
-v/opt/sonarqube_extensions:/opt/sonarqube/extensions
-v postgresqk/var/lib/postgresql
-v postgresql_data:/var/lib/postgresql/data
-p8080:8080
-v/etc/localtime:/etc/localtime:ro
1.2平台架构
本文所述容器化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镜像仓库中获取刚提交的镜像并运行,作为预发布容器环境。以上步骤即实现了代码从提交到镜像打包持续集成过程。
(4)测试人员或最终用户在预发布环境上进行测试,将测试结果再次反馈到JIRA缺陷管理系统中。
(5)测试完成和评审通过后,从镜像仓库中拉取镜像部署到生产环境中。
2平台实现
2.1创建私有Docker镜像仓库
Docker容器基于镜像创建,镜像存储在镜像仓库中,DockerHub是目前最大的公有镜像仓库。在实际应用中,因为网络原因导致直接访问公有镜像仓库不稳定,因此会创建私有镜像仓库以供内部使用。创建私有镜像仓库有两种方式:
(1)使用官方registry镜像构建;
(2)使用第三方平台搭建。
第1种方案中官方提供镜像没有管理界面,不便于管理和维护,因此本文使用第二种方案⑷。本文使用vmware公司开源的企业级Docker Registry仓库项目一Harbor搭建本地镜像仓库服务。
Harbor以官方开源的Registry为基础,提供了管理界面、基于角的访问控制、AD/LDAP集成等功能。Habor内部共分为6个组件,每个组件都以Docker容器方式运行。图3展示了Habor运行时的容器架构。
2.2DevOps服务容器创建
DevOps各环节服务容器创建分为两个步骤:首先是创建运行服务容器;其次是完成服务间的集成。容器可以基于现有公有仓库中镜像创建.也可以在现有镜像基础上(通过创建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平台,如flow.ci平台等。采用Hosted CI方案,软件开发公司不需要本地搭建DevOps流水线,而是全程在线上进行构建配置,不仅节省了机器等硬件成本和时间成本,而且能够对所用资源进行动态调度和弹性计费。采用SaaS CI平台能够让团队将主要精力放在开发及测试反馈上,省去了环境配置及维护烦恼。Hosted CI方案也是初创软件技术公司建立DevOps平台的另一选择。本文描述的基于Docker容器构造DevOps平台的设计与实现思路仅为一种实现方式,DevOps作为一种思想和方法论,没有“银弹”。项目管理者应在实际应用中面向场景不同选择适合的方案,同时还要考虑团队的技能水平和管理能力,在实践中探索适合自身的DevOps平台建设最优方案。
参考文献
[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-),江苏省徐州市人。硕士学位,讲师。研究方向为云计算、微服务架构与开发。
62
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论