代码打包方法、计算机装置及计算机可读存储介质、代码打包系统与流程

文档序号:17159540发布日期:2019-03-20 00:28阅读:131来源:国知局
代码打包方法、计算机装置及计算机可读存储介质、代码打包系统与流程

本发明涉及代码编译领域,尤其涉及一种代码编译并打包的方法、实现这种方法的计算机装置以及计算机可读存储介质、代码打包系统。



背景技术:

软件程序通常由大量的代码构成,因此软件程序的研发过程往往是由程序员编写代码。随着软件程序的升级、更新,程序员需要不断地对代码进行更新,并且提交新的代码。代码编写完毕后,还需要测试人员对代码进行测试,以确保代码能够正确的运行,并且实现预期的功能。而测试人员在测试代码之前,必须先对代码进行编译,生成可执行文件、脚本或程序包。

通常,软件程序都是跟随某一项目进行的,当该项目的代码有更新时,项目也因此需要不断地对代码进行编译并执行打包的操作,以便发布到生成服务器中。现有对代码进行编译并且打包的做法是使用jenkins工具以及gitlab工具作为持续集成方案,由jenkins工具运行脚本或命令来编译代码并打包。虽然现有的方案能够编译代码并打包,但过度依赖编译打包脚本,可能每一个项目都需要开发一个脚本,产生了巨大的工作量。

另一方面,对代码进行测试时,首先需要在一台测试使用的计算机上配置编译所需要的运行环境,传统的做法是搭建一台编译服务器,该服务器可以是一台计算机,并且在服务器上配置编译环境,然后对代码进行编译。由于软件程序所使用的开发语言众多,每种语言都要配置各自的编译环境,为了编译软件程序创建一套新的编译环境时,需要大量的工作来安装配置不同语言的编译工具和依赖库,导致配置测试运行环境的工作量非常大。

而针对不同的语言所开发的代码,测试人员需要配置相对应的测试环境,导致测试效率低下。另一方面,一旦配置好测试环境的计算机运行出现异常,则需要使用另一台计算机进行测试,此时往往需要在新的计算机上配置相同的测试环境,测试环境的配置工作需要重新执行,花费较长的时间。



技术实现要素:

本发明的第一目的是提供一种减小代码编译过程中需要开发不同的编译代码的代码打包方法。

本发明的第二目的是提供一种能够实现上述代码打包方法的计算机装置。

本发明的第三目的是提供一种能够实现上述代码打包方法的计算机可读存储介质。

本发明的第四目的是提供一种实现上述代码打包方法中对项目配置信息进行配置的代码打包系统。

为了实现上述的第一目的,本发明提供的代码打包方法包括获取编译镜像文件,应用编译镜像文件创建一个编译容器文件,在编译容器文件中设置待编译代码的项目配置信息,并将待编译的代码导入编译容器文件;选定待编译的代码对应的项目,并在编译容器文件运行编译指令,对待编译的代码进行编译;在编译完成后,对编译后的代码打包生成docker镜像文件。

由上述方案可见,对代码进行编译时,首先获取一个编译镜像文件,使用编译镜像文件创建一个编译容器文件,使用编译容器文件对待编译的代码进行编译。这样,对代码进行编译前不需要花费较长时间配置测试环境,而只需要通过编译镜像文件生成一个编译容器文件即可,由于编译容器文件已经包含有编译所需要的测试环境,测试人员可以直接在编译容器文件上执行编译指令即可。

并且,通过预先设定编译代码的项目配置信息,对代码进行编译时,使得在新增有需要编译的代码的项目时,无需编写脚本,因此对管理项目人员的专业性要求大大降低,同时也减少了新增项目的工作量。通常开发一个项目编译脚本需要一小时甚至数小时,而新增一个项目配置,只需要几分钟即可完成,应用本发明的代码打包方法,可以大大降低代码编译以及打包的时间。

一个优选的方案是,设置待编译代码的项目配置信息包括:设定待编译代码的项目属性信息、设定待编译代码的编译配置信息以及设定待编译代码的打包配置信息。

由此可见,通过设定项目配置信息,编译容器文件可以根据设定的配置信息快速的对比待编译的代码进行编译,并且用户可以根据实际需要设定项目配置信息,有利于代码编译的灵活进行。

进一步的方案是,选定待编译的代码对应的项目后,还执行:设定该项目的版本号;其中,设定版本号包括接收自定义的版本号信息或者使用项目属性版本号信息。

可见,用户可以根据实际需要设定项目的版本号,方便用户在编译以后查找、存储编译后的文件。

更进一步的方案是,设定待编译代码的项目属性信息包括设定项目名称、版本信息、代码仓库或者依赖项目中的至少一个,设定待编译代码的编译配置信息包括设定编译指令、执行条件、执行目标或者编译参数中的至少一个,设定待编译代码的打包配置信息包括设定镜像仓库地址、创建镜像指令流程、打包代码的镜像目录、设定是否打包选项中的至少一个。

由此可见,通过设定多个项目属性信息、编译配置信息以及打包配置信息,可以快速的实现代码的编译以及打包,避免。

为了实现上述的第二目的,本发明还提供的计算机装置包括处理器以及存储器,存储器存储有计算机程序,计算机程序被处理器执行时实现上述的代码打包方法的各个步骤。

为了实现上述的第三目的,本发明还提供的计算机可读存储介质上存储有计算机程序,该计算机程序被处理器执行时实现上述代码打包方法的各个步骤。

为了实现上述的第四目的,本发明还提供的代码打包系统运行于编译容器文件,该系统包括:项目配置数据库,用于存储项目配置数据;项目配置管理模块,用于设定项目数据库中的数据,项目数据库中的数据包括待编译代码的项目配置信息;代码编译模块,用于设置编译指令,并根据项目配置数据对待编码的代码执行编译操作;镜像打包模块,用于根据项目配置数据执行docker镜像文件的打包操作并生成docker镜像文件。

由上述方案可见,使用代码打包系统可以方便的在编译容器文件上设置待编译代码对应的项目的配置信息,并且可以通过编译容器文件进行编译并且打包生成docker镜像文件,由于代码的编译、打包通过编译容器文件自动执行,不需要针对不同的代码开发不同的编译脚本,大大节省了代码的编译时间。

优选的,代码编译模块以及镜像打包模块为基于docker应用程序所设定的模块。

由此可见,基于docker应用程序设定代码编译模块以及镜像打包模块,有利于生成docker镜像文件,有利于与基于docker应用程序生成的编译容器文件匹配并对代码进行编译。

附图说明

图1是本发明代码打包方法所应用的终端设备、服务器的示意图。

图2是本发明代码打包方法实施例所应用的编译镜像容器文件的创建的流程图。

图3是本发明代码打包系统实施例的结构框图。

图4是本发明代码打包系统实施例中项目配置信息的示意图。

图5是本发明代码打包方法实施例中设定项目配置信息的流程图。

图6是本发明代码打包方法实施例的流程图。

以下结合附图及实施例对本发明作进一步说明。

具体实施方式

本发明的代码打包方法应用在计算机等终端设备上,并且用于对程序员所开发的软件程序的代码进行编译、打包工作。因此,本发明的计算机装置可以是个人计算机等终端设备,也可以是平板电脑或者其他具有代码编译功能的设备,计算机可读存储介质可以是具有数据存储功能的各种存储介质,包括但不限于flash、eeprom等非易失性存储器。

代码打包方法实施例及代码打包系统实施例:

应用本实施例的代码打包方法的终端设备可以是台式计算机、平板电脑等便终端设备,当然,也可以是其他具有代码编译、测试、打包功能的设备。本发明的代码打包方法应用编译容器文件实现,因此,在进行代码打包前,首先生成一个编译容器文件。下面结合图1与图2介绍编译容器文件的生成过程。

参见图1,用于生成编译容器文件的系统包括一台用于对代码进行测试的计算机30可以连接至一个远程网络服务器20,例如通过英特网进行连接。远程网络服务器20具有处理器以及存储器,存储器上存储有多个编译镜像文件,因此,远程网络服务器20上相当于设置了一个编译镜像文件仓库21,在编译镜像文件仓库21内存储有多个编译镜像文件22、23、24等,其中,每一个编译镜像文件可以是针对不同的语言的编译镜像文件,例如编译镜像文件22是针对java的编译镜像文件,而编译镜像文件23是针对c++的编译镜像文件。此外,不同的编译镜像文件可以是针对不同测试环境的编译镜像文件,本发明并不对此进行限制。

测试人员可以从远程网络服务器20上下载所需要的编译镜像文件,并且在本地的计算机30上应用获取的编译镜像文件创建一个编译容器文件32,优选的,编译容器文件32是基于docker的编译容器文件,测试人员可以将待编译代码33导入到编译容器文件32并通过运行编译容器文件32的指令来完成对代码的编译。

远程网络服务器20所存储的多个编译镜像文件可以预先设定,例如测试人员预先通过另一台计算机10制作编译镜像文件22,然后通过网络将制作好的编译镜像文件22上传至远程网络服务器20,并且将制作的编译镜像文件22保存在编译镜像文件仓库21中。优选的,编译镜像文件仓库21所存储的每一个编译镜像文件都均有自己唯一的标识,例如具有唯一的名称、编码或者编号等,且该标识能够清楚的标记该编译镜像文件所针对的语言或者测试环境,以便于测试人员可以快速的通过编译镜像文件的标识来了解编译镜像文件所针对的测试语言、测试环境等,方便测试人员快速的选择所需要下载的编译镜像文件。

下面结合图2介绍生成编译容器文件的流程。当代码的测试人员在一台计算机上制作一个编译镜像文件时,可以将制作好的编译镜像文件存储在一个编译镜像文件仓库中。当测试人员需要对代码进行编译时,可以使用另一台计算机从编译镜像文件仓库中获取一个编译镜像文件,然后使用该编译镜像文件创建一个编译容器文件,使用该编译容器文件对待编译的代码进行编译。

因此,首先需要制作编译镜像文件,例如,首先执行步骤s1,使用预设代码语言的运行环境作为基础镜像文件,生成编译镜像文件。本实施例是基于docker项目的编译方法,其中docker是一个开源的应用容器引擎,让开发者可以打包所编辑的应用程序的代码,并且可以对代码进行编译等工作。因此,制作编译镜像文件的计算机上需要运行有docker软件。

步骤s1是依据一个语言的运行环境镜像,例如针对java或者c++等语言,通过镜像文件创建volume指令设定代码挂载目录,通过workdir指令设定编译指令工作目录,通过entrypoint指令来设定启动脚本。其中,上述的workdir指令、volume指令以及entrypoint指令都是dokcer软件用于创建镜像的指令。代码挂载目录是待编译代码所存储的路径,编译指令工作目录是编译指令存储的路径,启动脚本存储有默认的编译指令。因此,在制作编译镜像文件时,需要编辑一个启动脚本。

具体的,测试人员可以使用预设代码语言的运行环境镜像作为基础镜像文件,在该基础镜像文件中设定编译指令的工作目录、待编译代码的导入目录,并设置启动脚本,从而生成所需要的编译镜像文件。例如使用java语言的某一个设定好的运行环境作为基础镜像文件,然后在该基础镜像文件中设定编译指令的工作目录、待编译代码的导入目录,并且编辑一个启动脚本,这样即编辑生成一个编译镜像文件。可选的,启动脚本可以通过环境变量buildcommand来获取测试人员自定义的编译指令,因此,当编译镜像文件所创建的编译容器文件执行时,可以执行默认的指令编译。

生成编译镜像文件以后,执行步骤s2,将编译镜像文件传输至编译镜像文件仓库。本实施例中,编译镜像文件仓库设置在一个远程网络服务器上,因此,计算机需要通过网络与远程网络服务器连接并且进行通信,从而将编译镜像文件上传至远程网络服务器。当然,编译镜像文件仓库不一定是设置在远程网络服务器上,可以是设置在企业内部的服务器上,此时,可以通过企业内部的局域网将编译镜像文件传输至内部的服务器,并且存储在编译镜像文件仓库中。

可选的,直接在生成编译镜像文件的计算机上设置一个编译镜像文件仓库,即编译镜像文件仓库就存储在计算机的本地存储器上,因此,在生成编译镜像文件以后,只需要将所生成的编译镜像文件存储在指定的文件夹即可。

当测试人员需要对开发出来的代码进行测试时,例如需要执行编译操作时,执行步骤s3,从编译镜像文件仓库中获取一个编译镜像文件。由于编译镜像文件参考中存储有多个编译镜像文件,每一个编译镜像文件对应于不同的开发语音或者不同的测试环境,因此,测试人员需要待编译的代码的开发语言,以及所希望的测试环境,选择对应的编译镜像文件。

将所选择的编译镜像文件下载到测试使用的计算机以后,执行步骤s4,应用所获取的编译镜像文件创建一个编译容器文件。例如,使用编译镜像文件创建一个docker编译容器文件,然后将待编译的代码文件导入所创建的编译容器文件。然后,启动编译容器文件,例如运行启动脚本。在编译容器文件启动以后,可以通过编译指令来对待编译的代码进行编译。编译指令可以使用启动脚本包含的默认的编译指令,也可以使用测试人员自定义的编译指令。

为了实现对待编译的代码进行编译、打包,需要设定该代码对应的项目的项目配置信息,本实施例中,设置待编译代码的项目配置信息包括设定待编译代码的项目属性信息、设定待编译代码的编译配置信息以及设定待编译代码的打包配置信息。参见图3,设置待编译代码的项目配置信息可以通过代码打包系统实现,代码打包系统包括项目配置数据库40、项目配置管理模块41、代码编译模块42以及镜像打包模块43。

其中,项目配置数据库40用于存储项目配置数据,即通过项目管理模块41所设定的数据存储在项目配置数据库40。项目配置管理模块41用于管理项目配置数据库40中的数据,例如增加、删除、修改项目配置信息,包括项目配置管理模块41的详细信息。代码编译模块42作为编译代码的工具,内置了大部分常见语言的编译指令,依据项目配置完成项目代码更新及编译的工作。镜像打包模块43是一个基于dockerapi开发的镜像打包工具,其依据项目配置信息完成镜像打包工作并生成基于docker的镜像文件。

优选的,代码编译模块42与镜像打包模块43均为基于dockerapi实现的软件工具,例如使用go语言开发的工具。代码编译模块42与镜像打包模块43均可以读取项目配置数据库40中的项目配置信息,并根据项目配置信息完成项目的编译与docker镜像打包的操作,具体的,可以执行以下操作指令:create[project],用于创建一个项目配置,其中project是要创建的项目配置的项目名称,这个指令可以通过交互式命令行操作来完成项目配置;build[project],用于编译并打包一个项目,其中project是要编译打包的项目的名称,代码编译模块42与镜像打包模块43可以依据项目名称在项目配置数据库40中获取相应项目的配置信息,并指定项目是否需要打包形成docker镜像文件。基于dockerapi开发的工具还支持dburi(配置数据库连接信息)、dockerapi(配置dockerapi信息)等可选参数配置。

下面结合图4介绍项目配置管理模块41所设定的项目配置信息的具体内容。代码打包系统所设定的项目配置信息包括项目属性信息、编译配置信息以及打包配置信息,其中,项目属性信息是项目的基本信息配置,包括项目名称、版本信息、代码仓库以及依赖项目等信息。项目名称作为项目的唯一识别符号,同时也作为打包镜像时的dockerimagetag的后缀。版本信息是项目的当前版本,打包形成docker镜像文件时将使用版本信息作为dockerimage的版本信息。代码仓库是项目的代码目录、代码git分支,编译时将根据此设定获取对应分支最新代码到代码目录。依赖项目是待编译的项目所依赖的项目,在编译代码时,会先行编译依赖项目,其中,依赖项目必须是存在于项目配置数据库中具备完整配置的项目。

编译配置信息是编译配置是项目编译的流程设定,一个项目可以拥有多个编译配置信息,每一个编译配置信息包括编译指令、执行条件、执行目录以及编译参数等信息。编译指令是编译时需要执行的命令,代码打包系统为每一种开发语言设置一套编译指令以供用户选择使用,也可以使用用户自定义的编译指令。执行条件是编译指令的执行条件,当执行条件满足时才执行编译指令,比如代码有变动、某个文件有修改等。执行目录是编译指令的执行目录,而编译参数是编译指令的执行参数,该参数可以由用户自行设定或者使用默认的参数。

打包配置信息是docker创建镜像所需配置的配置信息,包括镜像仓库地址、创建镜像指令流程、镜像目录以及是否打包等配置信息。其中镜像仓库地址为registryserver,可以作为镜像名称前缀,当不需要上传到镜像仓库时,镜像仓库地址可以设置为空。创建镜像指令流程的文件为dockerfile,该文件为创建docker镜像文件的指令流程,因此dockerfile的文本存储到项目配置数据库40中。镜像目录为path,即需要打包到docker镜像文件的目录。是否打包的配置是设定是否需要创建docker镜像文件,有些项目作为其他项目的依赖项目,因此不需要创建docker镜像文件,此时,将该配置信息设置为否即可。如果该项目需要创建docker镜像文件,则将该配置信息设置为是。

下面结合图5介绍设置项目配置信息的流程,首先,执行步骤s11,使用项目配置管理工具创建一个新项目,项目名称需要在这一步骤设置。然后执行步骤s12,使用代码打包系统设置项目属性信息,所设定的项目属性信息包括版本信息、代码仓库信息、依赖项目列表等。接着,执行步骤s13,使用项目配置管理模块41设置编译配置信息,包括待编译代码的编译指令、执行条件、执行目录、编译参数等。本实施例中,一个项目可以包含多个编译配置信息,编译时按照编译配置添加的先后顺序执行。最后,执行步骤s14,使用项目配置管理模块41设置打包配置信息,包括registryserver、dockerfile、path、是否打包的标志等信息。当项目配置信息设定完毕以后,可以应用编译容器文件对待编译的代码进行编译并打包。

参见图4,对待编译的代码进行编译、打包时,首先执行步骤s21,选定一个已经配置的项目。由于代码打包系统运行在编译容器文件上,因此,项目的配置信息都通过编译容器文件进行配置,可以从编译容器文件上选择一个已经配置的项目。

然后,执行步骤s22,判断是否选择自定义的版本号,如是,执行步骤s23,根据用户设定的信息确定自定义的版本号,如果用户没有选择自定义的版本号,则执行步骤s24,默认使用项目属性配置中的版本号。因此,用户可以自定义一个项目的版本号,也可以不定义,这样就使用项目属性配置中的版本号。

接着,执行步骤s25,根据编译配置启动代码编译工具对待编译的代码进行编译操作。需要说明的是,若配置了依赖项目,代码编译工具将自动执行项目编译流程,即先编译依赖项目的代码。若依赖项目编译失败,则项目编译也失败。

然后,执行步骤s26,判断代码编译是否成功,如编译成功,执行步骤s27,根据打包配置启动镜像打包模块43将编译后的文件打包形成docker镜像文件。当然,若项目不需要打包,即打包配置中是否打包配置的设置信息为否,则完成编译操作。如果步骤s26的判断结果为否,即代码编译失败,则反馈代码编译失败的信息,例如反馈错误信息。

执行步骤s27后,判断docker镜像文件是否打包完毕,如是,代码编译、打包流程结束,如果打包出错,则执行步骤s27,反馈错误信息,例如输出打包出错的原因。

相比起现有通过jenkins以及gitlab工具实现的代码编译与打包工作,本发明实现了代码编译打包工具的通用化与配置化,配置化的设置使得在新增需要编译、打包的项目时,无需编写编译脚本,因此对管理项目人员的专业性要求大大降低,同时也减少了新增项目的工作量。使用现有的编译、打包工具,通常开发一个项目编译脚本需要一小时甚至数小时的时间,而新增一个项目的项目配置信息只需要几分钟即可完成,应用本发明的打包系统可以快速的实现代码的编译以及打包,大大提高代码的编译、打包效率。

另外,通过配置化的操作对项目进行编译、打包,使得对项目的修改变得更加简单、方便。当项目有变动时,只需要修改对应的项目配置信息,而无需重新开发编译打包脚本。由于现有技术中,在需要重新打包一个项目但项目代码并未发生变动时,往往需要更新编译打包脚本并重新编译项目,然后执行打包操作,而本发明会根据编译前置条件配置检测到无需编译时,可以直接执行打包操作,大大节省了代码的编译、打包的时间。

计算机装置实施例:

本实施例的计算机装置包括有处理器、存储器以及存储在存储器中并可在处理器上运行的计算机程序,例如用于实现上述代打包译方法的计算机程序。处理器执行计算机程序时实现上述代码打包方法的各个步骤。

例如,计算机程序可以被分割成一个或多个模块,一个或者多个模块被存储在存储器中,并由处理器执行,以完成本发明的各个模块。一个或多个模块可以是能够完成特定功能的一系列计算机程序指令段,该指令段用于描述计算机程序在终端设备中的执行过程。

需要说明的是,终端设备可以是桌上型计算机、笔记本、掌上电脑及云端服务器等计算设备。终端设备可包括,但不仅限于,处理器、存储器。本领域技术人员可以理解,本发明的示意图仅仅是终端设备的示例,并不构成对终端设备的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件,例如终端设备还可以包括输入输出设备、网络接入设备、总线等。

本发明所称处理器可以是中央处理单元(centralprocessingunit,cpu),还可以是其他通用处理器、数字信号处理器(digitalsignalprocessor,dsp)、专用集成电路(applicationspecificintegratedcircuit,asic)、现成可编程门阵列(field-programmablegatearray,fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等,处理器是终端设备的控制中心,利用各种接口和线路连接整个终端设备的各个部分。

存储器可用于存储计算机程序和/或模块,处理器通过运行或执行存储在存储器内的计算机程序和/或模块,以及调用存储在存储器内的数据,实现终端设备的各种功能。存储器可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序(比如声音播放功能、图像播放功能等)等;存储数据区可存储根据手机的使用所创建的数据(比如音频数据、电话本等)等。此外,存储器可以包括高速随机存取存储器,还可以包括非易失性存储器,例如硬盘、内存、插接式硬盘,智能存储卡(smartmediacard,smc),安全数字(securedigital,sd)卡,闪存卡(flashcard)、至少一个磁盘存储器件、闪存器件、或其他易失性固态存储器件。

计算机可读存储介质:

服务器所集成的模块如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明实现上述实施例方法中的全部或部分流程,也可以通过计算机程序来指令相关的硬件来完成,该计算机程序可存储于一计算机可读存储介质中,该计算机程序在被处理器执行时,可实现上述各个代码打包方法的各个步骤。

其中,计算机程序包括计算机程序代码,计算机程序代码可以为源代码形式、对象代码形式、可执行文件或某些中间形式等。计算机可读介质可以包括:能够携带计算机程序代码的任何实体或装置、记录介质、u盘、移动硬盘、磁碟、光盘、计算机存储器、只读存储器(rom,read-onlymemory)、随机存取存储器(ram,randomaccessmemory)、电载波信号、电信信号以及软件分发介质等。需要说明的是,计算机可读介质包含的内容可以根据司法管辖区内立法和专利实践的要求进行适当的增减,例如在某些司法管辖区,根据立法和专利实践,计算机可读介质不包括电载波信号和电信信号。

当然,上述的方案只是本发明优选的实施方案,实际应用是还可以有更多的变化,例如,编译镜像文件针对的语言的改变,或者编译镜像文件仓库设置方式的改变等,这样的改变不影响本发明的实施,也应该包括在本发明的保护范围内。

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