CN110688137A - 应用交付方法和装置、存储介质 - Google Patents
应用交付方法和装置、存储介质 Download PDFInfo
- Publication number
- CN110688137A CN110688137A CN201910925958.4A CN201910925958A CN110688137A CN 110688137 A CN110688137 A CN 110688137A CN 201910925958 A CN201910925958 A CN 201910925958A CN 110688137 A CN110688137 A CN 110688137A
- Authority
- CN
- China
- Prior art keywords
- docker
- mirror image
- variable
- target application
- custom
- 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
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/60—Software deployment
- G06F8/65—Updates
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/70—Software maintenance or management
- G06F8/71—Version control; Configuration management
Landscapes
- Engineering & Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computer Security & Cryptography (AREA)
- Stored Programmes (AREA)
Abstract
本说明书实施例提供了一种应用交付方法和装置、存储介质,该方法包括:基于目标应用构建可运维的Docker镜像;启动可运维的Docker镜像,得到Docker容器;获取自定义变量,自定义变量为与目标站点相关的变量,目标站点为目标应用部署的站点;基于自定义变量对Docker容器的设置进行更新;启动Docker容器。本说明书实施例提供的技术方案能够提高应用交付的效率。
Description
技术领域
本说明书涉及计算机领域,尤其涉及一种应用交付方法和装置、存储介质。
背景技术
由于应用的配置项是写死的,当将应用部署到新站点时,需要重新开发,这就降低了应用交付的效率。例如,A公司开发了一个关于大数据的应用,将该应用卖给了B公司,则需要在B公司的平台上交付该应用。但是由于B公司的平台的环境与开发该应用的A公司的平台的环境不同,导致交付该应用的过程中出现故障,甚至需要重新开发应用,这就降低了将该应用交付给B公司的效率。
发明内容
有鉴于此,本说明书实施例提供了一种应用交付方法和装置、存储介质,用以提高应用交付的效率。
第一方面,本说明书实施例提供了一种应用交付方法,所述方法包括:基于目标应用构建可运维的Docker镜像;启动所述可运维的Docker镜像,得到Docker容器;获取自定义变量,所述自定义变量为与目标站点相关的变量,所述目标站点为所述目标应用部署的站点;基于所述自定义变量对所述Docker容器的设置进行更新;启动所述Docker容器。
进一步地,所述基于目标应用构建可运维的Docker镜像,包括:获取所述目标应用的运维脚本、所述目标应用的编译结果包和基础Docker镜像;基于所述运维脚本、所述编译结果包和所述基础Docker镜像构建所述可运维的Docker镜像。
进一步地,所述基于所述运维脚本、所述编译结果包和所述基础Docker镜像构建所述可运维的Docker镜像,包括:将所述基础Docker镜像的地址、所述编译结果包的存储地址以及所述运维脚本的存储地址写入DockerFile文件;基于所述DockerFile文件构建所述可运维的Docker镜像。
进一步地,获取所述目标应用的编译结果包,包括:获取所述目标应用的源代码;将所述源代码中的变量抽取出来;对抽取所述变量之后的源代码进行编译,得到所述目标应用的编译结果包。
进一步地,所述自定义变量包括以下至少之一:所述目标站点的数据库地址、所述目标站点的缓存地址、所述目标站点的用户登录地址。
进一步地,所述基于所述自定义变量对所述Docker容器的设置进行更新,包括:将所述自定义变量输入所述Docker容器;基于所述自定义变量对所述Docker容器中的所述编译结果包进行更新。
进一步地,所述基于所述自定义变量对所述Docker容器中的所述编译结果包进行更新,包括:将所述自定义变量写入所述编译结果包中。
第二方面,本说明书实施例提供了一种应用交付装置,所述装置包括:构建单元,用于基于目标应用构建可运维的Docker镜像;第一启动单元,用于启动所述可运维的Docker镜像,得到Docker容器;获取单元,用于获取自定义变量,所述自定义变量为与目标站点相关的变量,所述目标站点为所述目标应用部署的站点;更新单元,用于基于所述自定义变量对所述Docker容器的设置进行更新;第二启动单元,用于启动所述Docker容器。
进一步地,所述构建单元包括:获取子单元,用于获取所述目标应用的运维脚本、所述目标应用的编译结果包和基础Docker镜像;构建子单元,用于基于所述运维脚本、所述编译结果包和所述基础Docker镜像构建所述可运维的Docker镜像。
进一步地,所述构建子单元包括:写入模块,用于将所述基础Docker镜像的地址、所述编译结果包的存储地址以及所述运维脚本的存储地址写入DockerFile文件;构建模块,用于基于所述DockerFile文件构建所述可运维的Docker镜像。
进一步地,所述获取子单元包括:获取模块,用于获取所述目标应用的源代码;抽取模块,用于将所述源代码中的变量抽取出来;编译模块,用于对抽取所述变量之后的源代码进行编译,得到所述目标应用的编译结果包。
进一步地,所述自定义变量包括以下至少之一:所述目标站点的数据库地址、所述目标站点的缓存地址、所述目标站点的用户登录地址。
进一步地,所述更新单元包括:输入子单元,用于将所述自定义变量输入所述Docker容器;更新子单元,用于基于所述自定义变量对所述Docker容器中的所述编译结果包进行更新。
进一步地,所述更新子单元包括:写入模块,用于将所述自定义变量写入所述编译结果包中。
第三方面,本说明书实施例提供了一种存储介质,所述存储介质包括存储的程序,其中,在所述程序运行时控制所述存储介质所在设备执行上述第一方面所述的应用交付方法。
本说明书实施例中,基于目标应用构建可运维的Docker镜像;启动可运维的Docker镜像,得到Docker容器;获取自定义变量,自定义变量为与目标站点相关的变量,目标站点为目标应用部署的站点;基于自定义变量对Docker容器的设置进行更新;启动Docker容器,完成目标应用的交付,通过将应用需要的环境整体打包,用户不需要关注操作***底层的环境和配置,交付应用时无需重新开发,因此本说明书实施例提供的技术方案能够提高应用交付的效率。
附图说明
为了更清楚地说明本说明书实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本说明书的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1是本说明书实施例提供的一种镜像构建过程示意图;
图2是本说明书实施例提供的一种应用交付过程示意图;
图3是本说明书实施例提供的一种应用交付方法的流程图;
图4是本说明书实施例提供的一种应用交付装置的示意图。
具体实施方式
为了更好的理解本说明书的技术方案,下面结合附图对本说明书实施例进行详细描述。
应当明确,所描述的实施例仅仅是本说明书一部分实施例,而不是全部的实施例。基于本说明书中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本说明书保护的范围。
在本说明书实施例中使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本说明书。在本说明书实施例和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。
对本说明书实施例提供的方案进行具体说明之前,先对本说明书实施例涉及到的技术术语进行解释。
容器:容器是应用服务器中位于组件和平台之间的接口集合。容器是伴随着瘦客户端***的发展而诞生的。在开发瘦客户端***时,开发人员要花费大量的精力去关注线程安全、事务、网络、资源等等细节,从而降低了开发效率。由于对这些细节的解决方法一般是固定不变的,或者只有参数是改变的,所以从代码重用和设计模式的角度出发,开发人员将这些底层细节提取出来,做成平台,并提供一定的接口。这样,业务开发人员就不需要再关注这些底层细节的实现,而专注于业务逻辑的实现。容器一般位于应用服务器之内,由应用服务器负责加载和维护。一个容器只能存在于一个应用服务器之内,一个应用服务器可以建立和维护多个容器。容器一般遵守可配置的原则,即容器的使用者可以通过对容器参数的配置,来达到自己的使用需求,而不需要修改容器的代码。
Docker:Docker是一个开源的应用容器引擎,基于Go语言并遵从Apache2.0协议开源。Docker可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化。
本说明书实施例提供的应用交付方法的流程主要包括两个部分:镜像构建过程和应用交付过程。
请参见图1,所示为本说明书实施例提供的镜像构建过程的示意图,该镜像构建过程包括:对于目标应用的软件源代码,将动态部分的内容作为变量抽取出来(例如作为一种具体的实施方式,可以使用占位符代替动态部分的内容),将变量抽取出来之后的源代码进行编译,得到编译结果包,比如可以编译成war包或者jar包。编写运维脚本,将运维脚本、编译结果包、基础Docker镜像打入一个Docker镜像中,镜像的CMD指令(该指令下文有详细描述)以运维脚本为入口。这样就设计好了一个能快速交付的Docker镜像。
请参见图2,所示为本说明书实施例提供的应用交付过程的示意图,该过程包括:搜集目标站点(目标应用需要部署的站点)的变量,比如目标站点的数据库地址、目标站点的缓存地址、目标站点的用户登录地址等,容器可以通过ENV指令获取这些变量,容器内的变量解析脚本(该变量解析脚本是上述运维脚本的一部分)对这些变量进行解析,用解析得到的内容替换编译结果包中的占位符。启动容器,完成应用交付。
请参见图3,本说明书实施例提供的应用交付方法包括:步骤S301至步骤S305。
步骤S301:基于目标应用构建可运维的Docker镜像。
步骤S301具体可以包括:步骤S3011和步骤S3012。
步骤S3011:获取目标应用的运维脚本、目标应用的编译结果包和基础Docker镜像。
获取目标应用的编译结果包,具体包括:获取目标应用的源代码;将源代码中的变量抽取出来;对抽取变量之后的源代码进行编译,得到目标应用的编译结果包。
在将目标应用的源代码的变量抽取出来之后,可以使用构建工具对目标应用的源代码进行编译,得到目标应用的编译结果包。
构建工具可以是Ant、Maven、Gradle等。
步骤S3012:基于运维脚本、编译结果包和基础Docker镜像构建可运维的Docker镜像。
基于运维脚本、编译结果包和基础Docker镜像构建可运维的Docker镜像,具体包括:将基础Docker镜像的地址、编译结果包的存储地址以及运维脚本的存储地址写入DockerFile文件;基于DockerFile文件构建可运维的Docker镜像。
DockerFile是一个文本格式的配置文件,用户可以使用DockerFile来创建自定义的镜像。
在Docker的运用中,从下载镜像、启动容器、在容器中输入命令来运行程序,这些命令都是手工一条条往里输入的,无法重复利用,而且效率很低。所以就需要一种文件或脚本,把想执行的操作以命令的方式写入其中,然后让Docker读取并分析、执行,那么重复构建、更新将变得很方便,所以DockerFile就此诞生了。Docker提供了DockerFile作为构建Docker镜像脚本,避免用户一行一行的输入。下面详细介绍DockerFile。
DockerFile是一种被Docker程序解释的脚本,它由一条条指令组成,每条指令对应Linux下面的一条命令。Docker程序将这些DockerFile指令翻译成真正的Linux命令。DockerFile有自己书写格式和支持的命令,Docker程序解决这些命令间的依赖关系。Docker程序将读取DockerFile,根据指令生成定制的镜像。有了DockerFile,当需要定制额外的需求时,只需在DockerFile上添加或者修改指令,重新生成镜像即可。
DockerFile分为四部分:基础镜像信息、镜像创建者信息、镜像操作指令、容器启动执行指令。一开始要指明所基于的镜像名称,接下来一般会说明镜像创建者信息。后面则是镜像操作指令。
一个简单的DockerFile可以涉及两条指令,FROM指令和RUN指令。
本说明书实施例中,步骤S3012:基于运维脚本、编译结果包和基础Docker镜像构建可运维的Docker镜像,即,使用DockerFile定制镜像的过程。所谓定制镜像,是以一个镜像为基础,在其上进行定制。基础Docker镜像是需要指定的,而FROM指令就是用以指定基础镜像,因此一个DockerFile中FROM指令是必备的指令,并且是第一条指令。在Docker Hub上有非常多的高质量的官方镜像,有可以直接拿来使用的服务类的镜像,如nginx、redis、mysql、tomcat等。如果没有找到对应服务的镜像,官方镜像中还提供了一些更为基础的操作***镜像,如ubuntu、debian、centos、alpine等。
RUN指令是用来执行命令行命令的。由于命令行的强大能力,RUN指令在定制镜像时是最常用的指令之一。其格式有两种:
shell格式:RUN<命令>
exec格式:RUN["可执行文件",“参数1”,“参数2”]
下面详细描述DockerFile中的其他指令:
COPY指令:复制文件。
格式:
COPY<源路径>...<目标路径>
COPY["<源路径1>",..."<目标路径>"]
COPY指令将从构建上下文目录中<源路径>的文件/目录复制到新的一层的镜像内的<目标路径>位置。比如:
COPY package.json/usr/src/app/
<源路径>可以是多个,甚至可以是通配符,如:
COPY hom*/mydir/
COPY hom?.txt/mydir/
ADD指令:更高级的复制文件。
ADD指令和COPY指令的格式和性质基本一致。但是在COPY指令基础上增加了一些功能。比如<源路径>可以是一个URL,这种情况下,Docker引擎会试图去下载这个链接的文件放到<目标路径>去。
适合使用ADD指令的场合,是需要自动解压缩的场合。
在COPY和ADD指令中选择的时候,可以遵循这样的原则,所有的文件复制均使用COPY指令,仅在需要自动解压缩的场合使用ADD指令。
CMD指令:容器启动命令。
CMD指令的格式和RUN指令相似,也是两种格式:
shell格式:CMD<命令>
exec格式:CMD["可执行文件",“参数1”,“参数2”]
参数列表格式:CMD[“参数1”,“参数2”...]。在指定了ENTRYPOINT指令后,用CMD指定具体参数。
在启动容器的时候,需要指定所运行的程序及参数。CMD指令就是用于指定默认的容器主进程启动命令的。
ENTRYPOINT指令:入口点。
ENTRYPOINT指令的目的和CMD指令一样,都是在指定容器启动程序及参数。ENTRYPOINT指令在运行也可以替代,不过比CMD指令要略显繁琐,需要通过docker run的参数--entrypoint来指定。
当指定了ENTRYPOINT指令后,CMD指令的含义就发生了改变,不再是直接的运行其命令,而是将CMD指令的内容作为参数传给ENTRYPOINT指令,换句话说实际执行时,将变为:
<ENTRYPOINT>"<CMD>"
ENV指令:设置环境变量。
格式有两种:
ENV
ENV==...
这个指令很简单,就是设置环境变量,无论是后面的其他指令,如RUN指令,还是运行时的应用,都可以直接使用这里定义的环境变量。
ENV VERSION=1.0DEBUG=on NAME="Happy Feet"
$VERSION#使用环境变量
下列指令可以支持环境变量展开:ADD、COPY、ENV、EXPOSE、LABEL、USER、WORKDIR、VOLUME、STOPSIGNAL、ONBUILD。
ARG指令:构建参数。
格式:
ARG<参数名>[=<默认值>]
ARG指令和ENV指令的效果一样,都是设置环境变量。所不同的是,ARG指令所设置的构建环境的环境变量,在将来容器运行时是不会存在这些环境变量的。但是不要因此就使用ARG指令保存密码之类的信息,因此docker history还是可以看到所有值的。
Dockerfile中的ARG指令是定义参数名称,以及定义其默认值。该默认值可以在构建命令docker build中用--build-arg<参数名>=<值>来覆盖。
VOLUME指令:定义匿名卷。
格式为:
VOLUME["<路径1>","[路径2]"...]
VOLUME<路径>
容器运行时应该尽量保持容器存储层不发生写操作,对于数据库需要保存动态数据的应用,其数据库文件应该保存于卷(volume)中,为了防止运行时用户忘记将动态文件所保存目录挂载为卷,在DockerFile中,可以事先指定某些目录挂载为匿名卷,这样在运行时如果用户不指定挂载,其应用也可以正常运行,不会向容器存储层写入大量数据。
VOLUME/data
这里的/data目录就会在运行时自动挂载为匿名卷,任何向/data中写入的信息都不会记录进容器存储层,从而保证了容器存储层的无状态化。当然,运行时可以覆盖这个挂载设置。
比如:
docker run-d-v mydata:/data xxxx
在这行命令中,就使用了mydata这个命名卷挂载到了/data这个位置,替代了Dockerfile中定义的匿名卷的挂载配置。
EXPOSE指令:声明端口。
格式为EXPOSE<端口1>[<端口2>...]。
EXPOSE指令是声明运行时容器提供服务端口。
WORKDIR指令:指定工作目录。
格式为WORKDIR<工作目录路径>
使用WORKDIR指令可以来指定工作目录(或者称为当前目录),以后各层的当前目录就被改为指定的目录,如该目录不存在,WORKDIR会帮用户建立目录。
USER指令:指定当前用户。
格式:USER<用户名>
USER指令和WORKDIR相似,都是改变环境状态并影响以后的层。
和WORKDIR指令一样,USER指令只是帮助切换到指定用户而已,这个用户必须是事先建立好的,否则无法切换。
HEALTHCHECK指令:健康检查。
格式:
HEALTHCHECK[选项]CMD<命令>:设置检查容器健康状况的命令
HEALTHCHECK NONE:如果基础镜像有健康检查指令,可以屏蔽掉其健康检查指令。
HEALTHCHECK指令是告诉Docker应该如何进行判断容器的状态是否正常。通过该指令指定一行命令,用这行命令来判断容器主进程的服务状态是否还正常,从而比较真实地反应容器实际状态。
HEALTHCHECK支持下列选项:
--interval=<间隔>:两次健康检查的间隔,默认为30秒;
--timeout=<时长>:健康检查命令运行超时时间,如果超过这个时间,本次健康检查就被视为失败,默认30秒;
--retries=<次数>:当连续失败指定次数后,则将容器状态视为unhealthy,默认3次。
为了帮助排障,健康检查命令的输出(包括stdout以及stderr)都会被存储于健康状态里,可以用docker inspect来查看。
本说明书实施例中,根据DockerFile文件、编译结果包以及基础Docker镜像,通过docker build命令生成容器镜像,从而将编译结果包打包进容器镜像中,创建以编译结果包为基础的可运维Docker镜像。
步骤S302:启动可运维的Docker镜像,得到Docker容器。
步骤S303:获取自定义变量,自定义变量为与目标站点相关的变量,目标站点为目标应用部署的站点。
自定义变量包括以下至少之一:目标站点的数据库地址、目标站点的缓存地址、目标站点的用户登录地址。
步骤S304:基于自定义变量对Docker容器的设置进行更新。
步骤S304具体可以包括:步骤S3041和步骤S3042。
步骤S3041:将自定义变量输入Docker容器。
步骤S3042:基于自定义变量对Docker容器中的编译结果包进行更新。基于自定义变量对Docker容器中的编译结果包进行更新,包括:将自定义变量写入编译结果包中。
使用自定义变量更新Docker容器中的环境参数,包括但不限于更新Docker容器的yml配置文件。比如,如果自定义变量中包括目标站点的数据库地址、目标站点的缓存地址、目标站点的用户登录地址,可以使用自定义变量逐一更新Docker容器的yml配置文件中相应的环境参数。
将自定义变量写入编译结果包中是通过运维脚本来完成的,运维脚本在得到自定义变量之后,根据在运维脚本中预设的变量解析脚本对Docker容器的配置文件(比如:yml配置文件)进行解析,使用Docker容器的配置文件中的参数项逐个与编译结果包中的参数项进行匹配,当Docker容器的配置文件中的参数项的参数键(即参数项的key)与编译结果包中的参数项的参数键相同时,则使用Docker容器的配置文件中的参数键对应的参数值替换掉编译结果包中的参数项的参数键的对应的参数值,直到Docker容器的配置文件中所有的参数项在编译结果包中都匹配并替换成功为止,以完成对编译结果包的更新。
步骤S305:启动Docker容器。具体地,可以通过上述CMD指令启动Docker容器。
在本说明书实施例中,基于目标应用构建可运维的Docker镜像;启动可运维的Docker镜像,得到Docker容器;获取自定义变量,自定义变量为与目标站点相关的变量,目标站点为目标应用部署的站点;基于自定义变量对Docker容器的设置进行更新;启动Docker容器,完成目标应用的交付,通过将应用需要的环境整体打包,用户不需要关注操作***底层的环境和配置,交付应用时无需重新开发,因此本说明书实施例提供的技术方案能够提高应用交付的效率。
请参见图4,本说明书实施例提供了一种应用交付装置,该装置包括:构建单元10、第一启动单元20、获取单元30、更新单元40、第二启动单元50。
构建单元10,用于基于目标应用构建可运维的Docker镜像。
第一启动单元20,用于启动可运维的Docker镜像,得到Docker容器。
获取单元30,用于获取自定义变量,自定义变量为与目标站点相关的变量,目标站点为目标应用部署的站点。
更新单元40,用于基于自定义变量对Docker容器的设置进行更新。
第二启动单元50,用于启动Docker容器。
可选地,构建单元10包括:获取子单元、构建子单元。
获取子单元,用于获取目标应用的运维脚本、目标应用的编译结果包和基础Docker镜像。
构建子单元,用于基于运维脚本、编译结果包和基础Docker镜像构建可运维的Docker镜像。
可选地,构建子单元包括:写入模块、构建模块。
写入模块,用于将基础Docker镜像的地址、编译结果包的存储地址以及运维脚本的存储地址写入DockerFile文件。
构建模块,用于基于DockerFile文件构建可运维的Docker镜像。
可选地,获取子单元包括:构建模块、抽取模块、编译模块。
获取模块,用于获取目标应用的源代码。
抽取模块,用于将源代码中的变量抽取出来。
编译模块,用于对抽取变量之后的源代码进行编译,得到目标应用的编译结果包。
可选地,自定义变量包括以下至少之一:目标站点的数据库地址、目标站点的缓存地址、目标站点的用户登录地址。
可选地,更新单元40包括:输入子单元、更新子单元。
输入子单元,用于将自定义变量输入Docker容器。
更新子单元,用于基于自定义变量对Docker容器中的编译结果包进行更新。
可选地,更新子单元包括:写入模块。
写入模块,用于将自定义变量写入编译结果包中。
本说明书实施例提供了一种存储介质,存储介质包括存储的程序,其中,在程序运行时控制存储介质所在设备执行以下步骤:基于目标应用构建可运维的Docker镜像;启动可运维的Docker镜像,得到Docker容器;获取自定义变量,自定义变量为与目标站点相关的变量,目标站点为目标应用部署的站点;基于自定义变量对Docker容器的设置进行更新;启动Docker容器。
可选地,在程序运行时控制存储介质所在设备还执行以下步骤:获取目标应用的运维脚本、目标应用的编译结果包和基础Docker镜像;基于运维脚本、编译结果包和基础Docker镜像构建可运维的Docker镜像。
可选地,在程序运行时控制存储介质所在设备还执行以下步骤:将基础Docker镜像的地址、编译结果包的存储地址以及运维脚本的存储地址写入DockerFile文件;基于DockerFile文件构建可运维的Docker镜像。
可选地,在程序运行时控制存储介质所在设备还执行以下步骤:获取目标应用的源代码;将源代码中的变量抽取出来;对抽取变量之后的源代码进行编译,得到目标应用的编译结果包。
可选地,在程序运行时控制存储介质所在设备还执行以下步骤:将自定义变量输入Docker容器;基于自定义变量对Docker容器中的编译结果包进行更新。
可选地,在程序运行时控制存储介质所在设备还执行以下步骤:将自定义变量写入编译结果包中。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的***,装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在本说明书所提供的几个实施例中,应该理解到,所揭露的***,装置和方法,可以通过其他的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如,多个单元或组件可以结合或者可以集成到另一个***,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其他的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本说明书各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用硬件加软件功能单元的形式实现。
上述以软件功能单元的形式实现的集成的单元,可以存储在一个计算机可读取存储介质中。上述软件功能单元存储在一个存储介质中,包括若干指令用以使得一台计算机装置(可以是个人计算机,服务器,或者网络装置等)或处理器(Processor)执行本说明书各个实施例所述方法的部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(Read-Only Memory,ROM)、随机存取存储器(Random Access Memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述仅为本说明书的较佳实施例而已,并不用以限制本说明书,凡在本说明书的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本说明书保护的范围之内。
Claims (15)
1.一种应用交付方法,所述方法包括:
基于目标应用构建可运维的Docker镜像;
启动所述可运维的Docker镜像,得到Docker容器;
获取自定义变量,所述自定义变量为与目标站点相关的变量,所述目标站点为所述目标应用部署的站点;
基于所述自定义变量对所述Docker容器的设置进行更新;
启动所述Docker容器。
2.根据权利要求1所述的方法,所述基于目标应用构建可运维的Docker镜像,包括:
获取所述目标应用的运维脚本、所述目标应用的编译结果包和基础Docker镜像;
基于所述运维脚本、所述编译结果包和所述基础Docker镜像构建所述可运维的Docker镜像。
3.根据权利要求2所述的方法,所述基于所述运维脚本、所述编译结果包和所述基础Docker镜像构建所述可运维的Docker镜像,包括:
将所述基础Docker镜像的地址、所述编译结果包的存储地址以及所述运维脚本的存储地址写入DockerFile文件;
基于所述DockerFile文件构建所述可运维的Docker镜像。
4.根据权利要求2所述的方法,获取所述目标应用的编译结果包,包括:
获取所述目标应用的源代码;
将所述源代码中的变量抽取出来;
对抽取所述变量之后的源代码进行编译,得到所述目标应用的编译结果包。
5.根据权利要求1所述的方法,所述自定义变量包括以下至少之一:所述目标站点的数据库地址、所述目标站点的缓存地址、所述目标站点的用户登录地址。
6.根据权利要求1至5任一项所述的方法,所述基于所述自定义变量对所述Docker容器的设置进行更新,包括:
将所述自定义变量输入所述Docker容器;
基于所述自定义变量对所述Docker容器中的所述编译结果包进行更新。
7.根据权利要求6所述的方法,所述基于所述自定义变量对所述Docker容器中的所述编译结果包进行更新,包括:
将所述自定义变量写入所述编译结果包中。
8.一种应用交付装置,所述装置包括:
构建单元,用于基于目标应用构建可运维的Docker镜像;
第一启动单元,用于启动所述可运维的Docker镜像,得到Docker容器;
获取单元,用于获取自定义变量,所述自定义变量为与目标站点相关的变量,所述目标站点为所述目标应用部署的站点;
更新单元,用于基于所述自定义变量对所述Docker容器的设置进行更新;
第二启动单元,用于启动所述Docker容器。
9.根据权利要求8所述的装置,所述构建单元包括:
获取子单元,用于获取所述目标应用的运维脚本、所述目标应用的编译结果包和基础Docker镜像;
构建子单元,用于基于所述运维脚本、所述编译结果包和所述基础Docker镜像构建所述可运维的Docker镜像。
10.根据权利要求9所述的装置,所述构建子单元包括:
写入模块,用于将所述基础Docker镜像的地址、所述编译结果包的存储地址以及所述运维脚本的存储地址写入DockerFile文件;
构建模块,用于基于所述DockerFile文件构建所述可运维的Docker镜像。
11.根据权利要求9所述的装置,所述获取子单元包括:
获取模块,用于获取所述目标应用的源代码;
抽取模块,用于将所述源代码中的变量抽取出来;
编译模块,用于对抽取所述变量之后的源代码进行编译,得到所述目标应用的编译结果包。
12.根据权利要求8所述的装置,所述自定义变量包括以下至少之一:所述目标站点的数据库地址、所述目标站点的缓存地址、所述目标站点的用户登录地址。
13.根据权利要求8至12任一项所述的装置,所述更新单元包括:
输入子单元,用于将所述自定义变量输入所述Docker容器;
更新子单元,用于基于所述自定义变量对所述Docker容器中的所述编译结果包进行更新。
14.根据权利要求13所述的装置,所述更新子单元包括:
写入模块,用于将所述自定义变量写入所述编译结果包中。
15.一种存储介质,所述存储介质包括存储的程序,其中,在所述程序运行时控制所述存储介质所在设备执行权利要求1至7中任意一项所述的应用交付方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910925958.4A CN110688137A (zh) | 2019-09-27 | 2019-09-27 | 应用交付方法和装置、存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910925958.4A CN110688137A (zh) | 2019-09-27 | 2019-09-27 | 应用交付方法和装置、存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN110688137A true CN110688137A (zh) | 2020-01-14 |
Family
ID=69110665
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910925958.4A Pending CN110688137A (zh) | 2019-09-27 | 2019-09-27 | 应用交付方法和装置、存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110688137A (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111596928A (zh) * | 2020-05-19 | 2020-08-28 | 吉林大学 | 一种应用控制方法、装置及电子设备 |
CN111897570A (zh) * | 2020-07-15 | 2020-11-06 | 杭州安恒信息技术股份有限公司 | 一种基于Maven插件的多依赖项文件提取方法及装置 |
CN113703825A (zh) * | 2020-05-21 | 2021-11-26 | 顺丰科技有限公司 | 一种镜像构建方法、装置、服务器及存储介质 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102799444A (zh) * | 2011-05-27 | 2012-11-28 | 华为软件技术有限公司 | 跨平台打包程序的方法及装置 |
CN107885551A (zh) * | 2017-11-27 | 2018-04-06 | 山东浪潮商用***有限公司 | 一种服务部署方法、装置、可读介质及存储控制器 |
CN110058863A (zh) * | 2019-03-16 | 2019-07-26 | 平安城市建设科技(深圳)有限公司 | Docker容器的构建方法、装置、设备及存储介质 |
-
2019
- 2019-09-27 CN CN201910925958.4A patent/CN110688137A/zh active Pending
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102799444A (zh) * | 2011-05-27 | 2012-11-28 | 华为软件技术有限公司 | 跨平台打包程序的方法及装置 |
CN107885551A (zh) * | 2017-11-27 | 2018-04-06 | 山东浪潮商用***有限公司 | 一种服务部署方法、装置、可读介质及存储控制器 |
CN110058863A (zh) * | 2019-03-16 | 2019-07-26 | 平安城市建设科技(深圳)有限公司 | Docker容器的构建方法、装置、设备及存储介质 |
Non-Patent Citations (1)
Title |
---|
ZHCCL: "修改应用程序的配置的资源文件,并按配置发布应用程序工具", 《HTTPS://WWW.IT610.COM/ARTICLE/5442953.HTM》 * |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111596928A (zh) * | 2020-05-19 | 2020-08-28 | 吉林大学 | 一种应用控制方法、装置及电子设备 |
CN113703825A (zh) * | 2020-05-21 | 2021-11-26 | 顺丰科技有限公司 | 一种镜像构建方法、装置、服务器及存储介质 |
CN111897570A (zh) * | 2020-07-15 | 2020-11-06 | 杭州安恒信息技术股份有限公司 | 一种基于Maven插件的多依赖项文件提取方法及装置 |
CN111897570B (zh) * | 2020-07-15 | 2024-04-12 | 杭州安恒信息技术股份有限公司 | 一种基于Maven插件的多依赖项文件提取方法及装置 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111399865A (zh) | 一种基于容器技术自动构建目标文件的方法 | |
US6938250B2 (en) | Image-based software installation | |
US9864600B2 (en) | Method and system for virtualization of software applications | |
CN102567051B (zh) | 一种制备龙芯平台图形化安装***的方法及装置 | |
US7861177B2 (en) | Software configuration program for software applications | |
WO2017185606A1 (zh) | 基于overlay机制的APK开发方法及*** | |
CN110688137A (zh) | 应用交付方法和装置、存储介质 | |
US20090064196A1 (en) | Model based device driver code generation | |
US20140380271A1 (en) | Systems and methods for incremental software development | |
US20140344315A1 (en) | Method and system for configuration of virtualized software applications | |
US9378013B2 (en) | Incremental source code analysis | |
CN113127098B (zh) | 基于微服务架构的应用程序创建方法及相关设备 | |
CN114651233A (zh) | 即时容器 | |
US10866803B2 (en) | Generating interaction libraries | |
US9904574B2 (en) | Parallel computing without requiring antecedent code deployment | |
CN114546819A (zh) | 代码处理方法、装置、电子设备及可读介质 | |
CN101840337B (zh) | 一种适用于捕包应用的裁减***定制方法 | |
CN115756424A (zh) | 一种生成mvp代码的方法、装置及设备 | |
CN113672269A (zh) | 数据处理方法、***、电子设备及程序产品 | |
JP6861733B2 (ja) | 最小限のメモリ及びディスク資源消費のカスタム構築式プロセスエンジン | |
EP4254171A1 (en) | Generation program, generation method, and information processing device | |
JP7280475B2 (ja) | 情報処理装置及びその制御方法、プログラム | |
US20240061666A1 (en) | Automatically deploying a development environment on a target system | |
CN114297089B (zh) | 基于容器的Python远程动态调试方法及*** | |
CN113672238B (zh) | 基于实时操作***模块化管理的运行方法、装置及设备 |
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 | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20200114 |
|
RJ01 | Rejection of invention patent application after publication |