CN114564217A - 软件部署方法及装置 - Google Patents

软件部署方法及装置 Download PDF

Info

Publication number
CN114564217A
CN114564217A CN202210216520.0A CN202210216520A CN114564217A CN 114564217 A CN114564217 A CN 114564217A CN 202210216520 A CN202210216520 A CN 202210216520A CN 114564217 A CN114564217 A CN 114564217A
Authority
CN
China
Prior art keywords
target software
software
integration tool
target
code
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN202210216520.0A
Other languages
English (en)
Inventor
时文豪
朱庆杰
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Shanghai Bilibili Technology Co Ltd
Original Assignee
Shanghai Bilibili Technology Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Shanghai Bilibili Technology Co Ltd filed Critical Shanghai Bilibili Technology Co Ltd
Priority to CN202210216520.0A priority Critical patent/CN114564217A/zh
Publication of CN114564217A publication Critical patent/CN114564217A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/60Software deployment
    • G06F8/61Installation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3664Environments for testing or debugging software
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing
    • G06F11/3672Test management
    • G06F11/3688Test management for test execution, e.g. scheduling of test suites
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/445Program loading or initiating
    • G06F9/44505Configuring for program initiating, e.g. using registry, configuration files

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Quality & Reliability (AREA)
  • Stored Programmes (AREA)

Abstract

本申请实施例提供一种软件部署方法,所述方法包括:利用持续集成工具获取目标软件的代码;利用所述持续集成工具编译所述目标软件的代码,得到所述目标软件的程序包;利用所述持续集成工具执行所述目标软件的本地shell脚本以生成所述目标软件的配置文件,并将所述配置文件挂载至Docker集群的Nginx中,以使所述Nginx根据所述配置文件进行所述目标软件的代理转发;利用所述持续集成工具将所述程序包部署至Docker集群中。本申请实施例提供的软件部署方法,可以提高部署软件的测试环境的效率,减少因人工操作出现错误的概率。

Description

软件部署方法及装置
技术领域
本申请涉及网络技术领域,特别涉及一种软件部署方法、装置、计算机设备及存储介质。
背景技术
在日常的测试工作中,为了对软件进行测试,通常都需要测试者针对软件部署一套或多套测试环境,从而实现对软件的测试和评估。
然而,目前在部署软件的测试环境时,均是由测试人员手动进行部署,部署的效率较低,且容易发生错误。
发明内容
本申请的目的在于提供一种软件部署方法、装置、计算机设备及存储介质,用于解决以下技术问题:目前部署软件的测试环境的效率较低,且容易发生错误。
本申请实施例的一个方面提供了一种软件部署方法,包括:利用持续集成工具获取目标软件的代码;利用持续集成工具编译目标软件的代码,得到目标软件的程序包;利用持续集成工具执行目标软件的本地shell脚本以生成目标软件的配置文件,并将配置文件挂载至Docker集群的Nginx中,以使Nginx根据配置文件进行目标软件的代理转发,本地shell脚本根据目标软件的配置信息得到;利用持续集成工具将程序包部署至Docker集群中。
可选地,利用持续集成工具将程序包部署至Docker集群中,包括:利用持续集成工具调用Kubernetes将程序包部署至Docker集群中。
可选地,利用持续集成工具调用Kubernetes将程序包部署至Docker集群中,包括:在目标软件为前端项目或静态资源项目的情况下,利用持续集成工具调用Kubernetes将程序包部署至Docker集群的Nginx中;在目标软件为后端项目的情况下,利用持续集成工具调用Kubernetes将程序包部署至Docker集群的Tomcat中。
可选地,利用持续集成工具编译目标软件的代码,得到目标软件的程序包,包括:在目标软件为Java项目的情况下,利用持续集成工具调用Maven编译目标软件的代码,得到目标软件的程序包;在目标软件为Node.js项目的情况下,利用持续集成工具调用NPM编译目标软件的代码,得到目标软件的程序包。
可选地,利用持续集成工具获取目标软件的代码,包括:获取目标软件的代码地址,将代码地址推送至持续集成工具;利用持续集成工具根据代码地址拉取目标软件的代码。
可选地,获取目标软件的代码地址,包括:获取用户通过Web页面输入的目标软件的查询指令;根据目标软件的查询指令从预设数据库中获取目标软件的目标数据,目标数据至少包括代码地址。
可选地,利用持续集成工具根据代码地址拉取目标软件的代码,包括:利用Jenkins根据git仓库的地址到git仓库拉取目标软件的代码。
本申请实施例的一个方面又提供了一种软件部署装置,包括:获取模块,用于利用持续集成工具获取目标软件的代码;编译模块,用于利用持续集成工具编译目标软件的代码,得到目标软件的程序包;配置模块,用于利用持续集成工具执行目标软件的本地shell脚本以生成目标软件的配置文件,并将配置文件挂载至Docker集群的Nginx中,以使Nginx根据配置文件进行目标软件的代理转发,本地shell脚本根据目标软件的配置信息得到;部署模块,用于利用持续集成工具将程序包部署至Docker集群中。
本申请实施例的一个方面又提供了一种计算机设备,计算机设备包括存储器、处理器以及存储在存储器上并可在处理器上运行的计算机程序,处理器执行计算机程序时用于实现上述的软件部署方法的步骤。
本申请实施例的一个方面又提供了一种计算机可读存储介质,计算机可读存储介质内存储有计算机程序,计算机程序可被至少一个处理器所执行,以使至少一个处理器执行上述的软件部署方法的步骤。
本申请实施例提供的软件部署方法、装置、计算机设备及存储介质,至少包括以下优点:
通过利用持续集成工具获取目标软件的代码,利用持续集成工具编译目标软件的代码,得到目标软件的程序包,然后利用持续集成工具执行目标软件本地shell脚本以生成目标软件的配置文件,并将配置文件挂载至Docker集群的Nginx中,再利用持续集成工具将程序包部署至Docker集群中,可以利用持续集成工具实现软件测试环境的自动部署,从而提高部署软件的测试环境的效率,减少因人工操作出现错误的概率;同时,由于配置文件可以通过执行本地shell脚本自动生成并挂载至Docker集群的Nginx中,而Nginx可以根据配置文件实现目标软件的代理转发,因此可以自动实现目标软件的代理转发配置,提高配置的效率,减少人工操作的工作量。
附图说明
图1示意性示出了本申请实施例的环境架构图;
图2示意性示出了本申请实施例一的软件部署方法的流程图;
图3为图2中步骤S401的子步骤;
图4为图3中步骤S4011的子步骤;
图5示例性示出了本申请实施例一的软件部署方法的原理图;
图6示例性示出了本申请实施例一的软件部署方法中软件访问的原理图;
图7示意性示出了采用人工方式实现软件部署的原理图;
图8示意性示出了本申请实施例二的软件部署装置的框图;
图9示意性示出了本申请实施例三的计算机设备的硬件架构图。
具体实施方式
为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本申请,并不用于限定本申请。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
需要说明的是,在本申请实施例中涉及“第一”、“第二”等的描述仅用于描述目的,而不能理解为指示或暗示其相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括至少一个该特征。另外,各个实施例之间的技术方案可以相互结合,但是必须是以本领域普通技术人员能够实现为基础,当技术方案的结合出现相互矛盾或无法实现时应当认为这种技术方案的结合不存在,也不在本申请要求的保护范围之内。
在本申请的描述中,需要理解的是,步骤前的数字标号并不标识执行步骤的前后顺序,仅用于方便描述本申请及区别每一步骤,因此不能理解为对本申请的限制。
下面为本申请涉及的术语解释:
Docker:是一个开源的应用容器引擎,让开发者可以打包应用以及依赖包到一个可移植的镜像中,然后发布至Linux或Windows操作系统的机器上,实现应用的虚拟化。
Nginx:是异步框架的网页服务器,也可以用作反向代理、负载平衡器和HTTP缓存。
Maven:是一个软件项目管理及自动构建工具,基于项目对象模型概念,利用一个中央信息片断管理一个项目的构建、报告和文档等步骤。
NPM(Node Package Manager,node包管理器):是Node.js默认的、用JavaScript编写的软件包管理系统。
Node.js:是能够在服务器端运行JavaScript的开放源代码、跨平台执行环境。
Java:是一种广泛使用的计算机编程语言,拥有跨平台、面向对象、泛型编程的特性,广泛应用于企业级Web应用开发和移动应用开发。
Tomcat:是由Apache软件基金会属下Jakarta项目开发的Servlet容器,实现了对Servlet和Java Server Page(简称JSP)的支持,并提供了作为Web服务器的一些特有功能。
git:是一个分布式版本控制软件。
Jenkins:是一款由Java编写的开源的持续集成工具。
Kubernetes(简称K8s):是用于自动部署、扩展和管理“容器化应用程序”的开源系统。
HTTP(超文本传输协议,Hyper Text Transfer Protocol):是一种用于分布式、协作式和超媒体信息系统的应用层协议。
图1示意性地示出了本申请实施例的环境架构图,如图1所示:
客户端300通过网络200与服务端100连接。用户可以利用客户端300通过网络200向服务端100发送指令,服务端100在接收到指令时,根据指令利用持续集成工具获取目标软件的代码,然后利用持续集成工具编译目标软件的代码,得到目标软件的程序包后,再利用持续集成工具执行目标软件的本地shell脚本生成配置文件,将配置文件挂载至Docker集群的Nginx中,最后服务端100利用持续集成工具将目标软件的程序包部署于Docker集群中。可选地,服务端100在部署目标软件时,可以通过一个预先编写的程序来实现,具体过程例如是,服务端100中预先编写的程序在接收到用户利用客户端300通过网络200发送的指令时,根据指令调用持续集成工具获取目标软件的代码,然后利用持续集成工具编译目标软件的代码,得到目标软件的程序包后,再利用持续集成工具执行目标软件的本地shell脚本生成配置文件,将配置文件挂载至Docker集群的Nginx中,最后利用持续集成工具将目标软件的程序包部署于Docker集群中。
在示例性的实施例中,服务端100可以指数据中心,例如单个房屋,或者分布在不同的地理位置(例如,在几个房屋)。服务端100可以通过一个或多个网络200提供服务。网络200包括各种网络设备,例如路由器、交换机、多路复用器、集线器、调制解调器、网桥、中继器、防火墙、代理设备和/或类似。网络200可以包括物理链路,例如同轴电缆链路、双绞线电缆链路、光纤链路、它们的组合和/或类似物。网络200可以包括无线链路,例如蜂窝链路、卫星链路、Wi-Fi链路和/或类似物。客户端300可以包括诸如移动设备、平板设备、膝上型计算机、智能设备(例如智能服装、智能手表、智能眼镜)、虚拟现实耳机、游戏设备、机顶盒、数字流设备、机器人、车载终端、智能电视、电视盒或电子书阅读器。
在相关技术中,当需要将软件部署至环境中进行测试时,需要操作人员手动进行配置,部署的效率较低,并且容易出错。
本申请实施例提供的软件部署方法,可以自动完成软件的部署,从而提高部署的效率,减少出错的概率。
以下将通过若干个实施例介绍软件部署方案,为便于理解,下面将以图1中的服务端100作为执行主体进行示例性描述。
实施例一
图2示意性示出了本申请实施例一提供的软件部署方法的流程图,如图2所示,该软件部署方法可以包括以下步骤:
步骤S401,利用持续集成工具获取目标软件的代码。
持续集成工具可以包括Jenkins、Buddy或TeamCity等。
目标软件具体可以为产品或项目对应的应用或应用的分支。
目标软件的代码可以存储于网络中的指定位置中,在利用持续集成工具获取目标软件的代码时,持续集成工具可以根据目标软件对应的存储位置获取目标软件的代码。例如,目标软件的代码可以存储于git仓库中,在利用持续集成工具获取目标软件的代码时,持续集成工具可以根据目标软件的代码在git仓库中的地址获取目标软件的代码。在示例性的实施例中,如图3所示,步骤S401还可以包括以下步骤:
步骤S4011,获取目标软件的代码地址,将代码地址推送至持续集成工具。
目标软件的代码地址中可以包括多个版本的代码,在需要获取不同版本的代码时,可以根据目标软件的分支信息来获取相应版本的代码。
在示例性的实施例中,如图4所示,步骤4011还可以包括以下步骤:
步骤S40111,获取用户通过Web页面输入的目标软件的查询指令。
Web页面具体为指定的Web页面,用户在该Web页面输入查询指令后,相应的查询指令通过网络200发送至服务端100。用户在输入目标软件的查询指令时,可以是输入目标软件的名称及分支等相关信息,Web页面根据这些目标软件的相关信息形成目标软件的查询指令。
例如,用户通过客户端300打开指定的Web页面,然后在指定的Web页面上输入目标软件的查询指令,客户端300再将用户输入的目标软件的查询指令通过网络200发送至服务端100。
步骤S40112,根据目标软件的查询指令从预设数据库中获取目标软件的目标数据,目标数据至少包括代码地址。
预设数据库中的数据可以包括目标软件在内的多个软件的目标数据,从而使用户可以从预设数据库中查询到相应软件的目标数据。预设数据库可以位于服务端100中或与服务端100相连,从而使服务端100可以根据目标软件的查询指令从预设数据库中获取目标软件的目标数据。其中,目标软件的目标数据除了包括目标软件的代码地址外,还可以包括目标软件的类型参数和API(应用程序接口)地址等数据,以使持续集成工具在部署目标软件的过程中获取到部署所需的数据。目标软件的目标数据可以由用户预先维护进预设数据库中,也可以是预设数据库根据一定规则从相应的网络位置中获取,具体可以根据实际需要设置,此处不做具体限制。
通过获取用户通过Web页面输入的目标软件的查询指令,根据目标软件的查询指令从预设数据库中获取目标软件至少包括代码地址的目标数据,可以获取到目标软件的代码地址,还可以根据需要获取目标软件其它部署所需的数据,从而方便目标软件自动部署的实现。
步骤S4012,利用持续集成工具根据代码地址拉取目标软件的代码。
在示例性的实施例中,步骤S4012可以包括:利用Jenkins根据git仓库的地址到git仓库拉取目标软件的代码。
即持续集成工具为Jenkins,目标软件的代码地址为git仓库的地址。由于Jenkins支持执行Maven的项目,以及任意的Shell脚本和Windows批处理命令,因此利用Jenkins作为持续集成工具来进行目标软件的部署,可以有效地实现软件的自动部署;由于git是一个分布式版本控制软件,可以有效地进行软件版本的控制,因此将目标软件的代码存放于git仓库,可以有效地对目标软件的版本进行控制;而利用Jenkins根据git仓库的地址到git仓库拉取目标软件的代码,则可以根据需要拉取目标软件相应版本的代码,实现目标软件代码的自动获取。
通过获取目标软件的代码地址,将代码地址推送至持续集成工具,再利用持续集成工具根据目标软件的代码地址拉取目标软件的代码,可以利用持续集成工具完成目标软件的代码的自动拉取,提高软件的部署效率。
步骤S402,利用持续集成工具编译目标软件的代码,得到目标软件的程序包。
在利用持续集成工具编译目标软件的代码时,可以是利用持续集成工具调用其它软件项目构建工具对目标软件的代码进行编译。目前,软件可以分为Java类的软件和Node.js类的软件。由于不同类型的软件在编译时采用的软件项目构建工具会有所不同,因此,在利用持续集成工具编译目标软件的代码时,可以先判断目标软件的类型,再根据目标软件的类型调用相应的软件项目构建工具对目标软件的代码进行编译。目标软件的目标数据中可以包括目标软件的类型参数,从而在判断目标软件的类型时,可以根据目标软件的类型参数来判断。
在示例性的实施例中,步骤S402可以包括:在目标软件为Java项目的情况下,利用持续集成工具调用Maven编译目标软件的代码,得到目标软件的程序包;在目标软件为Node.js项目的情况下,利用持续集成工具调用NPM编译目标软件的代码,得到目标软件的程序包。
通过在目标软件为Java项目的情况下,利用持续集成工具调用Maven编译目标软件的代码;在目标软件为Node.js项目的情况下,利用持续集成工具调用NPM编译目标软件的代码,可以根据目标软件的软件类型调用相应的软件项目构建工具自动对目标软件的代码进行编译,实现目标软件的程序包的自动打包,从而提高软件部署的效率。
步骤S403,利用持续集成工具执行目标软件的本地shell脚本以生成目标软件的配置文件,并将配置文件挂载至Docker集群的Nginx中,以使Nginx根据配置文件进行目标软件的代理转发,本地shell脚本根据目标软件的配置信息得到。
目标软件的配置信息可以包括目标软件的所属域名等信息,从而使Nginx根据配置信息进行部署后,可以根据配置信息对目标软件的数据进行相应的转发。目标软件的配置信息可以根据其对应的线上软件(产品或项目)的链接地址得到,而对应线上软件的链接地址可以由用户查询预设数据库得到,即目标数据还可以包括线上软件的链接地址。
将配置文件挂载至Docker集群的Nginx后,由于配置文件中记录有目标软件的域名等相关信息,因此Docker集群的Nginx在接到相应的数据(例如与目标软件对应的请求)时,就可以根据目标软件的配置文件进行目标软件的代理转发。
相关技术中,在将软件部署后,需要人工手动进行端口的设置、转发的路径等Nginx的域名转发内容,配置的效率较低;特别是当需要部署的软件较多时,人工操作的工作量比较大,对操作人工的要求较高,且容易出错;而通过利用持续集成工具执行目标软件的本地shell脚本以生成目标软件的配置文件,将配置文件挂载至Docker集群的Nginx中,可以自动实现目标软件的代理转发配置,使Nginx根据目标软件的配置文件进行目标软件的代理转发,提高配置的效率,减少人工操作的工作量以及出错的概率。
步骤S404,利用持续集成工具将目标软件的程序包部署至Docker集群中。
具体地,可以是利用持续集成工具通过HTTP协议将管理容器的命令发送给Docker容器管理接口,以实现对Docker容器的管理和软件的部署。在利用持续集成工具将目标软件的程序包部署至Docker集群中时,可以是利用持续集成工具调用第三方服务将目标软件的程序包部署至Docker集群中。在示例性的实施例中,利用持续集成工具将目标软件的程序包部署至Docker集群中,可以包括:利用持续集成工具调用Kubernetes将目标软件的程序包部署至Docker集群中。
具体地,可以是利用持续集成工具调用Kubernetes服务在Docker集群中创建容器,再将目标软件的程序包部署至Docker集群创建的容器中。在利用持续集成工具调用Kubernetes之前,可以利用持续集成工具将先前步骤处理得到的数据传输给Kubernetes,Kubernetes再根据这些数据完成目标软件的部署。其中,先前步骤处理得到的数据可以包括:容器名称、镜像信息、生成域名信息、默认Host信息、hostname信息、文件挂载地址等。
在将目标软件的程序包部署至Docker集群创建的容器中时,可以是通过挂载的方式挂载至Docker容器中实例化容器,以自动完成部署的过程。在相关技术中,一般是针对每一个软件新建一个端口号来实现软件的部署的过程,但这样部署的方式会使得配置变得比较麻烦,且管理和维护起来比较困难;而通过挂载的方式挂载至Docker容器,由于不同的软件不在同一个Docker容器中,因此多个软件可以使用同一个端口号,从而配置简单,可以减少维护的工作量。
由于Kubernetes可以进行主机集群的自动部署、扩展以及运行应用程序容器,且可以根据服务器的硬件资源进行调配,因此,通过利用持续集成工具调用Kubernetes将目标软件的程序包部署至Docker集群中,可以实现目标软件在Docker集群的自动部署,以及Docker集群中硬件资源的合理利用。
在实际操作时,有时需要同时或在相近的时间内将多个软件部署至Docker集群中,在这种情况下,可以采用异步多线程的方式执行步骤S401-S403,以完成多个软件的同时部署。由于异步多线程的方式可以使多个软件的部署过程同时进行,因此可以有效地减少部署多个应用所需的时间。
在利用持续集成工具调用Kubernetes将目标软件的程序包部署至Docker集群中时,可以先判断目标软件的项目类型,再根据项目类型在Docker集群中进行相应的部署。可选地,用户从预设数据库中获取的目标软件的目标数据中包括项目类型的参数,从而使服务端100可以根据该项目类型的参数判断目标软件的项目类型。
在示例性的实施例中,利用持续集成工具调用Kubernetes将目标软件的程序包部署至Docker集群中,可以包括:在目标软件为前端项目或静态资源项目的情况下,利用持续集成工具调用Kubernetes将目标软件的程序包部署至Docker集群的Nginx中;在目标软件为后端项目的情况下,利用持续集成工具调用Kubernetes将目标软件的程序包部署至Docker集群的Tomcat中。
通过在目标软件为前端项目或静态资源项目的情况下,利用持续集成工具调用Kubernetes将目标软件的程序部署至Docker集群的Nginx中;在目标软件为后端项目的情况下,利用持续集成工具调用Kubernetes将目标软件的程序包部署至Docker集群的Tomcat中,可以根据目标软件所属的项目类型在Docker集群中进行相应的部署,实现目标软件的程序包的自动部署,提高软件部署的效率。
本申请实施例提供的软件部署方法,通过利用持续集成工具获取目标软件的代码,利用持续集成工具编译目标软件的代码,得到目标软件的程序包,然后利用持续集成工具执行目标软件本地shell脚本以生成目标软件的配置文件,并将配置文件挂载至Docker集群的Nginx中,再利用持续集成工具将程序包部署至Docker集群中,可以利用持续集成工具实现软件测试环境的自动部署,从而提高部署软件的测试环境的效率,减少因人工操作出现错误的概率;同时,由于配置文件可以通过执行本地shell脚本自动生成并挂载至Docker集群的Nginx中,而Nginx可以根据配置文件实现目标软件的代理转发,因此可以自动实现目标软件的代理转发配置,提高配置的效率,减少人工操作的工作量。
为了进一步说明本申请实施例一提供的软件部署方法,以下通过一个具体示例来说明。
图5示例性示出了本申请实施例一提供的软件部署方法的原理图,其大致原理如下:
1.1、用户操作Web页面调用服务端100的程序,程序查询预设数据库中与目标软件相关的数据,将查询到的数据作为参数传给持续集成工具(图中以Jenkins为例)使用;
1.2、程序调用Jenkins,Jenkins调用其他第三方服务。
1.3、Jenkins根据之前查询到的数据中目标软件的地址到git仓库拉取目标软件的最新代码到本地。
1.4、Jenkins调用软件项目构建工具(图中以Maven为例),对目标软件的最新代码进行源代码的编译,得到目标软件的程序包。
1.5、Jenkins执行本地shell脚本生成Nginx所需要的配置文件。
1.6、Jenkins调用Kubernetes服务创建Docker容器,将目标软件的程序包挂载至创建的Docker容器中实例化容器,根据目标软件的类型进行部署,将前端项目或静态资源项目部署至Nginx中,将后端项目部署至Tomcat的docker服务中。
1.7、重新加载Nginx服务使部署的环境生效。
在根据上述步骤完成软件的部署后,便可以进行软件的访问,其访问的原理图可以如图6所示,其中,虚拟框内对应一个域名,可以包括静态资源项目(或前端项目)和后端项目(图中的服务A、B、C等),虚线框外的Nginx为总的反向代理服务器,而虚线框内的Nginx为虚拟框对应域名的代理服务器,为该域名下所有软件的主入口。在进行软件的访问时,用户访问Docker中的Nginx服务器,Nginx服务器通过识别不同的hostname将用户访问的请求转发到不同的软件中。在进行转发时,通过软件部署时生成的Nginx配置文件对请求进行转发。若Nginx接收到的是API的访问,则Nginx将其转发至一个Tomcat的服务上,若接收到静态资源的访问,则将其转发至本地静态文件夹下;若代理的路径为一个不存在的路径,则将其默认代理至基础的应用服务器上。
相关技术中可以通过人工的方式实现与上述自动部署相似的过程,如图7所示,其大致流程为:
1.1、人工到git仓库拉取目标软件的最新代码;
1.2、人工使用Maven对目标软件的最新代码进行编译,得到编译后的程序包;
1.3、人工创建Nginx的配置文件,进行Nginx域名代理转发的配置;
1.4、人工将编译后的目标上传,并挂载至容器;
1.5、人工调用Kubernetes进行容器的管理操作。
通过将其与图5对应的流程相比可知,人工部署的流程对操作人员的要求较高,效率较低,容易发生错误,特别是当一个运行环境需要部署多个软件时,部署将会更加复杂;而通过图5对应的流程,可以实现软件的自动化部署,提高了软件部署的效率,可以减少出错的概率,也有利于已部署软件的维护。
实施例二
图8示意性示出了根据本申请实施例二的软件部署装置500的框图,该软件部署装置500可以被分割成一个或多个程序模块,一个或者多个程序模块被存储于存储介质中,并由一个或多个处理器所执行,以完成本申请实施例。本申请实施例所称的程序模块是指能够完成特定功能的一系列计算机程序指令段,以下描述将具体介绍本实施例中各程序模块的功能。
如图8所示,该软件部署装置500可以包括获取模块501、编译模块502和配置模块503、部署模块504。
获取模块501,用于利用持续集成工具获取目标软件的代码;
编译模块502,用于利用持续集成工具编译目标软件的代码,得到目标软件的程序包;
配置模块503,用于利用持续集成工具执行目标软件的本地shell脚本以生成目标软件的配置文件,并将配置文件挂载至Docker集群的Nginx中,以使Nginx根据配置文件进行目标软件的代理转发,本地shell脚本根据目标软件的配置信息得到。
部署模块504,用于利用持续集成工具将程序包部署至Docker集群中。
在示例性的实施例中,部署模块504还用于:利用持续集成工具调用Kubernetes将程序包部署至Docker集群中。
在示例性的实施例中,部署模块504还用于:在目标软件为前端项目或静态资源项目的情况下,利用持续集成工具调用Kubernetes将程序包部署至Docker集群的Nginx中;在目标软件为后端项目的情况下,利用持续集成工具调用Kubernetes将程序包部署至Docker集群的Tomcat中。
在示例性的实施例中,编译模块502还用于:在目标软件为Java项目的情况下,利用持续集成工具调用Maven编译目标软件的代码,得到目标软件的程序包;在目标软件为Node.js项目的情况下,利用持续集成工具调用NPM编译目标软件的代码,得到目标软件的程序包。
在示例性的实施例中,获取模块501还用于:获取目标软件的代码地址,将代码地址推送至持续集成工具;利用持续集成工具根据代码地址拉取目标软件的代码。
在示例性的实施例中,获取模块501还用于:获取用户通过Web页面输入的目标软件的查询指令;根据目标软件的查询指令从预设数据库中获取目标软件的目标数据,目标数据至少包括代码地址。
在示例性的实施例中,获取模块501还用于:利用Jenkins根据git仓库的地址到git仓库拉取目标软件的代码。
实施例三
图9示意性示出了根据本申请实施例三的适于软件部署方法的计算机设备600的硬件架构示意图。计算机设备600可以是一种能够按照事先设定或者存储的指令,自动进行数值计算和/或数据处理的设备。例如,可以是机架式服务器、刀片式服务器、塔式服务器或机柜式服务器(包括独立的服务器,或者多个服务器所组成的服务器集群)、网关等。如图9所示,计算机设备600至少包括但不限于:可通过系统总线相互通信链接存储器601、处理器602、网络接口603。其中:
存储器601至少包括一种类型的计算机可读存储介质,可读存储介质包括闪存、硬盘、多媒体卡、卡型存储器(例如,SD或DX存储器等)、随机访问存储器(RAM)、静态随机访问存储器(SRAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、可编程只读存储器(PROM)、磁性存储器、磁盘、光盘等。在一些实施例中,存储器601可以是计算机设备600的内部存储模块,例如该计算机设备600的硬盘或内存。在另一些实施例中,存储器601也可以是计算机设备600的外部存储设备,例如该计算机设备600上配备的插接式硬盘,智能存储卡(Smart Media Card,简称为SMC),安全数字(Secure Digital,简称为SD)卡,闪存卡(Flash Card)等。当然,存储器601还可以既包括计算机设备600的内部存储模块也包括其外部存储设备。本实施例中,存储器601通常用于存储安装于计算机设备600的操作系统和各类应用软件,例如软件部署方法的程序代码等。此外,存储器601还可以用于暂时地存储已经输出或者将要输出的各类数据。
处理器602在一些实施例中可以是中央处理器(Central Processing Unit,简称为CPU)、控制器、微控制器、微处理器、或其他数据处理芯片。该处理器602通常用于控制计算机设备600的总体操作,例如执行与计算机设备600进行数据交互或者通信相关的控制和处理等。本实施例中,处理器602用于运行存储器601中存储的程序代码或者处理数据。
网络接口603可包括无线网络接口或有线网络接口,该网络接口603通常用于在计算机设备600与其他计算机设备之间建立通信链接。例如,网络接口603用于通过网络将计算机设备600与外部终端相连,在计算机设备600与外部终端之间的建立数据传输通道和通信链接等。网络可以是企业内部网(Intranet)、互联网(Internet)、全球移动通信系统(Global System of Mobile communication,简称为GSM)、宽带码分多址(Wideband CodeDivision Multiple Access,简称为WCDMA)、4G网络、5G网络、蓝牙(Bluetooth)、Wi-Fi等无线或有线网络。
需要指出的是,图9仅示出了具有部件601-603的计算机设备,但是应理解的是,并不要求实施所有示出的部件,可以替代的实施更多或者更少的部件。
在本实施例中,存储于存储器601中的软件部署方法还可以被分割为一个或者多个程序模块,并由一个或多个处理器(本实施例为处理器602)所执行,以完成本申请实施例。
实施例四
本申请实施例还提供一种计算机可读存储介质,计算机可读存储介质其上存储有计算机程序,计算机程序被处理器执行时实现实施例中的软件部署方法的步骤。
本实施例中,计算机可读存储介质包括闪存、硬盘、多媒体卡、卡型存储器(例如,SD或DX存储器等)、随机访问存储器(RAM)、静态随机访问存储器(SRAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、可编程只读存储器(PROM)、磁性存储器、磁盘、光盘等。在一些实施例中,计算机可读存储介质可以是计算机设备的内部存储单元,例如该计算机设备的硬盘或内存。在另一些实施例中,计算机可读存储介质也可以是计算机设备的外部存储设备,例如该计算机设备上配备的插接式硬盘,智能存储卡(Smart Media Card,简称为SMC),安全数字(Secure Digital,简称为SD)卡,闪存卡(Flash Card)等。当然,计算机可读存储介质还可以既包括计算机设备的内部存储单元也包括其外部存储设备。本实施例中,计算机可读存储介质通常用于存储安装于计算机设备的操作系统和各类应用软件,例如实施例中软件部署方法的程序代码等。此外,计算机可读存储介质还可以用于暂时地存储已经输出或者将要输出的各类数据。
显然,本领域的技术人员应该明白,上述的本申请实施例的各模块或各步骤可以用通用的计算装置来实现,它们可以集中在单个的计算装置上,或者分布在多个计算装置所组成的网络上,可选地,它们可以用计算装置可执行的程序代码来实现,从而,可以将它们存储在存储装置中由计算装置来执行,并且在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤,或者将它们分别制作成各个集成电路模块,或者将它们中的多个模块或步骤制作成单个集成电路模块来实现。这样,本申请实施例不限制于任何特定的硬件和软件结合。
以上仅为本申请的优选实施例,并非因此限制本申请的专利范围,凡是利用本申请说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本申请的专利保护范围内。

Claims (10)

1.一种软件部署方法,其特征在于,包括:
利用持续集成工具获取目标软件的代码;
利用所述持续集成工具编译所述目标软件的代码,得到所述目标软件的程序包;
利用所述持续集成工具执行所述目标软件的本地shell脚本以生成所述目标软件的配置文件,并将所述配置文件挂载至Docker集群的Nginx中,以使所述Nginx根据所述配置文件进行所述目标软件的代理转发,所述本地shell脚本根据所述目标软件的配置信息得到;
利用所述持续集成工具将所述程序包部署至所述Docker集群中。
2.根据权利要求1所述的软件部署方法,其特征在于,所述利用所述持续集成工具将所述程序包部署至Docker集群中,包括:
利用所述持续集成工具调用Kubernetes将所述程序包部署至Docker集群中。
3.根据权利要求2所述的软件部署方法,其特征在于,所述利用持续集成工具调用Kubernetes将所述程序包部署至Docker集群中,包括:
在所述目标软件为前端项目或静态资源项目的情况下,利用所述持续集成工具调用Kubernetes将所述程序包部署至Docker集群的Nginx中;
在所述目标软件为后端项目的情况下,利用所述持续集成工具调用Kubernetes将所述程序包部署至Docker集群的Tomcat中。
4.根据权利要求1-3任一项所述的软件部署方法,其特征在于,所述利用所述持续集成工具编译所述目标软件的代码,得到所述目标软件的程序包,包括:
在所述目标软件为Java项目的情况下,利用所述持续集成工具调用Maven编译所述目标软件的代码,得到所述目标软件的程序包;
在所述目标软件为Node.js项目的情况下,利用所述持续集成工具调用NPM编译所述目标软件的代码,得到所述目标软件的程序包。
5.根据权利要求1所述的软件部署方法,其特征在于,所述利用持续集成工具获取目标软件的代码,包括:
获取所述目标软件的代码地址,将所述代码地址推送至所述持续集成工具;
利用所述持续集成工具根据所述代码地址拉取所述目标软件的代码。
6.根据权利要求5所述的软件部署方法,其特征在于,所述获取所述目标软件的代码地址,包括:
获取用户通过Web页面输入的所述目标软件的查询指令;
根据所述目标软件的查询指令从预设数据库中获取所述目标软件的目标数据,所述目标数据至少包括所述代码地址。
7.根据权利要求5所述的软件部署方法,其特征在于,所述利用所述持续集成工具根据所述代码地址拉取所述目标软件的代码,包括:
利用Jenkins根据git仓库的地址到所述git仓库拉取所述目标软件的代码。
8.一种软件部署装置,其特征在于,包括:
获取模块,用于利用持续集成工具获取目标软件的代码;
编译模块,用于利用所述持续集成工具编译所述目标软件的代码,得到所述目标软件的程序包;
配置模块,用于利用所述持续集成工具执行所述目标软件的本地shell脚本以生成所述目标软件的配置文件,并将所述配置文件挂载至Docker集群的Nginx中,以使所述Nginx根据所述配置文件进行所述目标软件的代理转发,所述本地shell脚本根据所述目标软件的配置信息得到;
部署模块,用于利用所述持续集成工具将所述程序包部署至Docker集群中。
9.一种计算机设备,所述计算机设备包括存储器、处理器以及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时用于实现权利要求1至7中任一项所述的软件部署方法的步骤。
10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质内存储有计算机程序,所述计算机程序可被至少一个处理器所执行,以使所述至少一个处理器执行权利要求1至7中任一项所述的软件部署方法的步骤。
CN202210216520.0A 2022-03-07 2022-03-07 软件部署方法及装置 Pending CN114564217A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202210216520.0A CN114564217A (zh) 2022-03-07 2022-03-07 软件部署方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202210216520.0A CN114564217A (zh) 2022-03-07 2022-03-07 软件部署方法及装置

Publications (1)

Publication Number Publication Date
CN114564217A true CN114564217A (zh) 2022-05-31

Family

ID=81717597

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202210216520.0A Pending CN114564217A (zh) 2022-03-07 2022-03-07 软件部署方法及装置

Country Status (1)

Country Link
CN (1) CN114564217A (zh)

Similar Documents

Publication Publication Date Title
CN106844137B (zh) 服务器的监控方法和装置
EP3229148A1 (en) Website access method and device, and website system
CN112130871B (zh) 远程部署中间件的方法、装置、计算机设备及存储介质
CN107947954B (zh) 动态调整日志级别的系统、方法及服务器
CN110673923A (zh) Xwiki系统配置方法、系统及计算机设备
CN112230942A (zh) 一种支持多种国产化操作系统的自动化部署方法与系统
CN113709810B (zh) 一种网络服务质量的配置方法、设备和介质
CN114168179B (zh) 微服务管理方法、装置、计算机设备和存储介质
CN108804100B (zh) 创建界面元素的方法、装置、存储介质及移动终端
CN112612982A (zh) 网页预加载方法、装置及计算机设备
CN111367685B (zh) 接口调用的方法及装置、计算机设备、存储介质
CN110109684B (zh) 区块链节点管理代理服务安装方法、电子装置及存储介质
CN115268949A (zh) 一种镜像预热方法、装置、设备及存储介质
CN113079098B (zh) 路由更新的方法、装置、设备和计算机可读介质
CN117112122A (zh) 一种集群部署方法和装置
CN113179269A (zh) 基于物联网的协议数据解析方法、系统、介质及程序产品
CN114564217A (zh) 软件部署方法及装置
CN113746851B (zh) 一种支持实时解析grpc请求的代理系统和方法
CN114662102A (zh) 一种文件处理方法、装置及存储介质
CN111026413B (zh) 以需求为导向的复杂系统“拉取”模式部署系统及其方法
CN110891239B (zh) Pnf配置及pnfd tosca实现方法和装置
CN112463289A (zh) 一种基于虚拟机实现应用服务的方法、系统、设备及介质
CN109669699A (zh) 应用程序分发方法、ac、ap及无线网络系统
CN115827392B (zh) 一种分布式系统的监控方法、装置和系统
US11860752B2 (en) Agentless system and method for discovering and inspecting applications and services in compute environments

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination