一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

私有化部署的方法和装置与流程

2021-10-23 00:35:00 来源:中国专利 TAG:
1.本发明涉及计算机
技术领域
:,尤其涉及一种私有化部署的方法和装置。
背景技术
::2.私有化部署就是把应用的服务器端、客户端、管理后台等打包成一套解决方案交付给企业使用。私有化部署需要提前准备很多部署产物,比如部署脚本、docker镜像、文档、系统架构图、系统依赖列表、faq等等。3.在实现本发明过程中,发明人发现现有技术中至少存在如下问题:4.现有技术都是人工编写部署产物,效率低,易出错,且不够标准化。技术实现要素:5.有鉴于此,本发明实施例提供一种私有化部署的方法和装置,能够自动生成私有化部署所需的部署产物,避免现有技术中由于采用人工编写部署产物而导致的不足,提高私有化部署效率,提高私有化部署的健壮性,实现部署产物编写风格的标准化。6.为实现上述目的,根据本发明实施例的一个方面,提供了一种私有化部署的方法,包括:7.根据预设的架构声明规范确定待部署应用的配置文件;8.对所述配置文件进行解析,生成目标部署产物;9.根据所述目标部署产物私有化部署所述待部署应用。10.可选地,所述架构声明规范包括:应用信息模板、任务配置信息模板和应用描述信息模板;所述配置文件包括:待部署应用的应用信息、任务配置信息和应用描述信息。11.可选地,所述目标部署产物包括部署脚本,所述任务配置信息包括所述待部署应用中每个组件的所有任务的配置信息;12.对所述配置文件进行解析,生成目标部署产物,包括:13.对于每个组件:根据所述组件的所有任务的配置信息生成与所述组件中的每个任务对应的脚本文件,将所述每个任务对应的脚本文件合并得到所述组件的脚本文件;14.将所有组件的脚本文件合并,得到所述部署脚本。15.可选地,所述脚本文件包括安装脚本;每个任务对应的安装脚本是按照如下步骤生成的:16.根据所述任务的配置信息中的组件环境依赖字段生成安装脚本,根据所述任务的配置信息中的代码包字段生成代码包脚本,将所述安装脚本和所述代码包脚本合并得到所述任务的安装脚本。17.可选地,将所述安装脚本和所述代码包脚本合并之前,还包括:根据所述任务的配置信息中的自定义脚本字段确认所述任务中不存在自定义安装脚本;18.若所述任务中存在自定义安装脚本,则将所述安装脚本、所述代码包脚本和所述自定义安装脚本合并,得到所述任务的安装脚本。19.可选地,所述脚本文件包括启动脚本;每个任务对应的启动脚本是按照如下步骤生成的:20.根据所述任务的配置信息中的任务类型字段确定所述任务的任务类型;所述任务类型包括:静态资源类型,服务类型;21.若所述任务的任务类型为静态资源类型,则判断所述任务的配置信息中的组件环境依赖字段是否为空;若是,则生成启动脚本;否则结束流程;22.若所述任务的任务类型为服务类型,则根据自定义脚本字段获取所述任务的启动前脚本、生成启动脚本片段、获取所述任务的启动后脚本,将所述启动前脚本、所述启动脚本片段和所述启动后脚本合并,得到所述任务的启动脚本。23.可选地,所述目标部署产物包括docker镜像,所述应用描述信息包括所述待部署应用的每个镜像的镜像配置信息,所述镜像配置信息包括所述镜像的任务数组和所述任务数组中所有任务的描述信息;24.对所述配置文件进行解析,生成目标部署产物,包括:25.对于每个镜像:根据所述镜像的任务数组确定所述镜像的任务列表;根据所述任务数组中每个任务的描述信息和配置信息生成所述任务数组中每个任务的镜像文件;将所述任务数组中每个任务的镜像文件合并,得到所述镜像的镜像文件;26.将所有镜像的镜像文件合并,得到所述待部署应用的docker镜像。27.可选地,根据所述镜像的任务数组确定所述镜像的任务列表,包括:28.判断所述镜像的任务数组是否为空;29.若是,则根据所述待部署应用中每个组件的所有任务的配置信息中的组件环境依赖字段排列所述待部署应用中每个组件的所有任务,生成所述镜像的任务数组,以所述任务数组中所有任务形成的列表作为所述任务列表;30.否则,以所述任务数组中所有任务形成的列表作为所述任务列表。31.可选地,所述目标部署产物包括部署文档,所述应用描述信息包括所述待部署应用的安装文档说明信息、注意事项信息、必备软件信息、中间件信息、故障处理信息、常见问题信息;所述任务配置信息包括所述待部署应用中每个组件的所有任务的文档展示信息和任务描述信息;32.对所述配置文件进行解析,生成目标部署产物,包括:33.根据所述待部署应用的应用信息生成所述待部署应用的产品介绍章节;34.根据所述安装文档说明信息生成所述待部署应用的部署流程章节;35.根据所述注意事项信息生成所述待部署应用的注意事项章节;36.根据所述必备软件信息生成所述待部署应用的必备软件章节;37.根据部署引擎中的安装脚手架脚本生成所述待部署应用的安装准备章节;38.根据所述中间件信息生成所述待部署应用初始化的文档描述,根据所述文档展示信息获取所述待部署应用的反向代理规则,获取所述待部署应用中每个组件的所有任务的部署脚本,根据所述待部署应用中每个组件的所有任务的任务描述信息或者每个镜像的任务数组获取每个任务安装时的文档说明,从而生成所述待部署应用的安装章节;39.根据所述故障处理信息生成所述待部署应用的故障处理章节;40.根据所述常见问题信息生成所述待部署应用的常见问题解答章节;41.将所述产品介绍章节、所述部署流程章节、所述注意事项章节、所述必备软件章节、所述安装准备章节、所述安装章节、所述故障处理章节和所述常见问题解答章节合并,得到所述待部署应用的部署文档。42.可选地,所述目标部署产物包括技术架构图;43.对所述配置文件进行解析,生成目标部署产物,包括:根据部署引擎呢藕汁的格式模板和所述应用描述信息生成所述待部署应用的代码片段,对所述代码片段进行渲染后得到所述技术架构图。44.根据本发明实施例的第二方面,提供一种私有化部署的装置,包括:45.配置模块,根据预设的架构声明规范确定待部署应用的配置文件;46.生成模块,对所述配置文件进行解析,生成目标部署产物;47.部署模块,根据所述目标部署产物私有化部署所述待部署应用。48.可选地,所述架构声明规范包括:应用信息模板、任务配置信息模板和应用描述信息模板;所述配置文件包括:待部署应用的应用信息、任务配置信息和应用描述信息。49.可选地,所述目标部署产物包括部署脚本,所述任务配置信息包括所述待部署应用中每个组件的所有任务的配置信息;50.所述生成模块对所述配置文件进行解析,生成目标部署产物,包括:51.对于每个组件:根据所述组件的所有任务的配置信息生成与所述组件中的每个任务对应的脚本文件,将所述每个任务对应的脚本文件合并得到所述组件的脚本文件;52.将所有组件的脚本文件合并,得到所述部署脚本。53.可选地,所述脚本文件包括安装脚本;所述生成模块还用于,按照如下步骤生成每个任务对应的安装脚本:54.根据所述任务的配置信息中的组件环境依赖字段生成安装脚本,根据所述任务的配置信息中的代码包字段生成代码包脚本,将所述安装脚本和所述代码包脚本合并得到所述任务的安装脚本。55.可选地,所述生成模块还用于:将所述安装脚本和所述代码包脚本合并之前,根据所述任务的配置信息中的自定义脚本字段确认所述任务中不存在自定义安装脚本;56.若所述任务中存在自定义安装脚本,则将所述安装脚本、所述代码包脚本和所述自定义安装脚本合并,得到所述任务的安装脚本。57.可选地,所述生成模块还用于,按照如下步骤生成每个任务对应的启动脚本:58.根据所述任务的配置信息中的任务类型字段确定所述任务的任务类型;所述任务类型包括:静态资源类型,服务类型;59.若所述任务的任务类型为静态资源类型,则判断所述任务的配置信息中的组件环境依赖字段是否为空;若是,则生成启动脚本;否则结束流程;60.若所述任务的任务类型为服务类型,则根据自定义脚本字段获取所述任务的启动前脚本、生成启动脚本片段、获取所述任务的启动后脚本,将所述启动前脚本、所述启动脚本片段和所述启动后脚本合并,得到所述任务的启动脚本。61.可选地,所述目标部署产物包括docker镜像,所述应用描述信息包括所述待部署应用的每个镜像的镜像配置信息,所述镜像配置信息包括所述镜像的任务数组和所述任务数组中所有任务的描述信息;62.所述生成模块对所述配置文件进行解析,生成目标部署产物,包括:63.对于每个镜像:根据所述镜像的任务数组确定所述镜像的任务列表;根据所述任务数组中每个任务的描述信息和配置信息生成所述任务数组中每个任务的镜像文件;将所述任务数组中每个任务的镜像文件合并,得到所述镜像的镜像文件;64.将所有镜像的镜像文件合并,得到所述待部署应用的docker镜像。65.可选地,所述生成模块根据所述镜像的任务数组确定所述镜像的任务列表,包括:66.判断所述镜像的任务数组是否为空;67.若是,则根据所述待部署应用中每个组件的所有任务的配置信息中的组件环境依赖字段排列所述待部署应用中每个组件的所有任务,生成所述镜像的任务数组,以所述任务数组中所有任务形成的列表作为所述任务列表;68.否则,以所述任务数组中所有任务形成的列表作为所述任务列表。69.可选地,所述目标部署产物包括部署文档,所述应用描述信息包括所述待部署应用的安装文档说明信息、注意事项信息、必备软件信息、中间件信息、故障处理信息、常见问题信息;所述任务配置信息包括所述待部署应用中每个组件的所有任务的文档展示信息和任务描述信息;70.所述生成模块对所述配置文件进行解析,生成目标部署产物,包括:71.根据所述待部署应用的应用信息生成所述待部署应用的产品介绍章节;72.根据所述安装文档说明信息生成所述待部署应用的部署流程章节;73.根据所述注意事项信息生成所述待部署应用的注意事项章节;74.根据所述必备软件信息生成所述待部署应用的必备软件章节;75.根据部署引擎中的安装脚手架脚本生成所述待部署应用的安装准备章节;76.根据所述中间件信息生成所述待部署应用初始化的文档描述,根据所述文档展示信息获取所述待部署应用的反向代理规则,获取所述待部署应用中每个组件的所有任务的部署脚本,根据所述待部署应用中每个组件的所有任务的任务描述信息或者每个镜像的任务数组获取每个任务安装时的文档说明,从而生成所述待部署应用的安装章节;77.根据所述故障处理信息生成所述待部署应用的故障处理章节;78.根据所述常见问题信息生成所述待部署应用的常见问题解答章节;79.将所述产品介绍章节、所述部署流程章节、所述注意事项章节、所述必备软件章节、所述安装准备章节、所述安装章节、所述故障处理章节和所述常见问题解答章节合并,得到所述待部署应用的部署文档。80.可选地,所述目标部署产物包括技术架构图;81.所述生成模块对所述配置文件进行解析,生成目标部署产物,包括:根据部署引擎呢藕汁的格式模板和所述应用描述信息生成所述待部署应用的代码片段,对所述代码片段进行渲染后得到所述技术架构图。82.根据本发明实施例的第三方面,提供一种私有化部署的电子设备,包括:83.一个或多个处理器;84.存储装置,用于存储一个或多个程序,85.当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现本发明实施例第一方面提供的方法。86.根据本发明实施例的第四方面,提供一种计算机可读介质,其上存储有计算机程序,所述程序被处理器执行时实现本发明实施例第一方面提供的方法。87.上述发明中的一个实施例具有如下优点或有益效果:根据预设的架构声明规范确定待部署应用的配置文件、根据该配置文件生成目标部署产物,能够自动生成私有化部署所需的部署产物,避免现有技术中由于采用人工编写部署产物而导致的不足,提高私有化部署效率,提高私有化部署的健壮性。由于各个待部署应用的配置文件可以根据相同的架构声明规范来确定,因此能够实现部署产物编写风格的标准化。88.上述的非惯用的可选方式所具有的进一步效果将在下文中结合具体实施方式加以说明。附图说明89.附图用于更好地理解本发明,不构成对本发明的不当限定。其中:90.图1是本发明实施例的私有化部署的方法的主要流程的示意图;91.图2是本发明可选实施例中安装脚本生成的流程示意图;92.图3是本发明可选实施例中启动脚本生成的流程示意图;93.图4是本发明可选实施例中镜像的镜像文件生成的流程示意图;94.图5是本发明实施例的私有化部署的装置的主要模块的示意图;95.图6是本发明可选实施例中生成模块的组成示意图;96.图7是本发明实施例可以应用于其中的示例性系统架构图;97.图8是适于用来实现本发明实施例的终端设备或服务器的计算机系统的结构示意图。具体实施方式98.以下结合附图对本发明的示范性实施例做出说明,其中包括本发明实施例的各种细节以助于理解,应当将它们认为仅仅是示范性的。因此,本领域普通技术人员应当认识到,可以对这里描述的实施例做出各种改变和修改,而不会背离本发明的范围和精神。同样,为了清楚和简明,以下的描述中省略了对公知功能和结构的描述。99.根据本发明实施例的一个方面,提供了一种私有化部署的方法。100.图1是本发明实施例的私有化部署的方法的主要流程的示意图,如图1所示,私有化部署的方法,包括:步骤s101、步骤s102和步骤s103。101.步骤s101、根据预设的架构声明规范确定待部署应用的配置文件。102.架构声明规范是根据私有化部署时各应用需要的信息汇总抽象定义出的一套通用的配置规则,用于描述一个微服务或组件做了什么、有什么依赖、怎么配置等。架构声明规范的设计原则为约定大于配置、积极采用业界最佳实践。所谓约定大于配置,是指架构声明规范中约定的内容通常大于单个应用的配置文件的内容。进行私有化部署时,不同应用、编程语言的部署步骤通常都不一样,每个人编写部署文档、脚本等部署产物的质量也参差不齐。本发明实施例根据架构声明规范制定每个应用的配置文件,能够实现部署标准化,并且应用业界最佳实践。103.架构声明规范的具体内容可以根据实际情况进行选择性设定。可选地,架构声明规范包括:应用信息模板、任务配置信息模板和应用描述信息模板。根据预设的架构声明规范确定出的待部署应用的配置文件包括:待部署应用的应用信息、任务配置信息和应用描述信息。104.一个应用产品可以由多个组件组成。组件是实际组成应用的最小单元,用于划分任务,一般一个组件的部署只由一个任务实现,一个组件的部署也可能由多个任务实现,一个组件可以是一个微服务、一个静态资源文件目录、一个命令行程序等等。任务可以用来部署组件。105.应用信息模板用于描述应用信息,包括应用名称、负责人、作出贡献的人员、应用描述等。示例性地,架构声明规范包括如下内容:name:erp;title:帐号系统;owner:小明;contributor:小刚、小亮;description:此系统完成了xxxx功能,具有yyy特色。本示例中,name代表系统标识,通常由小写字母和数字组成;title代表系统名称,例如系统的中文名;owner代表系统由谁负责;contributor代表系统开发人员名单,通常该参数为所述应用描述信息包括所述待部署应用的每个镜像的镜像配置信息;description代表系统详细描述,该字段可用于文档展示。106.任务配置信息模板用于描述各个任务(job)的配置说明。配置说明中包括的字段可以根据实际情况进行选择性设定,示例性地,配置说明中可以包括以下字段:107.title:任务名称,例如中文名。通常每个任务都有一个唯一的名字,由小写字母 数字组成,但是有一些保留关键字不可用于任务的名字,如config(配置,一般是修改系统配置或设置的)等。108.type:任务类型,参数值如下:-service:服务,如api(调用接口)、web(网页)、后台任务等;-staticasset:静态资源,如前端静态资源、程序数据目录、命令行工具,这种类型一般不需要启动什么脚本。109.language:语言类型,用于表明采用什么编程语言开发部署产物。例如php(hypertextpreprocessor,英文超级文本预处理语言)、go(一种编译型语言)、c语言、c 、java(一门面向对象编程语言)、node.js(一个基于chromev8引擎的javascript运行环境)、ruby(一种开源的面向对象程序设计的服务器端脚本语言)、python(一种面向对象的动态类型语言)等。110.custom_script:用于描述用户自定义脚本。例如:custom_script:install_post字段表明默认安装脚本执行完成后允许执行自定义的一段脚本。custom_script:start_pre字段表明允许在启动程序之前执行自定义的一段脚本。custom_script:start字段表明自定义启动命令,一般来说不需要自定义启动命令,但是有些程序需要这样做。其中,custom_script:start:working_dir字段表明工作目录,执行自定义脚本前,需要先进入到这个目录,如果自定义的启动脚本可以直接以绝对路径执行,则此参数可选;custom_script:start:command字段表明自定义的启动脚本路径;custom_script:start_post字段表明允许在启动程序之后执行自定义的一段脚本。111.artifact:代码包字段,用于描述代码包相关的信息。例如:artifact:source字段表明包下载地址。artifact:destination字段表明包存放目录,默认为/export/packages/系统名称/系统名称_job名称/latest,该字段可选。如果是压缩包,包会被解压至该目录。artifact:canrecreatedestination字段表明是否能够重建包存放目录,参数可以为bool(布尔型变量)类型。默认值为true,此时目录destination会被删除然后重建,以确保目录是空的。取值为false时,适用于存放文件的情况,不会去重建包存放目录,而是将下载好的文件移入该目录。112.network:网络策略。例如:network:ingress:public字段表明流量从公网进入的策略。network:ingress:public:ports字段表明对公网暴露哪些端口,如tcp(transmissioncontrolprotocol,传输控制协议)、udp(userdatagramprotocol,用户数据报协议)等。凡是需要暴露端口的,都需要分配一个公网域名指向该服务。该参数为所述应用描述信息包括所述待部署应用的每个镜像的镜像配置信息。network:ingress:internal字段表明流量从内网进入的策略。其中,network:ingress:internal:ports字段表明内网暴露哪些端口,如tcp、udp等。凡是需要暴露端口的,都需要分配一个内网域名指向该服务。有些服务只在内网使用,不用暴露在公网。network:egress字段表明出去的网络策略。其中,network:egress:need_to_access_public字段表明是否需要访问公网,例如从公网下载资源、依赖包、请求公网某个接口,参数为bool类型。113.docs:文档展示用的参数。例如:docs:external_access字段表明是否需要通过浏览器/手机去访问,参数为bool类型。docs:description字段表明任务详细描述,在使用部署脚本方式部署的文档里会展示,例如此服务做xxxx用途。docs:framework字段表明任务是什么框架开发的,用于文档展示,例如springboot(一种应用框架)、yii3(一种php框架)、gin(一个利用go语言写的web框架)、koa(一种web框架)等。docs:log字段表明日志路径相关。其中:docs:log:start字段表明启动日志路径,docs:log:running字段表明应用日志路径列表,此参数为数组类型,可以写多个服务器上文件的绝对路径,docs:log:running:path字段表明应用日志路径,docs:log:running:description字段表明应用日志描述,如应用是什么用途。114.run:运行程序相关的配置。例如:run:schedule字段表明定时任务,cron(一种字符串表达式)格式,推荐任务自身实现幂等性和并发控制,否则定时任务就不能在多个相同容器里面运行,只能在一个容器里面运行。run:config_root_dir字段表明配置文件根路径,该字段可选,默认值与包类型有关。如果是压缩包,配置文件在压缩包里面,根路径为压缩包的解压目录,即artifact:destination。如果是war包(一种web应用程序格式),配置文件在war包里面,会根据相对路径去替换war包里面的文件内。有些程序将配置文件放在/etc目录下,如coredns(一种dns架构)的/etc/coredns/corefile。此参数可用来自定义根路径。run:user字段表明使用哪个用户运行程序,默认值为admin。run:java字段表明java程序相关配置。例如run:java:jar_path字段表明jar包(一种与平台无关的文件格式)路径,可以是相对路径也可以是绝对路径。如果是相对路径,就是相对于artifact:destination的路径。再例如run:java:jvm_options字段表明jvm(javavirtualmachine,java虚拟机)配置,此参数为所述应用描述信息包括所述待部署应用的每个镜像的镜像配置信息。再例如run:java:jar_args字段表明jar参数,此参数为所述应用描述信息包括所述待部署应用的每个镜像的镜像配置信息。run:python字段表明python程序相关配置。例如run:python:requirements_path字段表明requirements.txt的路径,该路径为相对路径。再例如run:python:use_uwsgi字段表明是否使用uwsgi启动程序。再例如run:python:uwsgi_options字段表明uwsgi选项,此参数为所述应用描述信息包括所述待部署应用的每个镜像的镜像配置信息。run:go字段表明程序相关字段。例如run:go:binary_path字段表明二进制程序路径,该路径为相对路径。再例如run:go:program_arguments字段表明程序参数,此参数为所述应用描述信息包括所述待部署应用的每个镜像的镜像配置信息。115.dependencies:组件的环境依赖。例如:dependencies:nginx字段表明可自动生成nginxvhost配置文件。其中,dependencies:nginx:version字段表明nginx版本号;dependencies:nginx:proxy_to_port字段表明反向代理至哪个端口;dependencies:nginx:enable_php_fpm字段表明是否通过fcgi(一种数据收发协议)协议反向代理至phpfpm(一个phpfastcgi管理器)和生成php应用的相关配置;dependencies:nginx:always_serve_index_html字段表明为某个查询提供serve_index_html服务,适用于前端历史模式(historymode);dependencies:nginx:root字段表明nginx监听的root(一种nginx文件路径)配置;dependencies:nginx:location字段表明nginx监听的地址,此值为map(一种容器)结构。dependencies:router字段表明要使用外部负载均衡器配置反向代理,此参数为所述应用描述信息包括所述待部署应用的每个镜像的镜像配置信息,用于文档展示。其中,dependencies:router:path字段表明请求路径;dependencies:router:url字段表明转发到哪个地址。dependencies:rpm字段表明依赖的rpm包有哪些,参数为数组类型。如果值带有groupinstall:前缀,就代表使用yumgroupinstall命令安装包,默认使用yuminstall安装。dependencies:cent_os字段表明依赖的centos(communityenterpriseoperatingsystem,社区企业操作系统)版本。dependencies:java字段表明依赖的jdk(javadevelopmentkit,一款针对java编程的软件工具)版本。dependencies:python字段表明依赖的python版本。dependencies:php字段表明依赖的php版本。dependencies:go字段表明依赖的go版本。dependencies:nodejs字段表明依赖的node.js版本。dependencies:ruby字段表明依赖的ruby版本。dependencies:webapp_runner字段表明依赖的webapp_runner。dependencies:git字段表明依赖的git(一个开源的分布式版本控制系统)版本。116.以上各个字段是对任务的配置说明的示例性说明,不代表所有任务都必须有上述字段。实际应用过程中,可以根据实际需求对上述各个字段进行增删改。117.应用描述信息模板用于描述应用的其他描述信息,例如技术架构图、中间件、docker(一个开源的应用容器引擎)配置(镜像配置信息)等。118.示例性地,应用描述信息模板包括以下字段:119.miscellaneous:system_landscape:系统架构字段。例如:miscellaneous:system_landscape:diagram字段表明技术架构全景图图片地址,用于文档展示,该字段可选。miscellaneous:system_landscape:person字段表明角色,如应用开发者等,渲染架构图的时候可以展示不同角色的操作入口。miscellaneous:system_landscape:person_ext字段表明外部角色,如运营人员、测试人员等。miscellaneous:system_landscape:system_ext字段表明外部系统,例如账户系统、统一控制台、gitlab(一个用于仓库管理系统的开源项目)、jenkins(一种基于java开发的一种持续集成工具)等。miscellaneous:system_landscape:boundary字段表明界限,可以将某几个组件(服务、命令行等)划为一个范围,可以定义多个范围,参数为所述应用描述信息包括所述待部署应用的每个镜像的镜像配置信息。其中,miscellaneous:system_landscape:boundary:label字段表明界限名称,架构图根据功能可分为好几个逻辑部分,label就是用来给这个逻辑部分进行命名;miscellaneous:system_landscape:boundary:container字段表明容器,一个容器可认为是一个微服务/组件,参数为map类型。其中键key为容器标识id,值value的格式为“container名称:技术参数:一句话介绍”。miscellaneous:system_landscape:relationship字段表明关系说明。用分号分隔,完整格式为id1:id2:关系说明:通讯协议:箭头方向,箭头方向默认向下,也可以设置为向上、向左、向右等。通讯协议、箭头方向可选。120.miscellaneous:depends_on:应用级别的依赖,如外部系统、中间件等。例如,miscellaneous:depends_on:description字段表明描述,用于文档展示,支持markdown。miscellaneous:depends_on:initialize字段表明描述如何初始化应用的中间件数据,如mysql(一个关系型数据库管理系统)建表、插入数据、kafka(一个开源流处理平台)建立主题(topic)等,用于文档展示。miscellaneous:depends_on:mysql字段表明mysql相关信息。其中,miscellaneous:depends_on:mysql:version字段表明使用的mysql版本;miscellaneous:depends_on:mysql:db_name字段表明要创建几个mysql数据库,参数为数组类型。miscellaneous:depends_on:elasticsearch字段表明elasticsearch相关信息。例如,miscellaneous:depends_on:elasticsearch:version字段表明使用的elasticsearch版本,用于文档展示。miscellaneous:depends_on:hbase字段表明hbase(一个分布式的、面向列的开源数据库)相关信息。miscellaneous:depends_on:hbase:version字段表明使用的hbase版本,用于文档展示。miscellaneous:depends_on:kafka字段表明kafka相关信息。其中,miscellaneous:depends_on:kafka:version字段表明使用的kafka版本,用于文档展示;miscellaneous:depends_on:kafka:create_topics字段表明要创建的topic列表,topic之间用逗号分隔,例如topic1:1:3,topic2:2:1:compact,该配置代表创建两个topic,其中topic1使用1个分区(partition)、2个副本(replicas),topic2使用2个分区、1个副本,cleanup.policy设为compact。miscellaneous:depends_on:amazon_s3字段表明对象存储相关信息。其中,miscellaneous:depends_on:amazon_s3:buckets字段表明需要多少个桶,miscellaneous:depends_on:amazon_s3:buckets:name字段表明桶的名称,miscellaneous:depends_on:amazon_s3:buckets:canned_acl字段表明设置桶匿名用户访问权限,其中private为私有读写、public-read为公有读私有写、public-read-write为公有读写。miscellaneous:depends_on:storm字段表明storm(一种分布式实时大数据处理框架)相关信息。例如miscellaneous:depends_on:storm:version字段表明storm版本。miscellaneous:depends_on:flink字段表明flink(一个开源的针对批量数据和流数据的处理引擎)相关信息。例如miscellaneous:depends_on:flink:version字段表明flink版本。miscellaneous:depends_on:redis字段表明redis(一个key-value存储系统)相关信息,如miscellaneous:depends_on:redis:version字段表明redis版本。miscellaneous:depends_on:gitlab字段表明gitlab相关信息。如miscellaneous:depends_on:gitlab:version字段表明gitlab版本、miscellaneous:depends_on:gitlab:account字段表明需要注册gitlab帐号、miscellaneous:depends_on:gitlab:account:username字段表明用户名、miscellaneous:depends_on:gitlab:account:password字段表明密码、miscellaneous:depends_on:gitlab:account:description字段表明描述、miscellaneous:depends_on:gitlab:account:access_level字段表明访问级别,通常有regular和admin两个选项。miscellaneous:depends_on:nexus_repository_oss字段表明nexusrepositoryoss(一种将java库发布到中央库的开源项目)相关信息,例如miscellaneous:depends_on:nexus_repository_oss:version字段表明nexusrepositoryoss版本。miscellaneous:depends_on:zoo_keeper字段表明zookeeper(一个分布式的,开放源码的分布式应用程序协调服务)相关信息,如miscellaneous:depends_on:zoo_keeper:version字段表明zookeeper版本号、miscellaneous:depends_on:zoo_keeper:create_znodes字段表明创建节点、miscellaneous:depends_on:zoo_keeper:create_znodes:path字段表明节点路径、miscellaneous:depends_on:zoo_keeper:create_znodes:value字段表明节点的值。miscellaneous:depends_on:api_gateway字段表明api网关相关信息,例如miscellaneous:depends_on:api_gateway:version字段表明版本号。miscellaneous:depends_on:rpc_framework字段表明rpc(remoteprocedurecallprotocol,远程过程调用协议)远程调用框架相关信息,如miscellaneous:depends_on:rpc_framework:version字段为rpc远程调用框架的版本号、miscellaneous:depends_on:rpc_framework:services字段为要注册的rpc接口、miscellaneous:depends_on:rpc_framework:services:name字段为接口名称、miscellaneous:depends_on:rpc_framework:services:description字段表明接口描述。121.miscellaneous:unified_config_reference:应用统一配置参考文档字段,用于文档展示,参数为数组类型。该参数表明如何在应用统一配置文件里面配置应用必须的配置项。例如,miscellaneous:unified_config_reference:name字段表明配置项名称。miscellaneous:unified_config_reference:type字段表明配置值类型,如string、bool、number等。miscellaneous:unified_config_reference:default字段表明配置的默认值。miscellaneous:unified_config_reference:example字段表明配置示例。miscellaneous:unified_config_reference:description字段表明配置项的介绍。122.miscellaneous:docker:镜像配置信息字段,表明docker相关配置信息。例如,miscellaneous:docker:group字段表明系统各组件如何编排到镜像里、会有哪几个镜像、镜像里都包含哪些组件等,该参数为数组类型。其中,miscellaneous:docker:group:name字段表明镜像名称;miscellaneous:docker:group:from字段表明镜像从哪个镜像继承,设置dockerfile的from关键字;miscellaneous:docker:group:docs_k8s字段表明在kubernetes(是一个开源的,用于管理云平台中多个主机上的容器化的应用)环境下安装镜像的文档;miscellaneous:docker:group:docs_compose字段表明在docker-compose(一个用来定义和运行复杂应用的docker工具)环境下安装镜像的文档;miscellaneous:docker:group:component字段表明镜像由哪些job组成,这些job会编译进同一个镜像里。123.miscellaneous:docs:文档相关字段,表明文档相关信息。例如,miscellaneous:docs:install_process字段表明安装流程文档说明,参数为array类型。其中miscellaneous:docs:install_process:name字段表明任务名称;miscellaneous:docs:install_process:description字段表明任务描述;miscellaneous:docs:install_process:tag字段表明可以根据tag区分这个流程在哪些部署方式里需要做,参数为枚举类型,值有以下类型:kubernets部署方式、docker-compose部署方式、部署脚本方式。miscellaneous:docs:attention字段表明注意事项,参数为数组类型。miscellaneous:docs:essential_software字段表明必备软件,参数为数组类型。其中miscellaneous:docs:essential_software:name字段表明软件名称,miscellaneous:docs:essential_software:description字段表明软件说明,miscellaneous:docs:essential_software:how_to_get字段表明软件获取方式,miscellaneous:docs:essential_software:tag字段表明可以根据tag区分这个软件在哪些部署方式里需要准备,参数为枚举类型,值有以下类型:kubernets部署方式、docker-compose部署方式、部署脚本方式。miscellaneous:docs:troubleshoot字段表明故障处理,常见安装问题如何处理,参数为数组类型。其中,miscellaneous:docs:troubleshoot:title字段表明问题标题;miscellaneous:docs:troubleshoot:answer字段表明回答,可以包含现象描述、解决问题的操作步骤;miscellaneous:docs:troubleshoot:possible_causes字段表明问题出现的可能原因。miscellaneous:docs:faq字段表明常见问题,可以回答应用的常见的非故障问题,参数为数组类型。其中,miscellaneous:docs:faq:question_title字段表明问题标题;miscellaneous:docs:faq:question_body字段表明问题描述;miscellaneous:docs:faq:answer字段表明问题解答。124.以上各个字段是对应用描述信息的示例性说明,不代表所有应用的应用描述信息都必须有上述字段。实际应用过程中,可以根据实际需求对上述各个字段进行增删改。125.步骤s102、对所述配置文件进行解析,生成目标部署产物。126.根据配置文件和目标部署产物的输出类型,可以应用不同的数据处理逻辑对配置文件进行解析,自动生成对应输出类型的目标部署产物,避免现有技术中由于采用人工编写部署产物而导致的不足,提高私有化部署效率,避免由于人工编写易出错而导致的私有化部署的健壮性较低的问题。127.可选地,所述目标部署产物包括部署脚本,所述任务配置信息包括所述待部署应用中每个组件的所有任务的配置信息。配置信息用于生成任务的脚本文件。通常情况下,配置信息描述任务中包含的所有任务、各个任务之间的依赖关系以及相关信息等。对所述配置文件进行解析,生成目标部署产物,包括:对于每个组件:根据所述组件的所有任务的配置信息生成与所述组件中的每个任务对应的脚本文件,将所述每个任务对应的脚本文件合并得到所述组件的脚本文件;将所有组件的脚本文件合并,得到所述部署脚本。通过自动生成部署脚本,能够避免现有技术中由于采用人工编写部署产物而导致的不足,提高私有化部署效率,避免由于人工编写易出错而导致的私有化部署的健壮性较低的问题。128.在图2示出的可选实施例中,脚本文件包括安装脚本。每个任务对应的安装脚本是按照如下步骤生成的:步骤s201、根据所述任务的配置信息中的组件环境依赖字段生成安装脚本;步骤s202、根据所述任务的配置信息中的代码包字段生成代码包脚本;步骤s203、将所述安装脚本和所述代码包脚本合并得到所述任务的安装脚本。本实施例能够自动生成按照脚本。进一步地,将所述安装脚本和所述代码包脚本合并之前,还可以包括:根据所述任务的配置信息中的自定义脚本字段确认所述任务中不存在自定义安装脚本。若所述任务中存在自定义安装脚本,则将所述安装脚本、所述代码包脚本和所述自定义安装脚本合并,得到所述任务的安装脚本。本实施例能够根据用户自定义的安装脚本生成任务的安装脚本,满足特殊应用的安装需求,实现个性化设置。129.示例性地,每个任务的安装脚本自动生成的过程如下:130.(1)引擎读取任务的dependencies:nginx字段,nginx字段分为两类信息,一类用于引擎生成nginxvhost配置文件,一类用于判断安装什么版本的nginx。读取dependencies:nginx:version获取到应用依赖的nginx版本,将安装指定nginx的脚本输出到内存里,记为脚本片段1;读取dependencies:nginx:proxy_to_port字段,可以知道需要生成nginx反向代理脚本、组件监听了哪个端口,读取dependencies:nginx:enable_php_fpm,可以知道nginx需要与php_fpm通讯,读取dependencies:nginx:always_serve_index_html可以知道需要将所有不存在的url请求重定向到index.html,读取dependencies:nginx:root可以知道nginxroot指令怎么配置,读取dependencies:nginx:location可以知道nginxlocation指令怎么配置,如果nginxlocation没有配置,引擎会生成一个默认的配置,基于引擎内置的nginx配置文件模版加上各种条件判断,将nginx配置文件生成脚本输出到内存,记为脚本片段2;131.(2)引擎读取dependencies:rpm字段,该字段的值为数组类型,代表组件依赖的rpm包列表,遍历数组,如果数组元素的值带有groupinstall:前缀,就调用yumgroupinstall安装yum包,否则使用yuminstall安装,引擎将生成的rpm包安装脚本输出到内存里,记为脚本片段3;132.(3)引擎依次读取dependencies字段下面的其他字段,处理逻辑类似上述逻辑,利用内置的脚本模版或者命令生成安装指定依赖版本的脚本输出到内存里,记为脚本片段4;133.(4)引擎读取artifact字段,可以知道代码包下载地址、安装到什么位置,根据引擎内置的bash脚本模版生成脚本输出到内存里,记为脚本片段5。模版利用wget下载包,利用arc工具解压压缩包,利用自己编写的bash语句验证包下载是否完整(md5验证,md5信息会通过http请求的head(一种http请求方法)方法从包下载地址里获取)、将包下载后移入默认或指定的安装目录;134.(5)引擎读取customscript:installpost字段,获取到应用开发人员自定义的安装脚本,这个安装脚本会在上述引擎生成的脚本之后执行,以满足特殊应用的安装需求,这个自定义的安装脚本记为脚本片段6;135.(6)引擎将上述脚本1-6合并输出到文件里,可得安装脚本。136.在图3示出的可选实施例中,脚本文件包括启动脚本。每个任务对应的启动脚本是按照如下步骤生成的:137.步骤s301、根据所述任务的配置信息中的任务类型字段确定所述任务的任务类型;所述任务类型包括:静态资源类型,服务类型;138.步骤s302、判断任务类型是否为静态资源类型;若是,则跳转至步骤s303;否则跳转至步骤s305;139.步骤s303、判断所述任务的配置信息中的组件环境依赖字段是否为空;若是,则跳转至步骤s304生成启动脚本;否则结束流程;140.步骤s305、根据自定义脚本字段获取所述任务的启动前脚本、生成启动脚本片段、获取所述任务的启动后脚本,将所述启动前脚本、所述启动脚本片段和所述启动后脚本合并,得到所述任务的启动脚本。本实施例可以自动生成启动脚本。141.示例性地,每个任务对应的启动脚本自动生成的方法如下:142.(1)读取job描述里的type字段,该字段有两种取值,分别为:staticasset(静态资源文件)和service(api、网站、后台任务);143.(2)如果任务类型是staticasset类型,引擎再读取dependencies:nginx:version字段,判断是否需要启动nginx,如果有版本号则启动nginx,否则,由于静态资源文件类型一般用于下载文件或者展示静态网站,因此此时可以什么都不做。144.(3)如果任务类型是service类型,引擎读取customscript:startpre字段,获取应用开发人员自定义的启动前脚本输出到内存里,记为脚本片段1;145.(4)如果任务类型是service类型,读取run:user字段,可知道该用什么用户去运行程序,默认使用admin(遵守安全实践,不使用root运行程序);146.(5)如果任务类型是service类型,读取custom_script:start字段,获取到应用开发人员自定义的启动脚本(有些组件只能使用自己的启动脚本,无法自动生成),引擎将脚本输出到内存里,记为脚本片段2-a;147.(6)如果任务类型是service类型,且custom_script:start字段为空,则读取language字段,获取组件的编程语言类型。如果是java语言,再读取run:java:jvm_options、run:java:jar_args,可以获取到jvm的设置参数和java的启动参数。通常java程序只有.war和.jar两种包格式,读取artifact:source字段,从下载链接中分析出文件扩展名类型,如果是.war,则生成用webapprunner启动war包的脚本,免去通过安装tomcat启动程序的繁琐步骤,脚本会输出到内存里,记为脚本片段2-b;其他情况则是.jar包,如果代码包是压缩包,读取run:java:jar_path,从代码包解压后的存放目录里根据jar_path可以获取到jar包的文件路径,再生成通过java启动jar包的脚本,引擎将脚本输出到内存里,记为脚本片段2-b;读取dependencies:nginx:version字段,判断是否需要启动nginx,如果有版本号则启动nginx,将启动nginx的脚本输出到内存里,记为脚本片段2-c。如果是python、go、node.js、ruby也是采用类似逻辑,引擎只读取最基本和必要的字段,通过大量的模版、命令行工具、最佳实践提供开箱即用的启动脚本生成体验;148.(7)如果任务类型是service类型,则读取customscript:startpost字段,获取到应用开发人员自定义的启动后脚本,输出到内存里,记为脚本片段3;149.(8)引擎将上述脚本1-3合并输出到文件里,可得启动脚本。150.按照docker镜像最佳实践:docker镜像里面不要同时运行太多程序,所以一个应用可能会有多个镜像。默认情况下各组件都在一个镜像里。可选地,目标部署产物包括docker镜像,应用描述信息包括所述待部署应用的每个镜像的镜像配置信息,所述镜像配置信息包括所述镜像的任务数组和所述任务数组中所有任务的描述信息。对所述配置文件进行解析,生成目标部署产物,包括:采用图4示出的方法生成每个镜像的镜像文件,然后将所有镜像的镜像文件合并,得到所述待部署应用的docker镜像。如图4所示,对于每个镜像,生成对应的镜像文件的步骤如下:步骤s401、根据所述镜像的任务数组确定所述镜像的任务列表;步骤s402、根据所述任务数组中每个任务的描述信息和配置信息生成所述任务数组中每个任务的镜像文件;步骤s403、将所述任务数组中每个任务的镜像文件合并,得到所述镜像的镜像文件。本实施例能够自动生成待部署应用的docker镜像。151.可选地,根据所述镜像的任务数组确定所述镜像的任务列表,包括:判断所述镜像的任务数组是否为空;若是,则根据所述待部署应用中每个组件的所有任务的配置信息中的组件环境依赖字段排列所述待部署应用中每个组件的所有任务,生成所述镜像的任务数组,以所述任务数组中所有任务形成的列表作为所述任务列表;否则,以所述任务数组中所有任务形成的列表作为所述任务列表。如此,能够避免由于配置文件中任务数组为空而导致的无法生成待部署应用的docker镜像的问题。152.示例性地,采用前述方法得到安装脚本和启动脚本后,再按如下逻辑处理,生成待部署应用的docker镜像:153.(1)引擎读取config:docker:group字段,该字段的值为数组类型,如果group不为空数组,则遍历数组。该数组元素包含多个字段,其中name字段代表镜像名称。from字段会赋值到镜像文件dockerfile的from指令,如果from字段未指定当前镜像从哪个镜像集成,则引擎自动生成一个。逻辑为:读取dependencies字段,分析出job依赖的软件版本,将这些依赖的名字按字母表顺序排列,加上对应的版本,生成from字段中的镜像,该镜像可以采用base:java-8-nodejs-12.1这种结构形式的名称。component字段是数组类型,用于描述镜像由哪些job组成,生成镜像时会应用这些job的安装脚本和启动脚本;154.(2)如果group为空数组,代表允许各组件在一个docker镜像里,则引擎会生成一个group的数组元素,name命名为omnibus,component字段包含所有的job名称;155.(3)引擎遍历要生成的镜像名列表,针对每个镜像通过镜像生成模块生成镜像,以下的job列表指的是对应于某一个镜像的job列表。镜像生成逻辑为:引擎使用内置的dockerfile模版生成dockerfile,模版里包含设置时区、优化核心参数的脚本,通过上述步骤(2),引擎遍历job列表,使用dockerfile参考文档里面的copy和run指令生成job安装脚本的执行命令,将内容输出到内存里,记为代码片段1;引擎遍历job列表,判断job定义里面的dependencies字段里有没有php、nginx字段,如果有,就往内存里输出相应的启动脚本,记为代码片段2-a;引擎遍历job列表,使用配置文件替换的命令行工具,从/export/servers/env/docker目录下获取配置文件替换包存放目录对应路径的bash脚本,替换结果输出到内存里,记为代码片段2-b;引擎遍历job列表,读取docs:log字段,获取所有的日志路径,引擎从路径里获取到目录名称,因为应用组件有可能不会自动创建日志目录,因此引擎生成创建这些目录的脚本,输出到内存里,记为代码片段2-c;引擎遍历job列表,把job的启动脚本输出到内存里,记为代码片段2-d;引擎将代码片2-a~2-d合并输出到文件里,获得docker-entrypoint.sh,引擎使用dockerfile参考文档里面的copy和cmd指令生成docker-entrypoint.sh的执行命令,记为代码片段3。引擎将代码片段1和代码片段3合并输出到文件里,获得该镜像的dockerfile;156.(4)编译镜像需要确保dockerfile里from关键字对应的镜像存在,如果该镜像时应用开发者自定义的,需要应用开发者先把镜像传至指定的镜像仓库,引擎编译镜像时会去拉取该镜像。如果应用开发者未指定config:docker:group数组元素里的from字段,引擎会分析上述步骤(1)自动生成的from名称,基于基础镜像base:zero,调用相应的安装脚本编译出from对应的镜像文件;157.(5)引擎遍历要生成的镜像名列表,依次处理各个镜像,调用dockerbuild命令,传递镜像的dockerfile路径和镜像名称,可获得待部署应用的docker镜像。158.可选地,目标部署产物包括部署文档,所述应用描述信息包括所述待部署应用的安装文档说明信息、注意事项信息、必备软件信息、中间件信息、故障处理信息、常见问题信息;所述任务配置信息包括所述待部署应用中每个组件的所有任务的文档展示信息和任务描述信息。对所述配置文件进行解析,生成目标部署产物,包括:159.根据所述待部署应用的应用信息生成所述待部署应用的产品介绍章节;160.根据所述安装文档说明信息生成所述待部署应用的部署流程章节;161.根据所述注意事项信息生成所述待部署应用的注意事项章节;162.根据所述必备软件信息生成所述待部署应用的必备软件章节;163.根据部署引擎中的安装脚手架脚本生成所述待部署应用的安装准备章节;164.根据所述中间件信息生成所述待部署应用初始化的文档描述,根据所述文档展示信息获取所述待部署应用的反向代理规则,获取所述待部署应用中每个组件的所有任务的部署脚本,根据所述待部署应用中每个组件的所有任务的任务描述信息或者每个镜像的任务数组获取每个任务安装时的文档说明,从而生成所述待部署应用的安装章节;165.根据所述故障处理信息生成所述待部署应用的故障处理章节;166.根据所述常见问题信息生成所述待部署应用的常见问题解答章节;167.将所述产品介绍章节、所述部署流程章节、所述注意事项章节、所述必备软件章节、所述安装准备章节、所述安装章节、所述故障处理章节和所述常见问题解答章节合并,得到所述待部署应用的部署文档。168.示例性地,生成部署文档的步骤如下:169.(1)引擎读取配置文件中应用信息部分的description字段,该字段用于展示应用描述信息。引擎将读取的信息输出到内存里,记为文档片段1,这部分作为产品介绍章节使用;170.(2)引擎读取miscellaneous:docs:install_process字段,生成部署流程章节。该字段为数组类型,数组元素由多个字段组成。数组元素中的tag字段包含script的会被引擎视为当前部署方式需要的流程。引擎遍历数组,按照markdowntable语法生成表格形式的流程说明,再按照flowchart.js语法生成图表形式的流程说明,将生成的内容输出到内存里,记为文档片段2,这部分作为安装流程章节使用;171.(3)引擎读取miscellaneous:docs:attention字段,遍历数组,依次输出内容到内存里,记为文档片段3,这部分作为注意事项章节使用;172.(4)引擎读取miscellaneous:docs:essential_software字段,该字段为数组类型,数组元素中的tag字段如果包含script会被引擎是为当前部署方式需要的必备软件。引擎遍历数组,按照markdowntable语法生成表格形式的必备软件清单,输出内容到内存里,记为文档片段4,这部分作为准备必备软件章节使用;173.(5)引擎将内置的安装脚手架的脚本输出到内存里,用于获取安装所必须的一些基础脚本,记为文档片段5,这部分作为安装准备章节使用;174.(6)引擎读取miscellaneous:depends_on:initialize字段,获取应用数据初始化的文档描述,该字段会以markdown格式输出到内存里,记为文档片段6;读取dependencies:router字段,遍历该字段获取反向代理配置的规则,按照文档模版格式输出到内存里,记为文档片段7;引擎遍历待部署应用包含的所有job,调用部署脚本生成模块生成相应的部署脚本,将脚本内容按照文档模版格式依次输出到内存里,读取job描述的docs:description字段,获取job安装时的文档说明,这些文档内容记为文档片段8;这部分作为安装章节使用;175.(7)引擎读取miscellaneous:docs:troubleshoot字段,该字段为数组类型。引擎遍历该字段,获取数组元素里面的title字段作为故障标题,获取answer字段作为故障处理方案,获取possible_causes字段作为故障可能原因,按照文档模版格式输出到内存里,记为文档片段9,这部分作为故障处理章节使用;176.(8)引擎读取miscellaneous:docs:faq字段,该字段为数组类型。引擎遍历该字段,获取数组元素里面的question_title字段作为问题标题,获取question_body字段作为问题描述,获取answer字段作为问题回答,按照文档模版格式输出到内存里,记为文档片段10,这部分作为faq章节使用;177.(9)引擎将上述的文档片段1-10合并输出到文件里,得到markdown格式的部署文档。178.上述过程采用部署脚本生成部署文档。使用docker-compose部署方式和kubernets部署方式生成部署文档的逻辑类似上述过程,不同之处在于:docker-compose部署方式和kubernets部署方式都是使用docker镜像启动容器对外部提供服务,因此引擎会分别读取miscellaneous:docker:group:docs_k8s和miscellaneous:docker:group:docs_compose字段获取镜像安装时的文档说明,这部分作为安装章节使用。179.可选地,目标部署产物包括技术架构图。对所述配置文件进行解析,生成目标部署产物,包括:根据部署引擎呢藕汁的格式模板和所述应用描述信息生成所述待部署应用的代码片段,对所述代码片段进行渲染后得到所述技术架构图。180.示例性地,生成技术架构图的过程如下:181.(1)引擎读取配置文件中应用描述信息包含的miscellaneous:system_landscape:person字段和miscellaneous:system_landscape:person_ext字段,这两个字段都为key/value格式,key为角色名称,value为角色介绍。引擎遍历这两个字段,按照引擎内置的c4-plantuml(一种画图工具)格式模版生成plantuml(一种绘图工具)代码,记为代码片段1,用于人员角色定义;182.(2)引擎读取miscellaneous:system_landscape:system_ext字段,这个字段为key/value格式,key为外部系统名称,value为外部系统介绍。引擎遍历该字段,按照引擎内置的c4-plantuml格式模版生成plantuml代码,记为代码片段2,用于外部系统定义;183.(3)引擎读取miscellaneous:system_landscape:boundary字段,这个字段为数组类型。引擎遍历该字段,按照内置的c4-plantuml格式模版生成.plantuml代码,记为代码片段3,用于范围定义。boundary数组元素的label字段代表范围名称,container字段为组件列表。container是key/value格式,key为组件英文名称,value为组件信息,以英文冒号分隔,分别为组件中文名、采用的技术、组件用途,解析引擎会按冒号分割value获得相应的信息;184.(4)引擎读取miscellaneous:system_landscape:relationship字段,这个字段为数组类型。引擎遍历该字段,按照内置的c4-plantuml格式模版生成.plantuml代码,记为代码片段4。relationship数组元素由多个信息组成,以英文冒号分割,分别描述了组件之间的关系、采用什么协议进行通讯,引擎处理时会以冒号分割获得想要的信息;185.(5)引擎将上述代码片段1-4合并为1个字符串,作为参数传给plantuml渲染软件进行渲染,渲染软件会返回png(一种图像文件存储格式)格式的架构图。186.步骤s103、根据所述目标部署产物私有化部署所述待部署应用。根据配置文件进行私有化部署,能够使得私有化部署方法可以适用于多种应用,具有通用性。187.本发明实施例预设一套适用于多种应用的通用的架构声明规范,将非标准、不统一的信息标准化成了一个个字段数据,实现了相应的解析引擎和功能可扩展,引擎针对不同输出类型从配置文件里获取不同的字段从而生成不同产物,能够解决现有技术中由于采用人工编写而导致的质量不一、风格不一、效率低下等方面的问题,避免人工花大量时间编写,帮助系统开发人员快速获取私有化部署实施所需的所有材料。188.根据本发明实施例的第二方面,提供一种实现上述方法的装置。189.图5是本发明实施例的私有化部署的装置的主要模块的示意图,如图5所示,私有化部署的装置500包括:190.配置模块501,根据预设的架构声明规范确定待部署应用的配置文件;191.生成模块502,对所述配置文件进行解析,生成目标部署产物;192.部署模块503,根据所述目标部署产物私有化部署所述待部署应用。193.可选地,所述架构声明规范包括:应用信息模板、任务配置信息模板和应用描述信息模板;所述配置文件包括:待部署应用的应用信息、任务配置信息和应用描述信息。194.可选地,所述目标部署产物包括部署脚本,所述任务配置信息包括所述待部署应用中每个组件的所有任务的配置信息;195.所述生成模块对所述配置文件进行解析,生成目标部署产物,包括:196.对于每个组件:根据所述组件的所有任务的配置信息生成与所述组件中的每个任务对应的脚本文件,将所述每个任务对应的脚本文件合并得到所述组件的脚本文件;197.将所有组件的脚本文件合并,得到所述部署脚本。198.可选地,所述脚本文件包括安装脚本;所述生成模块还用于,按照如下步骤生成每个任务对应的安装脚本:199.根据所述任务的配置信息中的组件环境依赖字段生成安装脚本,根据所述任务的配置信息中的代码包字段生成代码包脚本,将所述安装脚本和所述代码包脚本合并得到所述任务的安装脚本。200.可选地,所述生成模块还用于:将所述安装脚本和所述代码包脚本合并之前,根据所述任务的配置信息中的自定义脚本字段确认所述任务中不存在自定义安装脚本;201.若所述任务中存在自定义安装脚本,则将所述安装脚本、所述代码包脚本和所述自定义安装脚本合并,得到所述任务的安装脚本。202.可选地,所述生成模块还用于,按照如下步骤生成每个任务对应的启动脚本:203.根据所述任务的配置信息中的任务类型字段确定所述任务的任务类型;所述任务类型包括:静态资源类型,服务类型;204.若所述任务的任务类型为静态资源类型,则判断所述任务的配置信息中的组件环境依赖字段是否为空;若是,则生成启动脚本;否则结束流程;205.若所述任务的任务类型为服务类型,则根据自定义脚本字段获取所述任务的启动前脚本、生成启动脚本片段、获取所述任务的启动后脚本,将所述启动前脚本、所述启动脚本片段和所述启动后脚本合并,得到所述任务的启动脚本。206.可选地,所述目标部署产物包括docker镜像,所述应用描述信息包括所述待部署应用的每个镜像的镜像配置信息,所述镜像配置信息包括所述镜像的任务数组和所述任务数组中所有任务的描述信息;207.所述生成模块对所述配置文件进行解析,生成目标部署产物,包括:208.对于每个镜像:根据所述镜像的任务数组确定所述镜像的任务列表;根据所述任务数组中每个任务的描述信息和配置信息生成所述任务数组中每个任务的镜像文件;将所述任务数组中每个任务的镜像文件合并,得到所述镜像的镜像文件;209.将所有镜像的镜像文件合并,得到所述待部署应用的docker镜像。210.可选地,所述生成模块根据所述镜像的任务数组确定所述镜像的任务列表,包括:211.判断所述镜像的任务数组是否为空;212.若是,则根据所述待部署应用中每个组件的所有任务的配置信息中的组件环境依赖字段排列所述待部署应用中每个组件的所有任务,生成所述镜像的任务数组,以所述任务数组中所有任务形成的列表作为所述任务列表;213.否则,以所述任务数组中所有任务形成的列表作为所述任务列表。214.可选地,所述目标部署产物包括部署文档,所述应用描述信息包括所述待部署应用的安装文档说明信息、注意事项信息、必备软件信息、中间件信息、故障处理信息、常见问题信息;所述任务配置信息包括所述待部署应用中每个组件的所有任务的文档展示信息和任务描述信息;215.所述生成模块对所述配置文件进行解析,生成目标部署产物,包括:216.根据所述待部署应用的应用信息生成所述待部署应用的产品介绍章节;217.根据所述安装文档说明信息生成所述待部署应用的部署流程章节;218.根据所述注意事项信息生成所述待部署应用的注意事项章节;219.根据所述必备软件信息生成所述待部署应用的必备软件章节;220.根据部署引擎中的安装脚手架脚本生成所述待部署应用的安装准备章节;221.根据所述中间件信息生成所述待部署应用初始化的文档描述,根据所述文档展示信息获取所述待部署应用的反向代理规则,获取所述待部署应用中每个组件的所有任务的部署脚本,根据所述待部署应用中每个组件的所有任务的任务描述信息或者每个镜像的任务数组获取每个任务安装时的文档说明,从而生成所述待部署应用的安装章节;222.根据所述故障处理信息生成所述待部署应用的故障处理章节;223.根据所述常见问题信息生成所述待部署应用的常见问题解答章节;224.将所述产品介绍章节、所述部署流程章节、所述注意事项章节、所述必备软件章节、所述安装准备章节、所述安装章节、所述故障处理章节和所述常见问题解答章节合并,得到所述待部署应用的部署文档。225.可选地,所述目标部署产物包括技术架构图;226.所述生成模块对所述配置文件进行解析,生成目标部署产物,包括:根据部署引擎内置的格式模板和所述应用描述信息生成所述待部署应用的代码片段,对所述代码片段进行渲染后得到所述技术架构图。227.图6示出了本发明可选实施例中生成模块的组成示意图。如图6所示,生成模块包括配置解析模块、传统部署模块、文档模块和docker镜像模块。配置解析模块对配置文件进行解析,传统部署模块根据解析结果和需要的输出类型(即部署脚本)自动生成部署脚本并输出,文档模块根据解析结果和需要的输出类型(即部署文档、系统架构图、faq(frequentlyaskedquestions,常见的问题项目与对应的问题解答)、系统依赖列表等)自动生成部署文档、系统架构图、faq、系统依赖列表等并输出,docker镜像模块根据解析结果和需要的输出类型(即docker镜像)自动生成各个镜像的镜像文件dockerfile和待部署应用的docker镜像。生成过程参见方法部分相关描述,此处不再赘述。228.本发明实施例根据预设的架构声明规范确定待部署应用的配置文件、根据该配置文件生成目标部署产物,能够自动生成私有化部署所需的部署产物,避免现有技术中由于采用人工编写部署产物而导致的不足,提高私有化部署效率,提高私有化部署的健壮性。由于各个待部署应用的配置文件可以根据相同的架构声明规范来确定,因此能够实现部署产物编写风格的标准化。229.根据本发明实施例的第三方面,提供一种私有化部署的电子设备,包括:230.一个或多个处理器;231.存储装置,用于存储一个或多个程序,232.当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现本发明实施例第一方面提供的方法。233.根据本发明实施例的第四方面,提供一种计算机可读介质,其上存储有计算机程序,所述程序被处理器执行时实现本发明实施例第一方面提供的方法。234.图7示出了可以应用本发明实施例的私有化部署的方法或私有化部署的装置的示例性系统架构700。235.如图7所示,系统架构700可以包括终端设备701、702、703,网络704和服务器705。网络704用以在终端设备701、702、703和服务器705之间提供通信链路的介质。网络704可以包括各种连接类型,例如有线、无线通信链路或者光纤电缆等等。236.用户可以使用终端设备701、702、703通过网络704与服务器705交互,以接收或发送消息等。终端设备701、702、703上可以安装有各种通讯客户端应用,例如购物类应用、网页浏览器应用、搜索类应用、即时通信工具、邮箱客户端、社交平台软件等(仅为示例)。237.终端设备701、702、703可以是具有显示屏并且支持网页浏览的各种电子设备,包括但不限于智能手机、平板电脑、膝上型便携计算机和台式计算机等等。238.服务器705可以是提供各种服务的服务器,例如对用户利用终端设备701、702、703所浏览的购物类网站提供支持的后台管理服务器(仅为示例)。后台管理服务器可以对接收到的产品信息查询请求等数据进行分析等处理,并将处理结果(例如目标推送信息、产品信息--仅为示例)反馈给终端设备。239.需要说明的是,本发明实施例所提供的私有化部署的方法一般由服务器705执行,相应地,私有化部署的装置一般设置于服务器705中。240.应该理解,图7中的终端设备、网络和服务器的数目仅仅是示意性的。根据实现需要,可以具有任意数目的终端设备、网络和服务器。241.下面参考图8,其示出了适于用来实现本发明实施例的终端设备的计算机系统800的结构示意图。图8示出的终端设备仅仅是一个示例,不应对本发明实施例的功能和使用范围带来任何限制。242.如图8所示,计算机系统800包括中央处理单元(cpu)801,其可以根据存储在只读存储器(rom)802中的程序或者从存储部分808加载到随机访问存储器(ram)803中的程序而执行各种适当的动作和处理。在ram803中,还存储有系统800操作所需的各种程序和数据。cpu801、rom802以及ram803通过总线804彼此相连。输入/输出(i/o)接口805也连接至总线804。243.以下部件连接至i/o接口805:包括键盘、鼠标等的输入部分806;包括诸如阴极射线管(crt)、液晶显示器(lcd)等以及扬声器等的输出部分807;包括硬盘等的存储部分808;以及包括诸如lan卡、调制解调器等的网络接口卡的通信部分809。通信部分809经由诸如因特网的网络执行通信处理。驱动器810也根据需要连接至i/o接口805。可拆卸介质811,诸如磁盘、光盘、磁光盘、半导体存储器等等,根据需要安装在驱动器810上,以便于从其上读出的计算机程序根据需要被安装入存储部分808。244.特别地,根据本发明公开的实施例,上文参考流程图描述的过程可以被实现为计算机软件程序。例如,本发明公开的实施例包括一种计算机程序产品,其包括承载在计算机可读介质上的计算机程序,该计算机程序包含用于执行流程图所示的方法的程序代码。在这样的实施例中,该计算机程序可以通过通信部分809从网络上被下载和安装,和/或从可拆卸介质811被安装。在该计算机程序被中央处理单元(cpu)801执行时,执行本发明的系统中限定的上述功能。245.需要说明的是,本发明所示的计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质或者是上述两者的任意组合。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子可以包括但不限于:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机访问存储器(ram)、只读存储器(rom)、可擦式可编程只读存储器(eprom或闪存)、光纤、便携式紧凑磁盘只读存储器(cd-rom)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本发明中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。而在本发明中,计算机可读的信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读的信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于:无线、电线、光缆、rf等等,或者上述的任意合适的组合。246.附图中的流程图和框图,图示了按照本发明各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,上述模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图或流程图中的每个方框、以及框图或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。247.描述于本发明实施例中所涉及到的模块可以通过软件的方式实现,也可以通过硬件的方式来实现。所描述的模块也可以设置在处理器中,例如,可以描述为:一种处理器包括:配置模块,根据预设的架构声明规范确定待部署应用的配置文件;生成模块,对所述配置文件进行解析,生成目标部署产物;部署模块,根据所述目标部署产物私有化部署所述待部署应用。其中,这些模块的名称在某种情况下并不构成对该模块本身的限定,例如,配置模块还可以被描述为“对所述配置文件进行解析的模块”。248.作为另一方面,本发明还提供了一种计算机可读介质,该计算机可读介质可以是上述实施例中描述的设备中所包含的;也可以是单独存在,而未装配入该设备中。上述计算机可读介质承载有一个或者多个程序,当上述一个或者多个程序被一个该设备执行时,使得该设备包括:根据预设的架构声明规范确定待部署应用的配置文件;对所述配置文件进行解析,生成目标部署产物;根据所述目标部署产物私有化部署所述待部署应用。249.根据本发明实施例的技术方案,能够自动生成私有化部署所需的部署产物,避免现有技术中由于采用人工编写部署产物而导致的不足,提高私有化部署效率,提高私有化部署的健壮性,实现部署产物编写风格的标准化。250.上述具体实施方式,并不构成对本发明保护范围的限制。本领域技术人员应该明白的是,取决于设计要求和其他因素,可以发生各种各样的修改、组合、子组合和替代。任何在本发明的精神和原则之内所作的修改、等同替换和改进等,均应包含在本发明保护范围之内。当前第1页12当前第1页12
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献

  • 日榜
  • 周榜
  • 月榜