CN113031960B - 代码编译方法、装置、服务器及存储介质 - Google Patents

代码编译方法、装置、服务器及存储介质 Download PDF

Info

Publication number
CN113031960B
CN113031960B CN202110288863.3A CN202110288863A CN113031960B CN 113031960 B CN113031960 B CN 113031960B CN 202110288863 A CN202110288863 A CN 202110288863A CN 113031960 B CN113031960 B CN 113031960B
Authority
CN
China
Prior art keywords
compiling
module
pipeline
identifier
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.)
Active
Application number
CN202110288863.3A
Other languages
English (en)
Other versions
CN113031960A (zh
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.)
Beijing Dajia Internet Information Technology Co Ltd
Original Assignee
Beijing Dajia Internet Information 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 Beijing Dajia Internet Information Technology Co Ltd filed Critical Beijing Dajia Internet Information Technology Co Ltd
Priority to CN202110288863.3A priority Critical patent/CN113031960B/zh
Publication of CN113031960A publication Critical patent/CN113031960A/zh
Application granted granted Critical
Publication of CN113031960B publication Critical patent/CN113031960B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/447Target code generation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/42Syntactic analysis
    • G06F8/427Parsing
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal 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)
  • Stored Programmes (AREA)

Abstract

本公开提供了一种代码编译方法、装置、服务器及存储介质,属于计算机技术领域。方法包括:创建超文本传输协议服务,得到代理管线;基于该代理管线对网络钩子发送的网络钩子请求进行解析,得到模块信息,网络钩子用于监听发生代码变动时触发的编译事件,模块信息用于指示发生代码变动的至少一个目标模块;根据模块信息,确定与至少一个目标模块对应的至少一个编译管道,编译管道用于对编译管道对应的模块进行编译;向至少一个编译管道发送网络钩子请求。上述方案,通过使对应的编译管道根据网络钩子请求对目标模块中的代码进行编译实现了一个或者多个目标模块的编译,整体流程简单,且相较于shell脚本,代理管线易于扩展和维护。

Description

代码编译方法、装置、服务器及存储介质
技术领域
本公开涉及计算机技术领域,特别涉及一种代码编译方法、装置、服务器及存储介质。
背景技术
在软件开发过程中,企业级的应用软件项目,大部分都是多人协作的开发模式,源代码管理都依赖于服务器中的代码仓库,如Git(分布式版本控制系统)仓库。如何对代码仓库中的代码进行高效的编译,是需要解决的问题。
相关技术中,服务器中包括代码仓库和编译管道,代码仓库中存储有多个模块的代码,编译管道用于进行代码的编译。服务器同时也提供了一些代码管理方面的附加功能,通过网络钩子监听编译事件,然后通过编译管道中的shell脚本处理网络钩子请求,来实现代码的编译。
上述方式的复杂度高,并且如果项目中增加了新的模块或者删除了模块,需要重新修改shell脚本,扩展性差、维护成本高。
发明内容
本公开提供一种代码编译方法、装置、服务器及存储介质,通过创建超文本传输协议服务得到代理管线,然后基于该代理管线对网络钩子请求进行解析,能够确定代码发生了变动的目标模块,进一步的能够向目标模块对应的编译管道发送该网络钩子请求,以使对应的编译管道根据该网络钩子请求对目标模块中的代码进行编译,从而实现一个或者多个目标模块的编译,整体流程简单,且相较于shell脚本,代理管线易于扩展和维护。本公开的技术方案如下:
根据本公开实施例的第一方面,提供一种代码编译方法,包括:
创建超文本传输协议服务,得到代理管线;
基于所述代理管线对网络钩子发送的网络钩子请求进行解析,得到模块信息,所述网络钩子用于监听发生代码变动时触发的编译事件,所述模块信息用于指示发生代码变动的至少一个目标模块;
根据所述模块信息,确定与所述至少一个目标模块对应的至少一个编译管道,所述编译管道用于对所述编译管道对应的模块进行编译;
向所述至少一个编译管道发送所述网络钩子请求。
在一些实施例中,所述基于所述代理管线对网络钩子发送的网络钩子请求进行解析,得到模块信息,包括:
接收网络钩子发送的网络钩子请求;
基于所述代理管线对所述网络钩子请求进行解析,得到至少一个文件路径;
确定所述至少一个文件路径对应的至少一个目标模块,所述文件路径对应的文件中存储有所述目标模块中的代码。
在一些实施例中,所述基于所述代理管线对所述网络钩子请求进行解析,得到至少一个文件路径之后,所述方法还包括:
从所述网络钩子请求中移除忽略编译的文件路径。
在一些实施例中,所述根据所述模块信息,确定与所述至少一个目标模块对应的至少一个编译管道,包括:
获取配置表,所述配置表用于指示模块与编译管道之间的对应关系;
对于所述模块信息中的任一目标模块,基于所述配置表,确定所述目标模块对应的目标编译管道。
在一些实施例中,所述方法还包括:
响应于模块添加操作,获取新添加模块的第一模块标识以及对应的第一编译管道标识,在所述配置表中添加所述第一模块标识和所述第一编译管道标识的对应关系;
响应于模块删除操作,获取待删除模块的第二模块标识,从所述配置表中删除所述第二模块标识与第二编译管道标识的对应关系;
响应于模块修改操作,获取待修改模块的第三模块标识和输入的第三编译管道标识,将所述配置表中所述第三模块标识的对应关系修改为所述第三模块标识和所述第三编译管道标识对应。
在一些实施例中,所述方法还包括:
生成所述至少一个目标模块的编译进度信息,所述编译进度信息用于指示所述至少一个目标模块的编译进度;
调用进度信息发送接口,发送所述编译进度信息。
根据本公开实施例的第二方面,提供一种代码编译装置,包括:
代理管线创建单元,被配置为执行创建超文本传输协议服务,得到代理管线;
请求解析单元,被配置为执行基于所述代理管线对网络钩子发送的网络钩子请求进行解析,得到模块信息,所述网络钩子用于监听发生代码变动时触发的编译事件,所述模块信息用于指示发生代码变动的至少一个目标模块;
编译管道确定单元,被配置为执行根据所述模块信息,确定与所述至少一个目标模块对应的至少一个编译管道,所述编译管道用于对所述编译管道对应的模块进行编译;
请求发送单元,被配置为执行向所述至少一个编译管道发送所述网络钩子请求。
在一些实施例中,所述请求解析单元,被配置为执行接收网络钩子发送的网络钩子请求;基于所述代理管线对所述网络钩子请求进行解析,得到至少一个文件路径;确定所述至少一个文件路径对应的至少一个目标模块,所述文件路径对应的文件中存储有所述目标模块中的代码。
在一些实施例中,所述请求解析单元,还被配置为执行从所述网络钩子请求中移除忽略编译的文件路径。
在一些实施例中,所述编译管道确定单元,被配置为执行获取配置表,所述配置表用于指示模块与编译管道之间的对应关系;对于所述模块信息中的任一目标模块,基于所述配置表,确定所述目标模块对应的目标编译管道。
在一些实施例中,所述装置还包括:
配置表维护单元,被配置为执行响应于模块添加操作,获取新添加模块的第一模块标识以及对应的第一编译管道标识,在所述配置表中添加所述第一模块标识和所述第一编译管道标识的对应关系;
所述配置表维护单元,还被配置为执行响应于模块删除操作,获取待删除模块的第二模块标识,从所述配置表中删除所述第二模块标识与第二编译管道标识的对应关系;
所述配置表维护单元,还被配置为执行响应于模块修改操作,获取待修改模块的第三模块标识和输入的第三管道标识,将所述配置表中查询所述第三模块标识的对应关系修改为所述第三模块标识和所述第三编译管道标识对应。
在一些实施例中,所述装置还包括:
信息生成单元,被配置为执行生成所述至少一个目标模块的编译进度信息,所述编译进度信息用于指示所述至少一个目标模块的编译进度;
信息发送单元,被配置为执行调用进度信息发送接口,发送所述编译进度信息。
根据本公开实施例的第三方面,提供一种服务器,该服务器包括:
一个或多个处理器;
用于存储该处理器可执行指令的存储器;
其中,该处理器被配置为执行该指令,以实现上述代码编译方法。
根据本公开实施例的第四方面,提供一种计算机可读存储介质,当该计算机可读存储介质中的指令由服务器的处理器执行时,使得服务器能够执行上述代码编译方法。
根据本公开实施例的第五方面,提供了一种计算机程序产品,包括计算机指令,该计算机指令被处理器执行时实现上述代码编译方法。
本公开实施例提供的技术方案至少带来以下有益效果:
通过创建超文本传输协议服务得到代理管线,然后基于该代理管线对网络钩子请求进行解析,能够确定代码发生了变动的目标模块,进一步的能够向目标模块对应的编译管道发送该网络钩子请求,以使对应的编译管道根据该网络钩子请求对目标模块中的代码进行编译,从而实现一个或者多个目标模块的编译,整体流程简单,且相较于shell脚本,代理管线易于扩展和维护。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本公开。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本公开的实施例,并与说明书一起用于解释本公开的原理,并不构成对本公开的不当限定。
图1是根据一示例性实施例示出的一种代码编译方法的实施环境示意图。
图2是根据一示例性实施例示出的一种代码编译方法的流程图。
图3是根据一示例性实施例示出的另一种代码编译方法的流程图。
图4是本公开实施例提供的另一种代码编译方法的流程图。
图5是根据一示例性实施例示出的一种代码编译装置的框图。
图6是根据一示例性实施例示出的一种服务器的框图。
具体实施方式
为了使本领域普通人员更好地理解本公开的技术方案,下面将结合附图,对本公开实施例中的技术方案进行清楚、完整地描述。
需要说明的是,本公开的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本公开的实施例能够以除了在这里图示或描述的那些以外的顺序实施。以下示例性实施例中所描述的实施方式并不代表与本公开相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本公开的一些方面相一致的装置和方法的例子。
本公开所涉及的用户信息(包括但不限于用户设备信息、用户个人信息等),均为经用户授权或者经过各方充分授权的信息。
以下对本公开实施例涉及的名词进行解释。
Git:是一个开源的分布式版本控制系统,可以有效、高速地处理从很小到非常大的项目版本管理,分布式相比于集中式的最大区别在于开发者可以提交到本地,每个开发者通过克隆,在本地机器上拷贝一个完整的Git仓库。
Webhook(网络钩子):基于Git工具的代码托管平台,通常会提供一种功能,如由维护者配置一些hook(钩子),来监听仓库或代码的变动事件,比如:代码合并到某个分支、issues变动、有人提交了一个合并代码的请求等等,此时平台会向hook配置的url(通常是一个外部的web服务网址)发起一个http请求,传递本次变动的一些数据信息。
CI/CD(编译管道):一种通过在应用开发阶段引入自动化来频繁向客户交付应用的方法。CI/CD的核心概念是持续集成、持续交付和持续部署。“CI”指持续集成(ContinuousIn-tegration),应用代码的新更改会定期构建、测试并合并到共享存储库中;“CD”指的是持续交付(Continuous Delivery)和/或持续部署(Continuous Deployment),作为持续交付的延伸,持续交付可自动将已验证的代码发布到存储库,持续部署可以自动将应用发布到生产环境。
Monorepo,一种管理项目代码的方式,所有的项目在一个代码仓库中。通常各个模块由不同的开发者或团队维护。
图1是根据一示例性实施例示出的一种代码编译方法的实施环境示意图。以应用于服务器为例,参见图1,该实施环境包括:终端101和服务器102,终端101与服务器102之间建立网络连接,通过建立的网络连接终端101与服务器102能够进行交互。
示例性的,终端101包括智能手机、智能手表、台式电脑、手提电脑、平板电脑和膝上型便携计算机等设备中的至少一种。示例性的,服务器102为一台服务器,或者由若干台服务器组成的服务器集群,或者是一个云计算服务中心。
在本公开实施例中,终端101上可以安装并运行有用于编程的应用程序,用户通过终端101登录该应用程序来进行编程。终端101泛指多个终端中的一个,本实施例仅以终端101来举例说明。本领域技术人员知晓,上述终端的数量能够更多或更少。比如上述终端为几个,或者上述终端为几十个或几百个,或者更多数量,本公开实施例对终端的数量和设备类型均不加以限定。
服务器102用于提供代码管理服务,采用Monorepo的方式,将多个模块代码放在同一个代码仓库中管理,实现同一管理版本和依赖、同一的格式校验/编译/测试/发布流程、同一处理issue(事务,指的是项目待完成的工作)、生成总的changelog(修改日志)以及跨模块修改调试。可选地,上述服务器的数量可以更多或更少,本公开实施例对此不加以限定。当然,服务器102还包括其他功能服务器,以便提供更全面且多样化的服务,本公开实施例对此不进行限定。
图2是根据一示例性实施例示出的一种代码编译方法的流程图,如图2所示,该代码编译方法应用于服务器中,包括以下步骤:
在步骤S201中,服务器创建超文本传输协议服务,得到代理管线。
在步骤S202中,服务器基于代理管线对网络钩子发送的网络钩子请求进行解析,得到模块信息,该网络钩子用于监听发生代码变动时触发的编译事件,该模块信息用于指示发生代码变动的至少一个目标模块。
在步骤S203中,服务器根据该模块信息,确定与该至少一个目标模块对应的至少一个编译管道,该编译管道用于对该编译管道对应的模块进行编译。
在步骤S204中,服务器向该至少一个编译管道发送该网络钩子请求。
本公开实施例提供的代码编译方法,通过创建超文本传输协议服务得到代理管线,然后基于该代理管线对网络钩子请求进行解析,能够确定代码发生了变动的目标模块,进一步的能够向目标模块对应的编译管道发送该网络钩子请求,以使对应的编译管道根据该网络钩子请求对目标模块中的代码进行编译,从而实现一个或者多个目标模块的编译,整体流程简单,且相较于shell脚本,代理管线易于扩展和维护。
在一些实施例中,基于代理管线对网络钩子发送的网络钩子请求进行解析,得到模块信息,包括:
接收网络钩子发送的网络钩子请求;
基于代理管线对该网络钩子请求进行解析,得到至少一个文件路径;
确定该至少一个文件路径对应的至少一个目标模块,该文件路径对应的文件中存储有该目标模块中的代码。
通过基于代理管线解析网络钩子请求,能够得到该网络钩子请求中的至少一个文件路径,也即需要编译的文件的文件路径,再根据各个文件路径与目标模块之间的对应关系,从而能够确定需要编译的目标模块。
在一些实施例中,基于代理管线对该网络钩子请求进行解析,得到至少一个文件路径之后,该方法还包括:
从该网络钩子请求中移除忽略编译的文件路径。
通过排除一些需要忽略编译的文件路径,从而能够避免无意义的编译过程,提高编译过程的整体效率。
在一些实施例中,根据该模块信息,确定与该至少一个目标模块对应的至少一个编译管道,包括:
获取配置表,所述配置表用于指示模块与编译管道之间的对应关系;
对于该模块信息中的任一目标模块,基于配置表,确定该目标模块对应的目标编译管道。
通过基于配置表中模块与编译管道之间的对应关系,能够在确定目标模块的基础上,高效的确定每个目标模块对应的目标编译管道,提高了整体效率。
在一些实施例中,方法还包括:
响应于模块添加操作,获取新添加模块的第一模块标识以及对应的第一编译管道标识,在该配置表中添加该第一模块标识和该第一编译管道标识的对应关系;
响应于模块删除操作,获取待删除模块的第二模块标识,从该配置表中删除该第二模块标识与第二编译管道标识的对应关系;
响应于模块修改操作,获取待修改模块的第三模块标识和输入的第三编译管道标识,将该配置表中该第三模块标识的对应关系修改为该第三模块标识和该第三编译管道标识对应。
通过设置配置表,以及对配置表进行修改,相对于修改shell脚本,简单便捷,可扩展性好。
在一些实施例中,方法还包括:
生成该至少一个目标模块的编译进度信息,该编译进度信息用于指示该至少一个目标模块的编译进度;
调用进度信息发送接口,发送该编译进度信息。
通过生成并发送编译进度信息,使得用户能够根据该编译进度信息准确的了解当前的编译进度,减少了用户盲目等待的时间,提高了整体的编译效率。
上述图2所示为本公开的基本流程,下面基于一种实现场景,来对本公开提供的代码编译方法进行进一步阐述,本公开实施例提供的代码编译方法,适用于大型或者巨型的,使用Monorepo方式管理的包括多个模块的Web工程,该Web工程的所有模块的代码均存储在同一个代码仓库中,每个模块均可以独立编译和发布。Monorepo中任意模块的更改提交,都会触发编译事件。图3是根据一示例性实施例示出的另一种代码编译方法的流程图。以应用于服务器为例,参见图3,该代码编译方法包括:
在步骤S301中,服务器接收网络钩子发送的网络钩子请求,该网络钩子用于监听发生代码变动时触发的编译事件。
在本公开实施例中,网络钩子(Webhook)能够来监听代码分支的push(推送)、merge request(合并请求)等与代码变动有关的编译事件,响应于监听到编译事件的触发,则服务器接收该网络钩子发送的网络钩子请求,该网络钩子请求中携带事件标识、代码分支标识、文件路径、作者标识以及文件变动日志等信息。
在步骤S302中,服务器创建超文本传输协议服务,得到代理管线。
在本公开实施例中,服务器能够基于node.js搭建http(超文本传输协议)服务作为代理管线(pipeline-proxy),该代理管线为网络钩子和编译管道之间的中间层。
在步骤S303中,服务器基于代理管线对该网络钩子请求进行解析,得到至少一个文件路径。
在本公开实施例中,服务器能够基于该代理管线对上述网络钩子请求中的commits部分进行解析,获取其中完整的文件路径,也即发生代码变动的文件的路径。通过设置代理管线,能够实现对网络钩子请求的解析,从而实现确定发生代码变动的文件的路径,也即确定需要进行编译的代码所在的文件路径,进一步的基于上述文件路径,能够对属于同一模块的相关文件进行编译。
在步骤S304中,服务器确定该至少一个文件路径对应的至少一个目标模块。
在本公开实施例中,一个模块包括多个文件,也即一个模块对应多个文件路径,服务器根据从网络钩子请求中解析得到的至少一个文件路径,能够确定至少一个目标模块,目标模块为发生代码变动的模块。可选的,一个目标模块对应上述至少一个文件路径中的一个文件路径,或者一个目标模块对应上述至少一个文件路径中的两个或两个以上的文件路径。可选的,服务器通过模块信息来指示上述发生代码变动的至少一个目标模块。
在一些实施例中,服务器还能够从网络钩子请求中移除忽略编译的文件路径,也即不需要编译的模块包括的文件路径,通过排除一些需要忽略编译的文件路径,从而能够避免无意义的编译过程,提高编译过程的整体效率。
在步骤S305中,服务器确定与该至少一个目标模块对应的至少一个编译管道,该编译管道用于对该编译管道对应的模块进行编译。
在本公开实施例中,服务器设置有配置表,该配置表用于指示模块与编译管道之间的对应关系,其中,一个模块对应一个编译管道,一个编译管道对应至少一个模块。服务器能够从数据库中获取已配置完毕的配置表,然后对于模块信息中的任一目标模块,服务器基于该配置表,确定该目标模块对应的目标编译管道。可选的,该目标编译管道为CI/CD。
在一些实施例中,如果有模块的增加、删除以及修改等需求,服务器能够对该配置表进行对应的修改即可。相应的,响应于模块添加操作,获服务器取新添加模块的第一模块标识以及对应的第一编译管道标识,在该配置表中添加该第一模块标识和该第一编译管道标识的对应关系;响应于模块删除操作,服务器获取待删除模块的第二模块标识,从该配置表中删除该第二模块标识与第二编译管道标识的对应关系;响应于模块修改操作,服务器获取待修改模块的第三模块标识和输入的第三编译管道标识,将该配置表中第三模块标识的对应关系修改为第三模块标识和第三编译管道标识对应。通过设置配置表,以及对配置表进行修改,相对于修改shell脚本,简单便捷,可扩展性好。
在步骤S306中,服务器向该至少一个编译管道发送该网络钩子请求。
在本公开实施例中,对于任一编译管道,服务器能够通过http协议向该编译管道的API(Application Programming Interface,应用程序接口)接口地址发送网路钩子请求,以使该编译管道对该编译管道对应的模块进行编译。通过设置多个编译管道,配置每个编译管道对该编译管道对应的模块进行编译,打破了代码仓库所有模块均对应于一个编译管道的束缚,使得在不同模块需要编译时,仅触发对应的编译管道即可,不影响未发送代码变动的模块,即各个编译管道各自执行,时间段效率高,不存在木桶效应,不会争抢服务器的硬件资源,并且即使出现个别编译管道执行失败,也能够单独进行重试,不影响其他编译管道的编译任务,提高了模块的编译效率。
例如,服务器根据文件路径:src/packages/module-a,确定目标模块A,该目标模块A对应的编译管道的ID为1,则该模块下的文件中代码发生变动时,服务器通过如下http协议发送网络钩子请求:http://ci.pipeline.com/run/build?job-id=1;服务器根据文件路径:src/packages/module-b,确定目标模块B,该目标模块B对应的编译管道的ID为2,则该模块下的文件中代码发生变动时,服务器通过如下http协议发送网络钩子请求:http://ci.pipeline.com/run/build?job-id=2;以此类推,本公开实施例不再一一列举。
在一些实施例中,服务器除了能够基于代理管线对网络钩子请求进行解析,还能够基于代理管线实现多种附加功能。可选的,服务器能够基于代理管线生成上述至少一个目标模块的编译进度信息,该编译进度信息用于指示该至少一个目标模块的编译进度。然后服务器能够基于代理管线调用进度信息发送接口,发送该编译进度信息。
例如,服务器基于代理管线生成上述至少一个目标模块的编译进度信息,通过发送邮件或者调用IM(Instant Messaging,即时通讯)消息机器人的API,通知相关人员流程进展。
需要说明的是,为了使上述步骤S301至步骤S305描述的代码编译方法更容易理解,参见图4,图4是本公开实施例提供的另一种代码编译方法的流程图。如图4所示,该代码编译方法包括以下步骤:401、网络钩子监听到合并请求,发送网络钩子请求。402、服务器基于代理管线解析该网络钩子请求,得到目标模块A、目标模块B和目标模块C。403、服务器查找并确定目标模块A对应的编译管道1、目标模块B对应的编译管道2和目标模块C对应的编译管道3。404、服务器向编译管道1发送网络钩子请求,以使编译管道1对目标模块A进行编译。405、服务器向编译管道2发送网络钩子请求,以使编译管道2对目标模块B进行编译。406、服务器向编译管道3发送网络钩子请求,以使编译管道3对目标模块C进行编译。通过基于http服务构造的代理管线来实现网络钩子请求的拦截和转发,不会对代码仓库(或代码托管平台)和CI/CD流水线的功能造成限制,且避免了shell脚本侵入CI/CD流水线内部的问题,因此本公开实施例提供的代码编译方法的适用性较广
本公开实施例提供的方案,通过代理管线对网络钩子请求进行解析,能够确定代码发生了变动的目标模块,进一步的能够向目标模块对应的编译管道发送该网络钩子请求,以使对应的编译管道根据该网络钩子请求对目标模块中的代码进行编译,从而实现一个或者多个目标模块的编译,整体流程简单,且相较于shell脚本,代理管线易于扩展和维护。
上述所有可选技术方案,可以采用任意结合形成本公开的可选实施例,在此不再一一赘述。
图5是根据一示例性实施例示出的一种代码编译装置的框图。参照图5,该装置包括:代理管线创建单元501、请求解析单元502、编译管道确定单元503以及请求发送单元504。
代理管线创建单元501,被配置为执行创建超文本传输协议服务,得到代理管线;
请求解析单元502,被配置为执行基于该代理管线对网络钩子发送的网络钩子请求进行解析,得到模块信息,该网络钩子用于监听发生代码变动时触发的编译事件,该模块信息用于指示发生代码变动的至少一个目标模块;
编译管道确定单元503,被配置为执行根据该模块信息,确定与该至少一个目标模块对应的至少一个编译管道,该编译管道用于对该编译管道对应的模块进行编译;
请求发送单元504,被配置为执行向该至少一个编译管道发送该网络钩子请求。
本公开实施例提供的装置,通过创建超文本传输协议服务得到代理管线,然后基于该代理管线对网络钩子请求进行解析,能够确定代码发生了变动的目标模块,进一步的能够向目标模块对应的编译管道发送该网络钩子请求,以使对应的编译管道根据该网络钩子请求对目标模块中的代码进行编译,从而实现一个或者多个目标模块的编译,整体流程简单,且相较于shell脚本,代理管线易于扩展和维护。
在一些实施例中,该请求解析单元502,被配置为执行接收网络钩子发送的网络钩子请求;基于该代理管线对该网络钩子请求进行解析,得到至少一个文件路径;确定该至少一个文件路径对应的至少一个目标模块,该文件路径对应的文件中存储有该目标模块中的代码。
在一些实施例中,该请求解析单元502,还被配置为执行从该网络钩子请求中移除忽略编译的文件路径。
在一些实施例中,该编译管道确定单元503,被配置为执行获取配置表,该配置表用于指示模块与编译管道之间的对应关系;对于该模块信息中的任一目标模块,基于该配置表,确定该目标模块对应的目标编译管道。
在一些实施例中,该装置还包括:
配置表维护单元,被配置为执行响应于模块添加操作,获取新添加模块的第一模块标识以及对应的第一编译管道标识,在该配置表中添加该第一模块标识和该第一编译管道标识的对应关系;
该配置表维护单元,还被配置为执行响应于模块删除操作,获取待删除模块的第二模块标识,从该配置表中删除该第二模块标识与第二编译管道标识的对应关系;
该配置表维护单元,还被配置为执行响应于模块修改操作,获取待修改模块的第三模块标识和输入的第三编译管道标识,将该配置表中第三模块标识的对应关系修改为第三模块标识和第三编译管道标识对应。
在一些实施例中,该装置还包括:
信息生成单元,被配置为执行生成该至少一个目标模块的编译进度信息,该编译进度信息用于指示该至少一个目标模块的编译进度;
信息发送单元,被配置为执行调用进度信息发送接口,发送该编译进度信息。
需要说明的是,上述实施例提供的代码编译装置在进行代码编译时,仅以上述各功能单元的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能单元完成,即将服务器的内部结构划分成不同的功能单元,以完成以上描述的全部或者部分功能。另外,上述实施例提供的代码编译装置与代码编译方法实施例属于同一构思,其具体实现过程详见方法实施例,这里不再赘述。
关于上述实施例中的装置,其中各个模块执行操作的具体方式已经在有关该方法的实施例中进行了详细描述,此处将不做详细阐述说明。
图6是根据一示例性实施例示出的一种服务器的框图,该服务器600可因配置或性能不同而产生比较大的差异,可以包括一个或一个以上处理器(Central ProcessingUnits,CPU)601和一个或一个以上的存储器602,其中,该存储器602中存储有至少一条程序代码,该至少一条程序代码由该处理器601加载并执行以实现上述各个方法实施例提供的代码编译方法。当然,该服务器还可以具有有线或无线网络接口、键盘以及输入输出接口等部件,以便进行输入输出,该服务器600还可以包括其他用于实现设备功能的部件,在此不做赘述。
在示例性实施例中,还提供了一种包括指令的计算机可读存储介质,例如包括指令的存储器602,上述指令可由服务器600的处理器601执行以完成上述方法。可选地,计算机可读存储介质可以是ROM、随机存取存储器(RAM)、CD-ROM、磁带、软盘和光数据存储设备等。
在示例性实施例中,还提供了一种计算机程序产品,包括计算机指令,该计算机指令被处理器执行时实现上述代码编译方法。
本领域技术人员在考虑说明书及实践这里公开的发明后,将容易想到本公开的其它实施方案。本公开旨在涵盖本公开的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本公开的一般性原理并包括本公开未公开的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本公开的真正范围和精神由下面的权利要求指出。
应当理解的是,本公开并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本公开的范围仅由所附的权利要求来限制。

Claims (15)

1.一种代码编译方法,其特征在于,所述代码编译方法包括:
创建超文本传输协议服务,得到代理管线;
基于所述代理管线对网络钩子发送的网络钩子请求进行解析,得到模块信息,所述网络钩子用于监听发生代码变动时触发的编译事件,所述模块信息用于指示发生代码变动的至少一个目标模块;
根据所述模块信息,确定与所述至少一个目标模块对应的至少一个编译管道,所述编译管道用于对所述编译管道对应的模块进行编译;
向所述至少一个编译管道发送所述网络钩子请求。
2.根据权利要求1所述的代码编译方法,其特征在于,所述基于所述代理管线对网络钩子发送的网络钩子请求进行解析,得到模块信息,包括:
接收网络钩子发送的网络钩子请求;
基于所述代理管线对所述网络钩子请求进行解析,得到至少一个文件路径;
确定所述至少一个文件路径对应的至少一个目标模块,所述文件路径对应的文件中存储有所述目标模块中的代码。
3.根据权利要求2所述的代码编译方法,其特征在于,所述基于所述代理管线对所述网络钩子请求进行解析,得到至少一个文件路径之后,所述方法还包括:
从所述网络钩子请求中移除忽略编译的文件路径。
4.根据权利要求1所述的代码编译方法,其特征在于,所述根据所述模块信息,确定与所述至少一个目标模块对应的至少一个编译管道,包括:
获取配置表,所述配置表用于指示模块与编译管道之间的对应关系;
对于所述模块信息中的任一目标模块,基于所述配置表,确定所述目标模块对应的目标编译管道。
5.根据权利要求4所述的代码编译方法,其特征在于,所述方法还包括:
响应于模块添加操作,获取新添加模块的第一模块标识以及对应的第一编译管道标识,在所述配置表中添加所述第一模块标识和所述第一编译管道标识的对应关系;
响应于模块删除操作,获取待删除模块的第二模块标识,从所述配置表中删除所述第二模块标识与第二编译管道标识的对应关系;
响应于模块修改操作,获取待修改模块的第三模块标识和输入的第三编译管道标识,将所述配置表中所述第三模块标识的对应关系修改为所述第三模块标识和所述第三编译管道标识对应。
6.根据权利要求1所述的代码编译方法,其特征在于,所述方法还包括:
生成所述至少一个目标模块的编译进度信息,所述编译进度信息用于指示所述至少一个目标模块的编译进度;
调用进度信息发送接口,发送所述编译进度信息。
7.一种代码编译装置,其特征在于,所述装置包括:
代理管线创建单元,被配置为执行创建超文本传输协议服务,得到代理管线;
请求解析单元,被配置为执行基于所述代理管线对网络钩子发送的网络钩子请求进行解析,得到模块信息,所述网络钩子用于监听发生代码变动时触发的编译事件,所述模块信息用于指示发生代码变动的至少一个目标模块;
编译管道确定单元,被配置为执行根据所述模块信息,确定与所述至少一个目标模块对应的至少一个编译管道,所述编译管道用于对所述编译管道对应的模块进行编译;
请求发送单元,被配置为执行向所述至少一个编译管道发送所述网络钩子请求。
8.根据权利要求7所述代码编译装置,其特征在于,所述请求解析单元,被配置为执行接收网络钩子发送的网络钩子请求;基于所述代理管线对所述网络钩子请求进行解析,得到至少一个文件路径;确定所述至少一个文件路径对应的至少一个目标模块,所述文件路径对应的文件中存储有所述目标模块中的代码。
9.根据权利要求8所述的代码编译装置,其特征在于,所述请求解析单元,还被配置为执行从所述网络钩子请求中移除忽略编译的文件路径。
10.根据权利要求7所述的代码编译装置,其特征在于,所述编译管道确定单元,被配置为执行获取配置表,所述配置表用于指示模块与编译管道之间的对应关系;对于所述模块信息中的任一目标模块,基于所述配置表,确定所述目标模块对应的目标编译管道。
11.根据权利要求10所述的代码编译装置,其特征在于,所述装置还包括:
配置表维护单元,被配置为执行响应于模块添加操作,获取新添加模块的第一模块标识以及对应的第一编译管道标识,在所述配置表中添加所述第一模块标识和所述第一编译管道标识的对应关系;
所述配置表维护单元,还被配置为执行响应于模块删除操作,获取待删除模块的第二模块标识,从所述配置表中删除所述第二模块标识与第二编译管道标识的对应关系;
所述配置表维护单元,还被配置为执行响应于模块修改操作,获取待修改模块的第三模块标识和输入的第三编译管道标识,将所述配置表中所述第三模块标识的对应关系修改为所述第三模块标识和所述第三编译管道标识对应。
12.根据权利要求7所述的代码编译装置,其特征在于,所述装置还包括:
信息生成单元,被配置为执行生成所述至少一个目标模块的编译进度信息,所述编译进度信息用于指示所述至少一个目标模块的编译进度;
信息发送单元,被配置为执行调用进度信息发送接口,发送所述编译进度信息。
13.一种服务器,其特征在于,所述服务器包括:
一个或多个处理器;
用于存储所述处理器可执行指令的存储器;
其中,所述处理器被配置为执行所述指令,以实现如权利要求1至6任一项所述的代码编译方法。
14.一种计算机可读存储介质,其特征在于,当所述计算机可读存储介质中的指令由服务器的处理器执行时,使得所述服务器能够执行如权利要求1至6任一项所述的代码编译方法。
15.一种计算机程序产品,包括计算机指令,其特征在于,所述计算机指令被处理器执行时实现权利要求1至6任一项所述的代码编译方法。
CN202110288863.3A 2021-03-18 2021-03-18 代码编译方法、装置、服务器及存储介质 Active CN113031960B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202110288863.3A CN113031960B (zh) 2021-03-18 2021-03-18 代码编译方法、装置、服务器及存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202110288863.3A CN113031960B (zh) 2021-03-18 2021-03-18 代码编译方法、装置、服务器及存储介质

Publications (2)

Publication Number Publication Date
CN113031960A CN113031960A (zh) 2021-06-25
CN113031960B true CN113031960B (zh) 2024-04-30

Family

ID=76471526

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202110288863.3A Active CN113031960B (zh) 2021-03-18 2021-03-18 代码编译方法、装置、服务器及存储介质

Country Status (1)

Country Link
CN (1) CN113031960B (zh)

Citations (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP2503449A2 (en) * 2011-03-25 2012-09-26 Unisys Corporation Single development test environment
WO2017036335A1 (zh) * 2015-09-01 2017-03-09 阿里巴巴集团控股有限公司 一种代码提交方法和设备
CN107463362A (zh) * 2016-06-03 2017-12-12 北京京东尚科信息技术有限公司 基于多个Jenkins的持续部署的方法和系统
CN107577469A (zh) * 2017-08-21 2018-01-12 厦门悦讯教育科技有限公司 一种软件打包发布管理方法
CN109491662A (zh) * 2018-10-31 2019-03-19 珠海市筑巢科技有限公司 代码打包方法、计算机装置及计算机可读存储介质、代码打包系统
CN109725906A (zh) * 2018-12-30 2019-05-07 上海创功通讯技术有限公司 一种代码编译方法及对应的持续集成系统
CN110531984A (zh) * 2019-08-08 2019-12-03 金蝶软件(中国)有限公司 代码编译方法、装置、系统、计算机设备和存储介质
CN110688112A (zh) * 2019-09-25 2020-01-14 上海创功通讯技术有限公司 多项目共线开发代码的自动入库的方法及系统
CN111737504A (zh) * 2020-06-23 2020-10-02 网易(杭州)网络有限公司 图像资源检测方法、装置、设备及存储介质

Patent Citations (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP2503449A2 (en) * 2011-03-25 2012-09-26 Unisys Corporation Single development test environment
WO2017036335A1 (zh) * 2015-09-01 2017-03-09 阿里巴巴集团控股有限公司 一种代码提交方法和设备
CN107463362A (zh) * 2016-06-03 2017-12-12 北京京东尚科信息技术有限公司 基于多个Jenkins的持续部署的方法和系统
CN107577469A (zh) * 2017-08-21 2018-01-12 厦门悦讯教育科技有限公司 一种软件打包发布管理方法
CN109491662A (zh) * 2018-10-31 2019-03-19 珠海市筑巢科技有限公司 代码打包方法、计算机装置及计算机可读存储介质、代码打包系统
CN109725906A (zh) * 2018-12-30 2019-05-07 上海创功通讯技术有限公司 一种代码编译方法及对应的持续集成系统
CN110531984A (zh) * 2019-08-08 2019-12-03 金蝶软件(中国)有限公司 代码编译方法、装置、系统、计算机设备和存储介质
CN110688112A (zh) * 2019-09-25 2020-01-14 上海创功通讯技术有限公司 多项目共线开发代码的自动入库的方法及系统
CN111737504A (zh) * 2020-06-23 2020-10-02 网易(杭州)网络有限公司 图像资源检测方法、装置、设备及存储介质

Also Published As

Publication number Publication date
CN113031960A (zh) 2021-06-25

Similar Documents

Publication Publication Date Title
US10216527B2 (en) Automated software configuration management
US11762763B2 (en) Orchestration for automated performance testing
CN107016480B (zh) 任务调度方法、装置及系统
JP2018530070A (ja) クラウドベースのコンピューティング環境上の基盤を構築、最適化及び実施するシステム及び方法
CN113220431B (zh) 跨云的分布式数据任务调度方法、设备及存储介质
CN111090423A (zh) 一种webhook框架系统和实现主动调用、实现事件触发的方法
Lin et al. Tracing function dependencies across clouds
US10606730B2 (en) Networked digital data processor log file viewer
US20130339792A1 (en) Public solution model test automation framework
CN113419818B (zh) 基础组件部署方法、装置、服务器及存储介质
US20210149709A1 (en) Method and apparatus for processing transaction
CN112445860B (zh) 一种处理分布式事务的方法和装置
US10067808B2 (en) Nondeterministic operation execution environment utilizing resource registry
CN113031960B (zh) 代码编译方法、装置、服务器及存储介质
CN113127335A (zh) 一种系统测试的方法和装置
CN111414154A (zh) 前端开发的方法、装置、电子设备和存储介质
CN116974716A (zh) 调度任务的发布方法、装置、电子设备及存储介质
CN113434384B (zh) 一种压力测试方法和装置
CN112559001B (zh) 更新应用的方法和装置
CN113282489A (zh) 一种接口测试方法和装置
CN112131095B (zh) 压力测试方法和装置
Adjepon-Yamoah et al. A reactive architecture for cloud-based system engineering
CN111158654A (zh) 算法调用方法、装置、服务器及存储介质
CN112422308A (zh) 一种实现运维监控的方法及装置
CN112241332A (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
GR01 Patent grant
GR01 Patent grant