一种将应用部署到运行环境的方法、装置及系统与流程

文档序号:19417855发布日期:2019-12-14 01:06阅读:296来源:国知局
一种将应用部署到运行环境的方法、装置及系统与流程

本发明涉及计算机技术领域,特别涉及一种将应用部署到运行环境的方法、装置及系统。



背景技术:

在应用服务开发过程中,开发团队需要将应用部署到不同的运行环境,比如开发环境、测试环境和生产环境。版本控制工具(vcs)和持续集成部署工具(ci/cd)相结合可以实现应用的持续交付。其中,绝大多数版本控制工具支持分支功能,即在一个已有代码集合(主分支)基础上衍生出一个新的代码集合(特性分支),开发团队在特性分支进行修改,让主分支保持不变,完成开发和验证后,将特性分支的更改合并到主分支。如此,一个应用拥有一个代码库,每个代码库可以有多个分支,每个分支中包括有用于生成应用产物所需的全部源代码文件。不同分支中,一些源代码文件的文件内容,即文件版本可以不同,使得每个分支对应于应用的一个版本。此外,持续集成部署工具提供了任务调度功能,由开发团队提供执行任务所需的任务脚本和触发条件。

目前,考虑到不同分支所对应的环境配置信息通常有所差异,故为了实现基于不同分支将应用部署到不同的运行环境,开发团队为每个分支撰写任务脚本。当系统接受到基于一个分支的部署请求时,系统执行该分支所对应的任务脚本,以部署应用到运行环境。

这种方式要求开发团队要为每个分支撰写任务脚本,实际上不同分支之间的任务脚本的差异是有限的,大多数内容是重复的。当整个应用的部署行为发生变化时,开发团队需要修改每个分支的任务脚本。由于任务脚本需人为撰写,故应用部署效率较低。



技术实现要素:

本发明提供了一种将应用部署到运行环境的方法、装置及系统,能够自动生成任务脚本,从而提高应用部署效率。

为了达到上述目的,本发明是通过如下技术方案实现的:

第一方面,本发明提供了一种将应用部署到运行环境的方法,包括:

确定待部署应用的应用配置信息,以及所述应用的每一个分支,不同分支对应的分支标识不同;

接收外部客户端提供的每一个所述分支的环境配置信息,所述环境配置信息包括运行环境的地址;

在接收到所述客户端发来的、包括有第一分支标识的部署请求时,确定所述第一分支标识对应的第一分支的第一环境配置信息;

根据所述应用配置信息和所述第一环境配置信息,确定所述应用的应用结构,其中,所述应用结构包括:源代码文件、依赖于至少一个源代码文件的元素声明、依赖于至少一个元素声明的任务、依赖于一任务的元素声明;

根据所述应用结构,确定所述应用结构中的每一个待执行任务;

根据所述应用结构、所述第一环境配置信息和预设的规则库,生成每一个所述待执行任务的任务脚本;

根据所述应用结构和生成的各个所述任务脚本,生成任务执行队列;

根据所述第一环境配置信息中包括的运行环境的地址、所述第一分支和所述任务执行队列,顺序处理生成的每一个所述任务脚本,以将所述应用部署到相应运行环境。

进一步地,所述应用结构包括的元素声明有:依赖于服务编排任务的应用声明、依赖于镜像构建任务的镜像声明、依赖于制品构建任务的制品声明、依赖于至少一个源代码文件的源代码工程声明;

所述应用结构包括的任务有:依赖于至少一个镜像声明的服务编排任务、依赖于至少一个制品声明的镜像构建任务、依赖于至少一个源代码工程声明的制品构建任务。

进一步地,所述根据所述应用配置信息和所述第一环境配置信息,确定所述应用的应用结构,包括:

根据所述应用配置信息,确定所述应用的应用结构;

判断所述第一环境配置信息中是否包括有热部署路径信息,若是,根据所述热部署路径信息修改所述应用结构,否则,继续当前流程;

其中,

判断结果为是时,所述根据所述应用结构,确定所述应用结构中的每一个待执行任务,包括:将所述应用结构中,除去第一镜像声明所依赖的镜像构建任务和所间接依赖的每一个制品构建任务之外,剩余的每一个任务均确定为待执行任务,其中,所述第一镜像声明具有所述热部署路径信息中包括的镜像标识;

判断结果为否时,所述根据所述应用结构,确定所述应用结构中的每一个待执行任务,包括:将所述应用结构中的每一个任务均确定为待执行任务。

进一步地,所述顺序处理生成的每一个所述任务脚本,以将所述应用部署到相应运行环境,包括:

除去生成的服务编排任务的任务脚本之外,顺序执行生成的每一个其他任务脚本,并将生成的制品产物存储至外部的制品仓库中,将生成的镜像产物存储至外部的镜像仓库中;

将生成的服务编排任务的任务脚本发送给外部的服务编排系统,以触发所述服务编排系统根据所述第一环境配置信息中包括的运行环境的地址、生成的镜像脚本、所述热部署路径信息中指定的基础镜像,以及所述第一镜像声明所间接依赖的每一个源代码工程声明的源代码工程产物,通过执行接收到的服务编排任务,以将所述应用部署到相应运行环境。

进一步地,所述根据所述应用结构、所述第一环境配置信息和预设的规则库,生成每一个所述待执行任务的任务脚本,包括:

判断所述第一环境配置信息中是否包括有代码编译方式信息和/或制品部署方式信息,若是,根据所述代码编译方式信息和/或制品部署方式信息、预设的规则库,生成每一个所述待执行任务的任务脚本,否则,根据所述规则库,生成每一个所述待执行任务的任务脚本。

进一步地,所述代码编译方式信息包括:编译模式、制品标识和/或制品类型;

其中,所述根据所述代码编译方式信息和/或制品部署方式信息、预设的规则库,生成每一个所述待执行任务的任务脚本,包括:

所述第一环境配置信息中包括有代码编译方式信息时,针对每一个待执行的制品构建任务,均执行下述操作:

a1:判断所述代码编译方式信息中是否包括有,依赖于当前制品构建任务的目标制品声明所属的制品类型,若是,执行a3,否则,执行a2;

a2:判断所述代码编译方式信息中是否包括有,所述目标制品声明的制品标识,若是,执行a3,否则,执行a4;

a3:根据预设的规则库、所述代码编译方式信息中包括的编译模式,生成所述当前制品构建任务的任务脚本,并结束当前流程;

a4:根据所述规则库,生成所述当前制品构建任务的任务脚本。

进一步地,所述制品部署方式信息包括:运行模式、镜像标识和/或镜像类型;

其中,所述根据所述代码编译方式信息和/或制品部署方式信息、预设的规则库,生成每一个所述待执行任务的任务脚本,包括:

所述第一环境配置信息中包括有制品部署方式信息时,针对每一个待执行的镜像构建任务,均执行下述操作:

b1:判断所述制品部署方式信息中是否包括有,依赖于当前镜像构建任务的目标镜像声明所属的镜像类型,若是,执行b3,否则,执行b2;

b2:判断所述制品部署方式信息中是否包括有,所述目标镜像声明的镜像标识,若是,执行b3,否则,执行b4;

b3:根据所述规则库、所述制品部署方式信息中包括的运行模式,生成所述当前镜像构建任务的任务脚本,并结束当前流程;

b4:根据所述规则库,生成所述当前镜像构建任务的任务脚本。

进一步地,在所述顺序处理生成的每一个所述任务脚本,以将所述应用部署到相应运行环境之前,进一步包括:

判断所述第一环境配置信息中是否包括有环境变量信息,若是,确定所述环境变量信息中的变量名和变量值,并根据所述第一环境配置信息中包括的运行环境的地址,确定相应运行环境中、具有所述变量名的目标环境变量,以及将所述目标环境变量的取值更改为所述变量值,并继续当前流程,否则,继续当前流程。

第二方面,本发明提供了一种应用配置、集成和部署系统,用于执行上述任一所述将应用部署到运行环境的方法,该系统包括:

确定单元,用于确定待部署应用的应用配置信息,以及所述应用的每一个分支,不同分支对应的分支标识不同;

环境配置信息接收单元,用于接收外部客户端提供的每一个所述分支的环境配置信息,所述环境配置信息包括运行环境的地址;

部署请求接收单元,用于在接收到所述客户端发来的、包括有第一分支标识的部署请求时,确定所述第一分支标识对应的第一分支的第一环境配置信息;

应用结构确定单元,用于根据所述应用配置信息和所述第一环境配置信息,确定所述应用的应用结构,其中,所述应用结构包括:源代码文件、依赖于至少一个源代码文件的元素声明、依赖于至少一个元素声明的任务、依赖于一任务的元素声明;

任务确定单元,用于根据所述应用结构,确定所述应用结构中的每一个待执行任务;

任务脚本生成单元,用于根据所述应用结构、所述第一环境配置信息和预设的规则库,生成每一个所述待执行任务的任务脚本;

任务执行队列生成单元,用于根据所述应用结构和生成的各个所述任务脚本,生成任务执行队列;

应用部署处理单元,用于根据所述第一环境配置信息中包括的运行环境的地址、所述第一分支和所述任务执行队列,顺序处理生成的每一个所述任务脚本,以将所述应用部署到相应运行环境。

第三方面,本发明提供了一种将应用部署到运行环境的系统,包括:客户端、制品仓库、镜像仓库、服务编排系统,以及上述应用配置、集成和部署系统;

其中,所述客户端,用于针对待部署应用的每一个分支,将外部输入的每一个所述分支的环境配置信息,发送给所述应用配置、集成和部署系统,其中,不同分支对应的分支标识不同,所述环境配置信息包括运行环境的地址;外部触发第一分支以请求部署时,将包括有所述第一分支的分支标识的部署请求,发送给所述应用配置、集成和部署系统;

所述应用配置、集成和部署系统,用于将通过执行制品构建任务的任务脚本而生成的制品产物,存储至所述制品仓库;将通过执行镜像构建任务的任务脚本而生成的镜像产物,存储至所述镜像仓库;将生成的服务编排任务的任务脚本发送给所述服务编排系统;

所述服务编排系统,用于根据所述第一分支的环境配置信息中包括的运行环境的地址,基于所述镜像仓库中存储的镜像产物,通过执行接收到的服务编排任务,以将所述应用部署到相应运行环境。

本发明提供了一种将应用部署到运行环境的方法、装置及系统,该方法包括:确定应用的应用配置信息及其各个分支、各分支的环境配置信息;客户端针对第一分支请求部署时,根据应用配置信息和该分支的环境配置信息,确定应用的应用结构,应用结构包括源代码文件、依赖于源代码文件的元素声明、依赖于元素声明的任务、依赖于任务的元素声明;根据应用结构确定各待执行任务;根据应用结构、环境配置信息和预设规则库生成各待执行任务的任务脚本;根据应用结构和各任务脚本生成任务执行队列;根据环境配置信息中的环境地址、第一分支和任务执行队列,顺序处理各任务脚本以将应用部署到相应运行环境。本发明能够自动生成任务脚本,从而提高应用部署效率。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1是本发明一实施例提供的一种将应用部署到运行环境的方法的流程图;

图2是本发明一实施例提供的一种应用结构的示意图;

图3是本发明一实施例提供的另一种应用结构的示意图;

图4是本发明一实施例提供的一种应用配置、集成和部署系统的示意图;

图5是本发明一实施例提供的一种将应用部署到运行环境的系统的示意图。

具体实施方式

为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例,基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本发明保护的范围。

如图1所示,本发明实施例提供了一种将应用部署到运行环境的方法,可以包括以下步骤:

步骤101:确定待部署应用的应用配置信息,以及所述应用的每一个分支,不同分支对应的分支标识不同。

步骤102:接收外部客户端提供的每一个所述分支的环境配置信息,所述环境配置信息包括运行环境的地址。

步骤103:在接收到所述客户端发来的、包括有第一分支标识的部署请求时,确定所述第一分支标识对应的第一分支的第一环境配置信息。

步骤104:根据所述应用配置信息和所述第一环境配置信息,确定所述应用的应用结构,其中,所述应用结构包括:源代码文件、依赖于至少一个源代码文件的元素声明、依赖于至少一个元素声明的任务、依赖于一任务的元素声明。

步骤105:根据所述应用结构,确定所述应用结构中的每一个待执行任务。

步骤106:根据所述应用结构、所述第一环境配置信息和预设的规则库,生成每一个所述待执行任务的任务脚本。

步骤107:根据所述应用结构和生成的各个所述任务脚本,生成任务执行队列。

步骤108:根据所述第一环境配置信息中包括的运行环境的地址、所述第一分支和所述任务执行队列,顺序处理生成的每一个所述任务脚本,以将所述应用部署到相应运行环境。

本发明实施例提供的将应用部署到运行环境的方法包括:确定应用的应用配置信息及其各个分支、各分支的环境配置信息;客户端针对第一分支请求部署时,根据应用配置信息和该分支的环境配置信息,确定应用的应用结构,应用结构包括源代码文件、依赖于源代码文件的元素声明、依赖于元素声明的任务、依赖于任务的元素声明;根据应用结构确定各待执行任务;根据应用结构、环境配置信息和预设规则库生成各待执行任务的任务脚本;根据应用结构和各任务脚本生成任务执行队列;根据环境配置信息中的环境地址、第一分支和任务执行队列,顺序处理各任务脚本以将应用部署到相应运行环境。本发明实施例能够自动生成任务脚本,从而提高应用部署效率。

本发明实施例中,上述步骤101至步骤108的执行主体可以为应用配置、集成和部署系统,下面可以简称为部署系统。

为实现任务脚本的自动生成,需要预先确定待部署应用的应用结构。如此,在步骤101中,需预先确定好待部署应用的应用配置信息,从而可以根据应用配置信息来确定应用结构。在本发明一个实施例中,开发者可以按需编写这一应用配置信息,并经客户端以发送给部署系统。

请参考图2,图2示出了一个应用的应用结构。通常情况下,应用结构的最上层为应用声明,最底层为各个源代码文件。基于所有源代码文件,并结合应用结构的具体构架,来顺序执行应用结构中的各个任务,即可最终生成应用声明的应用产物。

其中,同一源代码文件可以有不同版本,不同版本间的源代码文件内容有所差别。如此,基于源代码文件的不同版本来分别生成应用产物时,可以相应生成不同版本的应用产物。

对应地,为将不同应用产物分别部署到运行环境,开发者可按需编写同一源代码文件的不同版本。如此,即可确定待部署应用的各个分支,每个分支中包括有用于生成应用产物所需的全部源代码文件。比如,待部署应用的应用结构如图2所示时,该应用的任一分支中,均包括有图2所示应用结构中最底层的各个源代码文件。当然,不同分支中,至少存在一源代码文件的文件版本不同。

当然,为便于部署系统识别不同分支,不同分支对应有不同的分支标识。基于此,步骤101中,还可预先确定待部署应用的各个分支,即确定好用于生成应用产物的各个源代码文件。

基于上述内容可知,应用结构和分支可决定待部署的应用。如此,在将应用部署到运行环境中时,还需预先确定好环境配置信息,以决定应用部署所针对的运行环境。

详细地,应用的各个分支确定好后,由于根据任一分支来实现将应用部署到运行环境时,这一运行环境通常是与该分支相对应的,如此,开发者在请求应用部署之前,可以根据预设好的各个分支,对应设置各个分支的环境配置信息,并发送给部署系统。当然,这一环境配置信息至少需指定有运行环境的地址。对应地,步骤102中,部署系统会接收到客户端提供的环境配置信息。

本发明实施例中,由于一应用的分支可以有多个,且各分支和分支对应的环境配置信息已确定,故开发者即可针对不同分支标识以发出部署请求,从而即可基于各个分支标识所对应的分支和环境配置信息,将同一应用的不同应用产物分别部署到相应不同运行环境,从而实现了在多个环境差异化构建和部署应用。可以看出,为实现多环境差异化构建和部署,开发者仅需按需设置分支及其环境配置信息即可,且不同分支间的差异性通常不大,故开发者的操作较为简单。

除了运行环境的地址以外,在本发明一个实施例中,上述环境配置信息还可以包括热部署路径信息、代码编译方式信息和/或制品部署方式信息、环境变量信息中的任意一个或多个。

其中,通过设置热部署路径信息,可以指示应用结构中的某个元素声明以热部署的方式部署;通过设置代码编译方式信息,可以指示应用结构中某个制品构建任务的任务脚本所对应的编译方式;通过设置制品部署方式信息,可以指示应用结构中某个镜像构建任务的任务脚本所对应的部署方式;通过设置环境变量信息,可以改变运行环境中某个环境变量的取值。

开发者需要将应用部署到运行环境时,即可通过客户端,针对特定分支以提出部署请求。如此,客户端发出的部署请求中可携带有该特定分支的分支标识。对应地,步骤103中,部署系统即可在接收到这一部署请求时,即可根据分支标识,以确定相应分支的环境配置信息,即确定上述第一环境配置信息。

由于环境配置信息中有可能包括有热部署路径信息,这一信息的存在会引发应用结构的改变,故步骤104中,可结合应用配置信息和第一环境配置信息,来确定应用的应用结构。比如,这一应用结构可以如图2所示。请参考图2,应用结构中包括有源代码文件、依赖于至少一个源代码文件的元素声明、依赖于至少一个元素声明的任务、依赖于一任务的元素声明。

具体地,依赖于源代码文件的元素声明可以为源代码工程声明,依赖于源代码工程声明的任务可以为制品构建任务,依赖于制品构建任务的元素声明可以为制品声明,依赖于制品声明的任务可以为镜像构建任务,依赖于镜像构建任务的元素声明可以为镜像声明,依赖于镜像声明的任务可以为服务编排任务,依赖于服务编排任务的元素声明可以为应用声明。

通过执行制品构建任务可以生成相应制品声明的制品产物,通过执行镜像构建任务可以生成相应镜像声明的镜像产品,通过执行服务编排任务可以生成相应应用声明的应用产物,生成的应用产物即可部署到运行环境中,以完成将应用部署到运行环境的部署操作。

因此,在本发明一个实施例中,所述应用结构包括的元素声明有:依赖于服务编排任务的应用声明、依赖于镜像构建任务的镜像声明、依赖于制品构建任务的制品声明、依赖于至少一个源代码文件的源代码工程声明;

所述应用结构包括的任务有:依赖于至少一个镜像声明的服务编排任务、依赖于至少一个制品声明的镜像构建任务、依赖于至少一个源代码工程声明的制品构建任务。

由于应用产物的生成依赖于应用结构中的各个任务,故在步骤105中,即可根据确定好的应用结构,来确定各个待执行任务。当然,这些待执行任务为应用结构中所有任务的部分或全部。

详细地,通过执行应用结构中的任务,可以根据相应下层元素声明的元素产物,来生成当前层元素声明的元素产物,如此循环,直至生成应用产物。如此,需要生成各个待执行任务的相应任务脚本。

此外,由于环境配置信息中有可能包括有代码编译方式信息和/或制品部署方式信息,这一信息的存在会影响任务脚本的生成,故步骤106中,可结合应用结构、第一环境配置信息、预设规则库来生成各个待执行任务的相应任务脚本。

详细地,预设规则库中,存储了根据元素的结构如何生成指令的规则。

例如,制品生成规则

输入:源代码工程类型=dotnetcore,输出`dotnetbuild$projectdir`,

输入:源代码工程类型=dotnetcore,输出`javac$projectdir`,

$projectdir为占位符号,最终将替换为源代码工程的根文件夹。

例如,镜像生成规则

输入:服务类型=frontend,基础镜像=nginx

输出:copy$artifact/root/www

nginxrun

$artifact为占位符号,最终将替换为镜像所依赖制品的位置。

步骤107中,生成各个待执行任务的相应任务脚本之后,即可根据应用结构中限定的各待执行任务间的逻辑关系,结合相应任务脚本,来生成任务执行队列。

步骤108中,根据任务执行队列顺序处理各个任务脚本,即可生成应用产物。当然,任务脚本的执行需用到源代码文件,如此会根据开发者发出部署请求时所针对的分支,即上述第一分支,来执行任务脚本。当然,为将应用产物部署到特定运行环境,还需获取其环境地址,即上述第一环境配置信息中包括的运行环境的地址。综上,即完成了将应用部署到运行环境的部署操作。

对于部署系统对各个任务脚本的处理操作,在本发明一个实施例中,考虑到外部现有的服务编排系统,可以读取镜像仓库中存储的镜像产物,并基于此执行服务编排任务以生成应用产物,故部署系统可以仅执行制品构建任务的任务脚本和镜像构建任务的任务脚本,而不执行服务编排任务的任务脚本,将服务编排任务的任务脚本交由服务编排系统来执行。

详细地,部署系统执行相应任务脚本生成制品产物后,可以将制品产物存储至制品仓库,以及通过读取制品仓库中存储的这些制品产物,执行相应任务脚本生成镜像产物,并将生成的镜像产物存储至镜像仓库,最后将服务编排任务的任务脚本和第一环境配置信息中的运行环境地址发送给服务编排系统,以触发其执行接收到的任务脚本以生成应用产物,并将应用产物部署到相应运行环境。

上面提到,第一环境配置信息中包括有热部署路径信息时,会影响应用结构的生成和待执行任务的确定。因此,在本发明一个实施例中,为了说明一种存在热部署路径信息时应用部署的可能实现方式,所以,步骤104中,所述根据所述应用配置信息和所述第一环境配置信息,确定所述应用的应用结构,包括:

根据所述应用配置信息,确定所述应用的应用结构;

判断所述第一环境配置信息中是否包括有热部署路径信息,若是,根据所述热部署路径信息修改所述应用结构,否则,继续当前流程;

其中,

判断结果为是时,所述步骤105,包括:将所述应用结构中,除去第一镜像声明所依赖的镜像构建任务和所间接依赖的每一个制品构建任务之外,剩余的每一个任务均确定为待执行任务,其中,所述第一镜像声明具有所述热部署路径信息中包括的镜像标识;

判断结果为否时,所述步骤105,包括:将所述应用结构中的每一个任务均确定为待执行任务。

本发明实施例中,首先根据应用配置信息来初步生成相应的应用结构,然后判断是否存在热部署路径信息,若存在需对应更改应用结构,反之则无需更改应用结构。当然,应用结构更改后,后续将基于更改后的应用结构来确定待执行任务。

若应用结构更改,则对于更改后应用结构中的全部任务,除了热部署路径所指定镜像声明所依赖的各个任务外,其他任务均为待执行任务。对应地,若应用结构未更改,则应用结构中的全部任务均为待执行任务。

比如,若更改后的应用结构如图3所示,且热部署路径信息中包括有镜像声明1的镜像标识,则待执行任务有:服务编排任务1、镜像构建任务2、制品构建任务3和制品构建任务4。

基于上述内容,在本发明一个实施例中,为了说明一种将应用热部署到运行环境的可能实现方式,所以,步骤108中,所述顺序处理生成的每一个所述任务脚本,以将所述应用部署到相应运行环境,包括:

除去生成的服务编排任务的任务脚本之外,顺序执行生成的每一个其他任务脚本,并将生成的制品产物存储至外部的制品仓库中,将生成的镜像产物存储至外部的镜像仓库中;

将生成的服务编排任务的任务脚本发送给外部的服务编排系统,以触发所述服务编排系统根据所述第一环境配置信息中包括的运行环境的地址、生成的镜像脚本、所述热部署路径信息中指定的基础镜像,以及所述第一镜像声明所间接依赖的每一个源代码工程声明的源代码工程产物,通过执行接收到的服务编排任务,以将所述应用部署到相应运行环境。

通常情况下,一镜像声明的镜像产物,是在基础镜像之上,再加上该镜像声明所间接依赖的各个制品声明的制品产物,而构建得到的。如此,需要对该镜像声明的镜像产物进行热部署时,可以使用基础镜像替代该镜像声明的镜像产物,与生成的其他镜像产物一起参与编排,从而部署为应用。然后将该镜像声明所间接依赖的各个源代码工程声明的源代码工程产物,直接拷贝到运行环境,从而达到热部署的目的。

如此,热部署路径信息可以包括分支标识、镜像标识、替代镜像这三项信息。

举例来说,假设步骤104中确定出的应用结构如图3所示,镜像声明1的镜像产物,是在基础镜像microsoft/dotnet之上,再加上制品声明1的制品产物和制品声明2的制品产物而构建得到的。由于需要对镜像声明1的镜像产物进行热部署,则使用基础镜像microsoft/dotnet替代镜像声明1的镜像产物,与镜像声明2的镜像产物一起参与编排,从而部署为应用。然后将源代码工程声明1的源代码工程产物和源代码工程声明2的源代码工程产物,直接拷贝到运行环境,从而达到热部署的目的。

上面提到,应用结构如图3所示时,待执行任务有服务编排任务1、镜像构建任务2、制品构建任务3和制品构建任务4。

详细地,部署系统可以根据第一分支中,源代码文件集合1~4的相应内容,对应分别得到源代码工程声明1的源代码工程产物1、源代码工程声明2的源代码工程产物2、源代码工程声明3的源代码工程产物3、源代码工程声明4的源代码工程产物4。

对于任务脚本的执行,具体地,部署系统根据源代码工程产物3执行制品构建任务3的任务脚本生成制品3,根据源代码工程产物4执行制品构建任务4的任务脚本生成制品4,最后根据制品3和制品4,执行镜像构建任务2的任务脚本生成镜像产物2,并将服务编排任务1的任务脚本发送给服务编排系统,并触发服务编排系统根据第一环境配置信息中包括的运行环境的地址、镜像产物2、基础镜像microsoft/dotnet、源代码工程产物1、源代码工程产物2,通过执行服务编排任务1,将应用部署到相应运行环境。

本发明实施例中,热部署路径是为了实现快速地生成应用,便于开发人员及时验证结果。对特定分支,在运行环境部署已有的基础镜像,对于每次请求,部署系统将源代码工程的产物直接部署到运行环境,不经过制品节点、镜像节点。

上面提到,第一环境配置信息中包括有代码编译方式信息和/或制品部署方式信息时,会影响任务脚本的生成。因此,在本发明一个实施例中,为了说明一种脚本生成规则影响任务脚本生成的可能实现方式,所以,所述步骤106,包括:判断所述第一环境配置信息中是否包括有代码编译方式信息和/或制品部署方式信息,若是,根据所述代码编译方式信息和/或制品部署方式信息、预设的规则库,生成每一个所述待执行任务的任务脚本,否则,根据所述规则库,生成每一个所述待执行任务的任务脚本。

本发明实施例中,存在脚本生成规则时,结合脚本生成规则和预设规则库来生成任务脚本,不存在脚本生成规则时,直接根据预设规则库来生成任务脚本。

详细地,脚本生成规则可以包括代码编译方式信息和/或制品部署方式信息,两者可分别单独存在或均存在。

详细地,针对脚本生成规则仅包括代码编译方式信息的情况,在本发明一个实施例中,所述代码编译方式信息包括:编译模式、制品标识和/或制品类型;

其中,所述根据所述代码编译方式信息和/或制品部署方式信息、预设的规则库,生成每一个所述待执行任务的任务脚本,包括:

所述第一环境配置信息中包括有代码编译方式信息时,针对每一个待执行的制品构建任务,均执行下述操作:

a1:判断所述代码编译方式信息中是否包括有,依赖于当前制品构建任务的目标制品声明所属的制品类型,若是,执行a3,否则,执行a2;

a2:判断所述代码编译方式信息中是否包括有,所述目标制品声明的制品标识,若是,执行a3,否则,执行a4;

a3:根据预设的规则库、所述代码编译方式信息中包括的编译模式,生成所述当前制品构建任务的任务脚本,并结束当前流程;

a4:根据所述规则库,生成所述当前制品构建任务的任务脚本。

详细地,代码编译方式信息可以包括分支标识、制品标识/类型、编译模式这三项信息。

本发明实施例中,只要一制品声明符合指定的制品标识/类型,生成该制品声明所依赖的制品构建任务的任务脚本时,就需要满足指定的编译模式。

详细地,针对脚本生成规则仅包括制品部署方式信息的情况,在本发明一个实施例中,所述制品部署方式信息包括:运行模式、镜像标识和/或镜像类型;

其中,所述根据所述代码编译方式信息和/或制品部署方式信息、预设的规则库,生成每一个所述待执行任务的任务脚本,包括:

所述第一环境配置信息中包括有制品部署方式信息时,针对每一个待执行的镜像构建任务,均执行下述操作:

b1:判断所述制品部署方式信息中是否包括有,依赖于当前镜像构建任务的目标镜像声明所属的镜像类型,若是,执行b3,否则,执行b2;

b2:判断所述制品部署方式信息中是否包括有,所述目标镜像声明的镜像标识,若是,执行b3,否则,执行b4;

b3:根据所述规则库、所述制品部署方式信息中包括的运行模式,生成所述当前镜像构建任务的任务脚本,并结束当前流程;

b4:根据所述规则库,生成所述当前镜像构建任务的任务脚本。

详细地,制品部署方式信息可以包括分支标识、镜像标识/类型、运行模式这三项信息。

本发明实施例中,只要一镜像声明符合指定的镜像标识/类型,生成该镜像声明所依赖的镜像构建任务的任务脚本时,就需要满足指定的运行模式。

详细地,脚本生成规则同时包括代码编译方式信息和制品部署方式信息时,任务脚本生成过程即为上述两种实现方式的结合,即需要执行上述a1~a4、b1~b4。

本发明实施例中,脚本生成规则是为了实现以特定方式构建和部署应用,便于开发人员能够在运行环境对应用的运行状态进行检查或调试。对特定分支,系统以调试模式编译源代码,以调试模式启动服务。

上面提到,第一环境配置信息中包括有环境变量信息时,会影响应用部署所面向的运行环境。因此,在本发明一个实施例中,为了说明一种环境变量信息影响应用部署所面向的运行环境的可能实现方式,所以,在步骤108之前,进一步包括:

判断所述第一环境配置信息中是否包括有环境变量信息,若是,确定所述环境变量信息中的变量名和变量值,并根据所述第一环境配置信息中包括的运行环境的地址,确定相应运行环境中、具有所述变量名的目标环境变量,以及将所述目标环境变量的取值更改为所述变量值,并继续当前流程,否则,继续当前流程。

详细地,环境变量信息可以包括分支标识、变量名、变量值这三项信息。

本发明实施例中,存在环境变量信息时,先根据环境变量信息来更改现有运行环境,再执行步骤108,以将应用部署到更改后的运行环境中。不存在环境变量信息时,直接执行步骤108。

本发明实施例中,环境变量是为了实现不同分支所生成的应用部署到不同的运行环境。对特定分支,部署系统使用配置的目标地址将应用部署到指定的运行环境。

由上述内容可知,热部署路径信息、代码编译方式信息、制品部署方式信息、环境变量信息这些环境配置子信息中,均可以包括有分支标识,以用于区分子信息所针对的分支。基于此,在本发明一个实施例中,对应于上述步骤102,开发者可以将带有分支标识的环境配置子信息,经客户端发送给部署系统,部署系统在接收到一个环境配置子信息后,根据其中的分支标识,以将其与相应分支相关联,从而可以确定出各个分支的环境配置信息。

综上所述,本发明实施例提供了一种将应用部署到运行环境的方法,部署系统基于应用配置信息和环境配置信息来确定应用结构,再结合应用结构和环境配置信息以自动生成各个待执行任务的任务脚本,通过任务脚本的自动执行以将应用部署到运行环境。可见,开发人员和运维人员不需要撰写脚本,只需要预先为系统提供每个分支对应的环境配置信息,包括运行环境的目标地址、代码编译方式和制品部署方式、热部署路径等,当部署系统接收到基于一个分支的部署请求时,部署系统提取这些环境配置信息,融合到该分支的构建和部署过程,完成部署任务。

如图4所示,本发明实施例提供了一种应用配置、集成和部署系统,用于执行上述任一所述将应用部署到运行环境的方法,该系统包括:

确定单元401,用于确定待部署应用的应用配置信息,以及所述应用的每一个分支,不同分支对应的分支标识不同;

环境配置信息接收单元402,用于接收外部客户端提供的每一个所述分支的环境配置信息,所述环境配置信息包括运行环境的地址;

部署请求接收单元403,用于在接收到所述客户端发来的、包括有第一分支标识的部署请求时,确定所述第一分支标识对应的第一分支的第一环境配置信息;

应用结构确定单元404,用于根据所述应用配置信息和所述第一环境配置信息,确定所述应用的应用结构,其中,所述应用结构包括:源代码文件、依赖于至少一个源代码文件的元素声明、依赖于至少一个元素声明的任务、依赖于一任务的元素声明;

任务确定单元405,用于根据所述应用结构,确定所述应用结构中的每一个待执行任务;

任务脚本生成单元406,用于根据所述应用结构、所述第一环境配置信息和预设的规则库,生成每一个所述待执行任务的任务脚本;

任务执行队列生成单元407,用于根据所述应用结构和生成的各个所述任务脚本,生成任务执行队列;

应用部署处理单元408,用于根据所述第一环境配置信息中包括的运行环境的地址、所述第一分支和所述任务执行队列,顺序处理生成的每一个所述任务脚本,以将所述应用部署到相应运行环境。

上述系统内的各单元之间的信息交互、执行过程等内容,由于与本发明方法实施例基于同一构思,具体内容可参见本发明方法实施例中的叙述,此处不再赘述。

基于上述内容,如图5所示,本发明实施例提供了一种将应用部署到运行环境的系统,可以包括:

客户端501、制品仓库502、镜像仓库503、服务编排系统504,以及上述应用配置、集成和部署系统505;

其中,所述客户端501,用于针对待部署应用的每一个分支,将外部输入的每一个所述分支的环境配置信息,发送给所述应用配置、集成和部署系统505,其中,不同分支对应的分支标识不同,所述环境配置信息包括运行环境的地址;外部触发第一分支以请求部署时,将包括有所述第一分支的分支标识的部署请求,发送给所述应用配置、集成和部署系统505;

所述应用配置、集成和部署系统505,用于将通过执行制品构建任务的任务脚本而生成的制品产物,存储至所述制品仓库502;将通过执行镜像构建任务的任务脚本而生成的镜像产物,存储至所述镜像仓库503;将生成的服务编排任务的任务脚本发送给所述服务编排系统504;

所述服务编排系统504,用于根据所述第一分支的环境配置信息中包括的运行环境的地址,基于所述镜像仓库503中存储的镜像产物,通过执行接收到的服务编排任务,以将所述应用部署到相应运行环境。

本发明实施例中,部署系统对任务脚本的处理方式为,仅执行制品构建任务和镜像构建任务的任务脚本,而将服务编排任务的任务脚本发给,现有专用于执行服务编排任务以生成应用产物,并将应用产物部署到运行环境的服务编排系统。对应地,服务编排系统通过执行接收到的服务编排任务,以将应用部署到相应运行环境。

上述系统内的各单元之间的信息交互、执行过程等内容,由于与本发明方法实施例基于同一构思,具体内容可参见本发明方法实施例中的叙述,此处不再赘述。

综上所述,本发明的实施例具有至少如下有益效果:

1、本发明实施例提供的将应用部署到运行环境的方法包括:确定应用的应用配置信息及其各个分支、各分支的环境配置信息;客户端针对第一分支请求部署时,根据应用配置信息和该分支的环境配置信息,确定应用的应用结构,应用结构包括源代码文件、依赖于源代码文件的元素声明、依赖于元素声明的任务、依赖于任务的元素声明;根据应用结构确定各待执行任务;根据应用结构、环境配置信息和预设规则库生成各待执行任务的任务脚本;根据应用结构和各任务脚本生成任务执行队列;根据环境配置信息中的环境地址、第一分支和任务执行队列,顺序处理各任务脚本以将应用部署到相应运行环境。本发明实施例能够自动生成任务脚本,从而提高应用部署效率。

2、本发明实施例中,由于一应用的分支可以有多个,且各分支和分支对应的环境配置信息已确定,故开发者即可针对不同分支标识以发出部署请求,从而即可基于各个分支标识所对应的分支和环境配置信息,将同一应用的不同应用产物分别部署到相应不同运行环境,从而实现了在多个环境差异化构建和部署应用。可以看出,为实现多环境差异化构建和部署,开发者仅需按需设置分支及其环境配置信息即可,且不同分支间的差异性通常不大,故开发者的操作较为简单。

3、本发明实施例中,热部署路径是为了实现快速地生成应用,便于开发人员及时验证结果。对特定分支,在运行环境部署已有的基础镜像,对于每次请求,部署系统将源代码工程的产物直接部署到运行环境,不经过制品节点、镜像节点。

4、本发明实施例中,脚本生成规则是为了实现以特定方式构建和部署应用,便于开发人员能够在运行环境对应用的运行状态进行检查或调试。对特定分支,系统以调试模式编译源代码,以调试模式启动服务。

5、本发明实施例中,环境变量是为了实现不同分支所生成的应用部署到不同的运行环境。对特定分支,部署系统使用配置的目标地址将应用部署到指定的运行环境。

6、本发明实施例提供了一种将应用部署到运行环境的方法,部署系统基于应用配置信息和环境配置信息来确定应用结构,再结合应用结构和环境配置信息以自动生成各个待执行任务的任务脚本,通过任务脚本的自动执行以将应用部署到运行环境。可见,开发人员和运维人员不需要撰写脚本,只需要预先为系统提供每个分支对应的环境配置信息,包括运行环境的目标地址、代码编译方式和制品部署方式、热部署路径等,当部署系统接收到基于一个分支的部署请求时,部署系统提取这些环境配置信息,融合到该分支的构建和部署过程,完成部署任务。

需要说明的是,在本文中,诸如第一和第二之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个······”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同因素。

本领域普通技术人员可以理解:实现上述方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成,前述的程序可以存储在计算机可读取的存储介质中,该程序在执行时,执行包括上述方法实施例的步骤;而前述的存储介质包括:rom、ram、磁碟或者光盘等各种可以存储程序代码的介质中。

最后需要说明的是:以上所述仅为本发明的较佳实施例,仅用于说明本发明的技术方案,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内所做的任何修改、等同替换、改进等,均包含在本发明的保护范围内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1