CN114756464B - 代码检查配置方法、装置及存储介质 - Google Patents
代码检查配置方法、装置及存储介质 Download PDFInfo
- Publication number
- CN114756464B CN114756464B CN202210405115.3A CN202210405115A CN114756464B CN 114756464 B CN114756464 B CN 114756464B CN 202210405115 A CN202210405115 A CN 202210405115A CN 114756464 B CN114756464 B CN 114756464B
- Authority
- CN
- China
- Prior art keywords
- code
- checking
- request
- container
- inspection
- 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
Links
- 238000000034 method Methods 0.000 title claims abstract description 47
- 238000007689 inspection Methods 0.000 claims abstract description 124
- 238000010276 construction Methods 0.000 claims abstract description 50
- 230000010354 integration Effects 0.000 claims description 23
- 230000002085 persistent effect Effects 0.000 claims description 10
- 230000001419 dependent effect Effects 0.000 claims description 8
- 230000007613 environmental effect Effects 0.000 claims description 4
- 230000003044 adaptive effect Effects 0.000 abstract description 3
- 238000010586 diagram Methods 0.000 description 14
- 230000006870 function Effects 0.000 description 6
- 238000012545 processing Methods 0.000 description 5
- 238000004891 communication Methods 0.000 description 4
- 238000005516 engineering process Methods 0.000 description 4
- 238000012423 maintenance Methods 0.000 description 4
- 230000003287 optical effect Effects 0.000 description 4
- 230000008569 process Effects 0.000 description 4
- 230000008878 coupling Effects 0.000 description 3
- 238000010168 coupling process Methods 0.000 description 3
- 238000005859 coupling reaction Methods 0.000 description 3
- 230000000694 effects Effects 0.000 description 3
- 238000012827 research and development Methods 0.000 description 3
- 239000000463 material Substances 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 239000013307 optical fiber Substances 0.000 description 2
- 230000000644 propagated effect Effects 0.000 description 2
- 239000010979 ruby Substances 0.000 description 2
- 229910001750 ruby Inorganic materials 0.000 description 2
- 230000003068 static effect Effects 0.000 description 2
- 238000004458 analytical method Methods 0.000 description 1
- 238000003491 array Methods 0.000 description 1
- 239000002131 composite material Substances 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 238000000275 quality assurance Methods 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 238000012360 testing method Methods 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3604—Software analysis for verifying properties of programs
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3664—Environments for testing or debugging software
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Stored Programmes (AREA)
Abstract
本公开实施例中提供代码检查配置方法、装置及存储介质,通过获取关于待检查代码的代码检查请求;其中,所述代码检查请求包含请求参数;将对应所述代码检查请求的代码检查任务调度至服务器集群中的目标节点,以由所述目标节点利用代码检查环境执行所述代码检查任务;其中,所述代码检查环境基于所述请求参数所构建。本公开实施例中实现基于待检查代码检查需求相关的请求参数,对应在服务器集群所调度的目标节点灵活地构建适配的代码检查环境,不必受限于向特定的从服务器调度代码检查任务,既能屏蔽不同代码语言、不同构建方式、不同检查工具等差异,也能选择资源空闲节点以避免拥堵而提升效率。
Description
技术领域
本公开涉及软件开发及测试技术领域,尤其涉及代码检查配置方法、装置及存储介质。
背景技术
持续集成环境的代码检查,如代码错误、代码质量、代码安全等检查,目前通常基于例如Jenkins等持续集成工具执行。在执行代码检查时,将代码检查任务调度到部署了不同检查工具的从服务器。
基于Jenkins等持续集成工具所部署各不同检查目标的从服务器的方案,每个从服务器只部署针对单一类型的编译环境,会存在下述问题:不同检查工具需分别部署到从服务器;相同检查工具的不同代码语言、不同代码的构建方式,需个性配置编译环境,容易出现所依赖检查组件的版本冲突,增加部署和运维困难;某个类型的代码检查任务只能调度到配置了匹配的特定编译环境的从服务器,而不能调度到其它从服务器。如果代码检查任务对应代码量较大项目,则会造成分析时间长、消耗资源高,容易导致后续任务阻塞、排队,无法利用其它从服务器的资源。
发明消息
鉴于以上相关技术的缺点,本公开的目的在于提供代码检查配置方法、装置及存储介质,以解决相关技术中的问题。
本公开第一方面提供一种代码检查配置方法,包括:获取关于待检查代码的代码检查请求;其中,所述代码检查请求包含请求参数;将对应所述代码检查请求的代码检查任务调度至服务器集群中的目标节点,以由所述目标节点利用代码检查环境执行所述代码检查任务;其中,所述代码检查环境基于所述请求参数所构建。
在第一方面的实施例中,基于所述请求参数构建所述代码检查环境,包括:获取容器镜像;运行所述容器镜像以形成容器;对所述容器加载编译配置参数;对所述容器配置待检查代码的代码访问路径及检查工具。
在第一方面的实施例中,所述请求参数包括:待检查代码的代码语言类型、构建方式、编译指令、检查工具参数、及代码访问路径参数;基于所述请求参数构建所述代码检查环境,包括:基于所述代码语言类型及构建方式,获取匹配的已构建的容器镜像;或者从镜像库获取匹配的容器镜像构建文件,并基于所述容器镜像构建文件建立容器镜像;运行所述容器镜像以形成容器;对所述容器加载匹配于所述编译指令的编译配置参数;对所述容器配置待检查代码的代码访问路径及检查工具;其中,所述代码访问路径匹配于所述访问径路参数,所述检查工具匹配于所述检查工具参数。
在第一方面的实施例中,所述编译配置参数包括以下至少一种:编译依赖项;环境变量。
在第一方面的实施例中,所述对所述容器配置待检查代码的代码访问路径及检查工具,包括:基于所述代码访问路径参数,挂载待检查代码至所述容器;挂载匹配于所述检查工具参数的检查工具至所述容器。
在第一方面的实施例中,所述容器镜像基于基础镜像构建,所述基础镜像或容器镜像获取自预设的镜像仓库;和/或,所述检查组件获取自预设的检查组件仓库。
在第一方面的实施例中,所述的代码检查配置方法还包括:获取所述目标节点执行所述代码检查任务所得到的执行结果,并返回以响应所述代码检查请求。
在第一方面的实施例中,所述代码检查环境由所述目标节点基于代码检查任务所传递的至少部分请求参数所创建。
本公开第二方面提供一种代码检查配置装置,包括:请求获取模块,用于获取关于待检查代码的代码检查请求;其中,所述代码检查请求包含请求参数;任务调度模块,用于将对应所述代码检查请求的代码检查任务调度至服务器集群中的目标节点,以由所述目标节点利用代码检查环境执行所述代码检查任务;其中,所述代码检查环境基于所述请求参数所构建。
本公开第三方面提供一种计算机装置,包括:通信器、存储器及处理器;所述通信器用于与外部通信;所述存储器存储有程序指令;所述处理器用于运行所述程序指令以执行如第一方面任一项所述的代码检查配置方法。
本公开第四方面提供一种计算机可读存储介质,存储有程序指令,所述程序指令被运行以执行如第一方面任一项所述的代码检查配置方法。
如上所述,本公开实施例中提供代码检查配置方法、装置及存储介质,通过获取关于待检查代码的代码检查请求;其中,所述代码检查请求包含请求参数;将对应所述代码检查请求的代码检查任务调度至服务器集群中的目标节点,以由所述目标节点利用代码检查环境执行所述代码检查任务;其中,所述代码检查环境基于所述请求参数所构建。本公开实施例中实现基于待检查代码检查需求相关的请求参数,对应在服务器集群所调度的目标节点灵活地构建适配的代码检查环境,不必受限于向特定的从服务器调度代码检查任务,既能屏蔽不同代码语言、不同构建方式、不同检查工具等差异,也能选择资源空闲节点以避免拥堵而提升效率。
附图说明
图1展示相关技术中持续集成中代码检查的原理示意图。
图2展示本公开一实施例中代码检查配置方法的流程示意图。
图3展示本公开一实施例中代码检查环境构建的流程示意图。
图4展示本公开一更具体实施例中代码检查环境构建的流程示意图。
图5展示本公开一实施例中代码检查环境构建层的架构示意图。
图6展示基于图5实施例的架构执行代码检查流程的示意图。
图7展示本公开一实施例中代码检查配置装置的模块示意图。
图8展示本公开一实施例中计算机装置的结构示意图。
具体实施方式
以下通过特定的具体实例说明本公开的实施方式,本领域技术人员可由本公开所揭露的消息轻易地了解本公开的其他优点与功效。本公开还可以通过另外不同的具体实施方式加以实施或应用***,本公开中的各项细节也可以根据不同观点与应用***,在没有背离本公开的精神下进行各种修饰或改变。需说明的是,在不冲突的情况下,本公开中的实施例及实施例中的特征可以相互组合。
下面以附图为参考,针对本公开的实施例进行详细说明,以便本公开所属技术领域的技术人员能够容易地实施。本公开可以以多种不同形态体现,并不限定于此处说明的实施例。
在本公开的表示中,参考术语“一个实施例”、“一些实施例”、“示例”、“具体示例”、或“一些示例”等的表示意指结合该实施例或示例表示的具体特征、结构、材料或者特点包括于本公开的至少一个实施例或示例中。而且,表示的具体特征、结构、材料或者特点可以在任一个或多个实施例或示例中以合适的方式结合。此外,在不相互矛盾的情况下,本领域的技术人员可以将本公开中表示的不同实施例或示例以及不同实施例或示例的特征进行结合和组合。
此外,术语“第一”、“第二”仅用于表示目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或隐含地包括至少一个该特征。在本公开的表示中,“多个”的含义是两个或两个以上,除非另有明确具体的限定。
为了明确说明本公开,省略与说明无关的器件,对于通篇说明书中相同或类似的构成要素,赋予了相同的参照符号。
在通篇说明书中,当说某器件与另一器件“连接”时,这不仅包括“直接连接”的情形,也包括在其中间把其它元件置于其间而“间接连接”的情形。另外,当说某种器件“包括”某种构成要素时,只要没有特别相反的记载,则并非将其它构成要素排除在外,而是意味着可以还包括其它构成要素。
虽然在一些实例中术语第一、第二等在本文中用来表示各种元件,但是这些元件不应当被这些术语限制。这些术语仅用来将一个元件与另一个元件进行区分。例如,第一接口及第二接口等表示。再者,如同在本文中所使用的,单数形式“一”、“一个”和“该”旨在也包括复数形式,除非上下文中有相反的指示。应当进一步理解,术语“包含”、“包括”表明存在所述的特征、步骤、操执行、元件、模块、项目、种类、和/或组,但不排除一个或多个其他特征、步骤、操执行、元件、模块、项目、种类、和/或组的存在、出现或添加。此处使用的术语“或”和“和/或”被解释为包括性的,或意味着任一个或任何组合。因此,“A、B或C”或者“A、B和/或C”意味着“以下任一个:A;B;C;A和B;A和C;B和C;A、B和C”。仅当元件、功能、步骤或操执行的组合在某些方式下内在地互相排斥时,才会出现该定义的例外。
此处使用的专业术语只用于言及特定实施例,并非意在限定本公开。此处使用的单数形态,只要语句未明确表示出与之相反的意义,那么还包括复数形态。在说明书中使用的“包括”的意义是把特定特性、区域、整数、步骤、执行业、要素及/或成份具体化,并非排除其它特性、区域、整数、步骤、执行业、要素及/或成份的存在或附加。
表示“下”、“上”等相对空间的术语可以为了更容易地说明在附图中图示的一器件相对于另一器件的关系而使用。这种术语是指,不仅是在附图中所指的意义,还包括使用中的装置的其它意义或执行业。例如,如果翻转附图中的装置,曾说明为在其它器件“下”的某器件则说明为在其它器件“上”。因此,所谓“下”的示例性术语,全部包括上与下方。装置可以旋转90°或其它角度,代表相对空间的术语也据此来解释。
虽然未不同地定义,但包括此处使用的技术术语及科学术语,所有术语均具有与本公开所属技术领域的技术人员一般理解的意义相同的意义。普通使用的字典中定义的术语追加解释为具有与相关技术文献和当前提示的消息相符的意义,只要未进行定义,不得过度解释为理想的或非常公式性的意义。
持续集成工具为软件开发行业所常用。持续集成的含义是将更新的代码合并或者提交到主干源码仓库中。在这个合并或者提交的过程中,都伴随着执行一系列的质量保证活动如代码检查等来确保代码的正确性。
可参考图1所示,目前的持续集成工具,例如Jenkins,在收到提交的待检查代码时,会将配置有静态的代码检查工具的服务器,作为Jenkins的从服务器,再把任务调度到从服务器执行代码检查;该方法对不同检查工具(如图中的Fortify、Sonar等)、不同代码语言(如图示Java、C、C++、Go、Python、Ruby、C#等等)、不同构建方式(如编译顺序)需个性配置编译环境,容易出现组件版本冲突,如一些项目依赖openssl 0.9.8,一些项目依赖openssl1.1.0,部署和运维困难。另外,由于代码检查任务只能分配到特定的从服务器,即需要与待检查代码需要的检查工具、编译环境匹配,而不能选择其它从服务器进行分配,导致服务器资源利用率低、部署运维困难。
鉴于此,本公开实施例中可以提供一种代码检查配置方法,根据持续集成工具的代码检查请求选择服务器集群中可用的目标节点,并在目标节点灵活地对应代码检查请求的请求参数搭建适配的代码检查环境,以由高效完成代码检查。
如图2所示,展示本公开实施例中代码检查配置方法的流程示意图。
在图2中,所述代码检查配置方法包括:
步骤S201:获取关于待检查代码的代码检查请求。
其中,所述代码检查请求包含请求参数。在一些实施例中,所述请求参数可以包括:待检查代码的代码语言类型、构建方式、编译指令、检查工具参数、及代码访问路径参数等,用于确定构建代码检查环境所需的配置。
在一些应用示例中,比如持续集成应用场景,所述代码检查请求可以是来自持续集成工具;或者,也可能是在云项目开发场景中,来自云平台的代码检查请求。
步骤S202:将对应所述代码检查请求的代码检查任务调度至服务器集群中的目标节点,以由所述目标节点利用代码检查环境执行所述代码检查任务。
其中,所述代码检查环境基于所述请求参数所构建。在一些实施例中,所述代码检查环境会基于在容器中运行代码检查所需的依赖项、检查工具等。以下通过实施例对代码检查环境构建进行说明。
在一些实施例中,所述目标节点可以根据负载均衡的资源利用策略而从服务器集群中选择,并相应分配代码检查任务,比如基于不同服务器的资源利用均衡、服务器实现的节点数量的均衡、基于代码检查数量和/或资源占用量的均衡等。需说明的是,节点是一种软件层面的模块划分方式,物理层面可能是一个服务器对应实现一个节点,或可能是一个服务器实现多个节点(比如每个节点对应于一个独立的虚拟机实现),或可能是一个节点由多个服务器分布式地实现。
如图3所示,展示本公开一实施例中代码检查环境构建的流程示意图。
在图3中,所述代码检查环境构建的流程包括:
步骤S301:获取容器镜像。
步骤S302:运行所述容器镜像以形成容器。
具体的,容器技术是一种内核轻量级的操作***层虚拟化技术。可以有效地将由单个操作***管理的资源划分到孤立的组中,以更好地在孤立的组之间平衡有冲突的资源使用需求。容器是基于容器镜像(image)的运行所得到的,容器镜像可以理解为一种虚拟机镜像。
在一些实施例中,可以采用Docker容器技术实现所述容器。具体的,通过在镜像仓库拉取静态的基础镜像形成容器镜像,基础镜像如ubuntu镜像,在基础镜像基础上增加可读写的层而形成可读写的动态的容器。在本公开的应用中,容器镜像可根据待检查代码的代码语言类型、构建方式等而对应选择。比如,分别对应Java、C、C++、Go、Python、Ruby、C#的不同基础镜像,根据待检查代码的代码语言类型是其中某一种而对应选择基础镜像。
在一些实施例中,可以从镜像库直接拉取已创建的容器镜像;或者,也可以从镜像库获取匹配的容器镜像构建文件,并基于所述容器镜像构建文件建立容器镜像。例如,所述容器镜像构建文件如Dockfile文件,根据Dockfile文件中的Dockfile指令构建容器镜像。
步骤S303:对所述容器加载编译配置参数。
在一些实施例中,所述编译配置参数包括以下至少一种:编译依赖项;环境变量。在可能示例中,所述编译依赖项包括例如pyhton的依赖包,环境变量如Docker容器对应的go语言的环境变量等。需说明的是,在此,可以确定需要加载的编译配置参数的版本,以避免相关技术中的版本冲突的问题。
步骤S304:对所述容器配置待检查代码的代码访问路径及检查工具。
在一些实施例中,所述代码访问路径可用于供挂载路径指向目录的待检查代码至所述容器。在一些实施例中,所述检查工具如Fortify、Sonar、Coverity等。
具体的,图3方法中的容器形成所需要的镜像、编译配置参数、代码访问路径、检查工具等可与代码检查请求的请求参数匹配。示例性地,所述请求参数包括:待检查代码的代码语言类型、构建方式、编译指令、检查工具参数、及代码访问路径参数。
如图4所示,展示本公开一更具体实施例中代码检查环境构建的流程示意图。
在图4中,流程包括:
步骤S401:基于所述代码语言类型及构建方式,获取匹配的已构建的容器镜像;或者从镜像库获取匹配的容器镜像构建文件,并基于所述容器镜像构建文件建立容器镜像。
示例性地,所述容器镜像基于基础镜像构建,所述基础镜像或容器镜像获取自预设的镜像仓库。
步骤S402:运行所述容器镜像以形成容器。
步骤S403:对所述容器加载匹配于所述编译指令的编译配置参数。
步骤S404:对所述容器配置待检查代码的代码访问路径及检查工具;其中,所述代码访问路径匹配于所述访问径路参数,所述检查工具匹配于所述检查工具参数。
示例性地,可以基于所述代码访问路径参数,挂载待检查代码至所述容器。
示例性地,可以挂载匹配于所述检查工具参数的检查工具至所述容器,所述检查组件获取自预设的检查组件仓库。
在一些实施例中,所述的代码检查配置方法还包括:获取所述目标节点执行所述代码检查任务所得到的执行结果,并返回以响应所述代码检查请求。
在一些实施例中,所述代码检查环境由所述目标节点基于代码检查任务所传递的至少部分请求参数所创建。由此,在上述示例中,持续集成工具可通过发布携带上述请求参数的代码检查请求,并通过将对应代码检查任务调度到较为空闲的目标节点,以根据请求参数在目标节点获取镜像以形成容器,并加载对应请求参数的编译配置参数以及挂载对应的检查工具及根据挂载待检查代码,从而配置完成代码检查环境以执行代码检查任务,完成待检查代码。在可能示例中,以上方法可以通过在持续集成工具和服务器集群之间的一个代码检查环境构建层来实现。
如图5所示,展示本公开一实施例中代码检查环境构建层的架构示意图。
在图5中,所述代码检查环境构建层包括:基础镜像仓库、检查组件仓库、镜像构建模块和组件挂载模块。需说明的是,所述代码检查环境构建层是一种软件层面中的结构,其中各部分可以实现于同一物理设备(如服务器),或可能是分布在多个物理设备实现的。
例如,服务器集群的每个节点皆可以布置基础镜像仓库、检查组件仓库、镜像构建模块和组件挂载模块,以当其中某个节点被选择为目标节点时,目标节点可以根据代码检查请求形成代码检查任务,以根据请求参数完成代码检查环境的构建。或者,所述基础镜像仓库和检查组件仓库也可以设置在相对目标节点的远端,以通过与目标节点的通信来拉取基础Docker镜像及检查工具的代码扫描组件。
又例如,服务器集群包含至少一个中心管理节点,其负责管理其它节点,中心管理节点获取持续集成工具的代码检查请求(持续集成工具也可以位于中心管理节点),确定需要调度的目标节点,生成并发布相应的代码检查任务到目标节点。目标节点执行代码检查任务,构建代码检查环境并完成代码检查。
示例性地说明代码检查环境构建层中各个模块的功能。
所述基础镜像仓库可用于管理不同语言、不同构建方式的基础镜像或创建镜像的Dockerfile文件。
检查组件仓库可用于管理各种检查工具的代码扫描组件,如Fortify SCA、Sonar-scanner等。
镜像构建模块可用于接收持续集成工具的代码检查请求,根据代码语言、构建方式等参数,从基础镜像仓库拉取对应的镜像或Dockerfile;通过Docker指令构建镜像并启动容器,根据请求参数中的编译指令,加载编译依赖项、配置环境变量。
组件挂载模块可用于根据请求中的代码路径参数,挂载源代码到容器,以及根据请求中的检查工具参数,挂载检查组件仓库中的相应组件到容器,并完成输出配置;根据请求参数挂载源代码路径、挂载检查组件到容器并完成输出配置,如组件以服务存在,初始化与组件服务间的会话。
编译环境构建层可将代码检查任务调度到服务器集群中可用的目标节点。
如图6所示,展示基于图5实施例的架构执行代码检查流程的示意图。
流程具体包括:
A:持续集成工具发起代码检查请求,并下发代码的代码语言类型、构建方式、编译指令、检查工具、代码访问路径等参数;
B:代码检查环境构建层接收持续集成工具的代码检查请求参数,完成镜像构建、检查组件的挂载,具体包括:
B1:镜像构建模块根据请求中的代码语言类型、构建方式等参数,从基础镜像仓库拉取对应的Docker镜像或Dockerfile文件;
B2:镜像构建模块根据拉取的Docker镜像启动容器或者通过Docker指令构建镜像并启动容器,根据请求参数中的编译指令,加载编译依赖项、配置环境变量,如pyhton的依赖包、go语言的环境变量;
B3:组件挂载模块根据请求中的代码路径参数,挂载待检查的源代码到容器;
B4:组件挂载模块根据请求中的检查工具参数,挂载检查组件仓库中的相应检查工具组件到容器,并完成输出配置;
B5:代码检查环境构建层将检查任务调度到服务器集群的目标节点。
B6:目标节点完成检查,返回执行状态和结果到持续集成工具。
本公开实施例中,通过在持续集成工具与服务器集群间,基于基础镜像和容器构建代码检查环境,根据持续集成工具的请求参数,拉取基础镜像并挂载检查工具组件,动态配置所需的编译环境和容器,并将对应代码检查任务调度到服务器集群中的节点而不是特定的从服务器,屏蔽了不同检查工具、不同代码语言类型、不同构建方式对编译环境的依赖。
相比于相关技术,本公开实施例的优点在于:
1、在持续集成工具与服务器集群间动态配置所需的代码检查环境,屏蔽了不同检查工具、不同代码语言、不同构建方式对编译环境的依赖,可解决组件版本冲突,降低部署与运维难度。
2、将代码检查任务调度到服务器集群任一可用节点而不是特定的从服务器,提高了服务器集群的资源利用率。
本公开实施例中方案可能的应用场景,示例性地如下所示:
1.可应用于持续集成环境的代码检查,如代码错误、代码质量、代码安全等检查;
2.应用于研发云项目中的代码安全与代码质量检查,可屏蔽对编译环境的依赖,将检查任务调度到服务器集群任一可用节点。
本公开实施例中的方案在具体应用场景中具有极高的商业价值。比如,在持续集成环境或研发云平台中,可屏蔽了不同检查工具、不同代码语言、不同构建方式对编译环境的依赖,可解决组件版本冲突问题,提高服务器集群的资源利用率,降低部署与运维难度。
在更进一步的应用场景中,研发云平台可作为DevOps能力输出,依据本公开实施例中的代码检查方法可以形成流水线的代码扫描调度技术,可以更好的灵活调度客户资源、节约资源、降低客户成本,增强产品吸引力。
如图7所示,展示本公开一实施例中代码检查配置装置700的模块示意图。由于所述代码检查配置装置700的具体实现可以参考之前的代码检查配置方法实施例,因此此处不再对技术细节作重复赘述。
在图7中,所述代码检查配置装置700包括:
请求获取模块701,用于获取关于待检查代码的代码检查请求;其中,所述代码检查请求包含请求参数;
任务调度模块702,用于将对应所述代码检查请求的代码检查任务调度至服务器集群中的目标节点,以由所述目标节点利用代码检查环境执行所述代码检查任务;其中,所述代码检查环境基于所述请求参数所构建。
在一些实施例中,基于所述请求参数构建所述代码检查环境,包括:获取容器镜像;运行所述容器镜像以形成容器;对所述容器加载编译配置参数;对所述容器配置待检查代码的代码访问路径及检查工具。
在一些实施例中,所述请求参数包括:待检查代码的代码语言类型、构建方式、编译指令、检查工具参数、及代码访问路径参数;基于所述请求参数构建所述代码检查环境,包括:基于所述代码语言类型及构建方式,获取匹配的已构建的容器镜像;或者从镜像库获取匹配的容器镜像构建文件,并基于所述容器镜像构建文件建立容器镜像;运行所述容器镜像以形成容器;对所述容器加载匹配于所述编译指令的编译配置参数;对所述容器配置待检查代码的代码访问路径及检查工具;其中,所述代码访问路径匹配于所述访问径路参数,所述检查工具匹配于所述检查工具参数。
在一些实施例中,所述编译配置参数包括以下至少一种:编译依赖项;环境变量。
在一些实施例中,所述对所述容器配置待检查代码的代码访问路径及检查工具,包括:基于所述代码访问路径参数,挂载待检查代码至所述容器;挂载匹配于所述检查工具参数的检查工具至所述容器。
在一些实施例中,所述容器镜像基于基础镜像构建,所述基础镜像或容器镜像获取自预设的镜像仓库;和/或,所述检查组件获取自预设的检查组件仓库。
在一些实施例中,所述的代码检查配置装置还包括:结果返回模块,用于获取所述目标节点执行所述代码检查任务所得到的执行结果,并返回以响应所述代码检查请求。
需特别说明的是,在图7实施例中的各个功能模块,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件实现时,可以全部或部分地以程序指令产品的形式实现。程序指令产品包括一个或多个程序指令。在计算机上加载和执行程序指令指令时,全部或部分地产生按照本公开的流程或功能。计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。程序指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输。
并且,图7实施例所揭露的装置,可通过其它的模块划分方式实现。以上所表示的装置实施例仅仅是示意性的,例如所述模块的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个模块或模块可以结合或者可以动态到另一个***,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接于可以是通过一些接口,装置或模块的间接耦合或通信连接于,可以是电性或其它的形式。
另外,图7实施例中的各功能模块及子模块可以动态在一个处理部件中,也可以是各个模块单独物理存在,也可以两个或两个以上模块动态在一个部件中。上述动态的部件既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。上述动态的部件如果以软件功能模块的形式实现并执行为独立的产品销售或使用时,也可以存储在一个计算机可读存储介质中。该存储介质可以是只读存储器,磁盘或光盘等。
需特别说明的是,本公开上述实施例的流程图表示的流程或方法表示可以被理解为,表示包括一个或更多个用于实现特定逻辑功能或过程的步骤的可执行指令的代码的模块、片段或部分。并且本公开的优选实施方式的范围包括另外的实现,其中可以不按所示出或讨论的顺序,包括根据所涉及的功能按基本同时的方式或按相反的顺序,来执行功能。
例如,图2、图3、图4等实施例中的各个步骤的顺序可能可以在具体场景中加以变化,并非以上述表示为限。
如图8所示,展示本公开一实施例中计算机装置的结构示意图。
在一些实施例中,所述计算机装置用于装载实现前述方法实施例(例如图2、图3、图4等方法步骤)的程序指令。所述计算机装置具体可实现为服务器,如前述实施例中服务器集群中的服务器等,其可作为一个或多个节点的实现载体。
如图8所示,计算机装置800以通用计算设备的形式表现。计算机装置800的组件可以包括但不限于:上述至少一个处理单元810、上述至少一个存储单元820、连接不同***组件(包括存储单元820和处理单元810)的总线830。
其中,所述存储单元存储有程序代码,所述程序代码可以被所述处理单元810执行,使得计算机装置用于实现本公开上述实施例中所描述方法步骤。
在一些实施例中,存储单元820可以包括易失性存储单元,例如随机存取存储单元(RAM)8201和/或高速缓存存储单元8202,还可以进一步包括只读存储单元(ROM)8203。
在一些实施例中,存储单元820还可以包括具有一组(至少一个)程序模块8205的程序/实用工具8204,这样的程序模块8205包括但不限于:操执行***、一个或者多个应用程序、其它程序模块以及程序数据,这些示例中的每一个或某种组合中可能包括网络环境的实现。
在一些实施例中,总线830可以包括数据总线、地址总线和控制总线。
在一些实施例中,计算机装置800也可以与一个或多个外部设备900(例如键盘、指向设备、蓝牙设备等)通信,这种通信可以通过输入/输出(I/O)接口850进行。可选的,计算机装置800还包括显示单元840,其连接到输入/输出(I/O)接口850,用于进行显示。并且,计算机装置800还可以通过网络适配器860与一个或者多个网络(例如局域网(LAN),广域网(WAN)和/或公共网络,例如因特网)通信。如图所示,网络适配器860通过总线830与计算机装置800的其它模块通信。应当明白,尽管图中未示出,可以结合计算机装置800使用其它硬件和/或软件模块,包括但不限于:微代码、设备驱动器、冗余处理单元、外部磁盘驱动阵列、RAID***、磁带驱动器以及数据备份存储***等。
本公开的实施例中还可以提供计算机刻度存储介质,其可以包含程序代码,并可以在设备上运行,例如个人电脑上运行,以实现本公开上述方法实施例(如图2、图3、图4等)中的各个步骤及子步骤的执行。在本文件中,可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行***、装置或者器件使用或者与其结合使用。
所述程序代码可以采用一个或多个可读介质的任意组合。可读介质可以是可读信号介质或者可读存储介质。可读存储介质例如可以为但不限于电、磁、光、电磁、红外线、或半导体的***、装置或器件,或者任意以上的组合。可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。
计算机可读信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了可读程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。可读信号介质还可以是可读存储介质以外的任何可读介质,该可读介质可以发送、传播或者传输用于由指令执行***、装置或者器件使用或者与其结合使用的程序。
可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于无线、有线、光缆、RF等等,或者上述的任意合适的组合。
可以以一种或多种程序设计语言的任意组合来编写用于执行本公开操作的程序代码,所述程序设计语言包括面向对象的程序设计语言-诸如Java、C++等,还包括常规的过程式程序设计语言-诸如"C"语言或类似的程序设计语言。程序代码可以完全地在用户计算设备上执行、部分在用户计算设备上部分在远程计算设备上执行、或者完全在远程计算设备或服务器上执行。在涉及远程计算设备的情形中,远程计算设备可以通过任意种类的网络,包括局域网(LAN)或广域网(WAN),连接到用户计算设备,或者,可以连接到外部计算设备(例如利用因特网服务提供商来通过因特网连接)。
综上所述,本公开实施例中提供代码检查配置方法、装置及存储介质,通过获取关于待检查代码的代码检查请求;其中,所述代码检查请求包含请求参数;将对应所述代码检查请求的代码检查任务调度至服务器集群中的目标节点,以由所述目标节点利用代码检查环境执行所述代码检查任务;其中,所述代码检查环境基于所述请求参数所构建。本公开实施例中实现基于待检查代码检查需求相关的请求参数,对应在服务器集群所调度的目标节点灵活地构建适配的代码检查环境,不必受限于向特定的从服务器调度代码检查任务,既能屏蔽不同代码语言、不同构建方式、不同检查工具等差异,也能选择资源空闲节点以避免拥堵而提升效率。
上述实施例仅例示性说明本公开的原理及其功效,而非用于限制本公开。任何熟悉此技术的人士皆可在不违背本公开的精神及范畴下,对上述实施例进行修饰或改变。因此,举凡所属技术领域中具有通常知识者在未脱离本公开所揭示的精神与技术思想下所完成的一切等效修饰或改变,仍应由本公开的权利要求所涵盖。
Claims (10)
1.一种代码检查配置方法,其特征在于,包括:
获取关于待检查代码的代码检查请求;其中,所述代码检查请求包含请求参数;所述请求参数用于确定构建代码检查环境所需的配置;
将对应所述代码检查请求的代码检查任务调度至服务器集群中的目标节点,以由所述目标节点利用代码检查环境执行所述代码检查任务;其中,所述代码检查环境基于所述请求参数所构建;所述目标节点为所述服务器集群任一可用节点;
其中,所述代码检查请求来自持续集成工具;所述代码检查环境基于在容器中运行代码检查所需的依赖项和检查工具;
所述请求参数包括:待检查代码的代码语言类型、构建方式、编译指令、检查工具参数、代码访问路径参数;
基于所述请求参数构建所述代码检查环境,包括:
基于所述代码语言类型及构建方式,获取匹配的已构建的容器镜像;或者从镜像库获取匹配的容器镜像构建文件,并基于所述容器镜像构建文件建立容器镜像;
运行所述容器镜像以形成容器;
对所述容器加载匹配于所述编译指令的编译配置参数;
对所述容器配置待检查代码的代码访问路径及检查工具;其中,所述代码访问路径匹配于所述代码访问路径参数,所述检查工具匹配于所述检查工具参数;
在将对应所述代码检查请求的代码检查任务调度至服务器集群中的目标节点之前,所述代码检查配置方法,还包括:
根据负载均衡的资源利用策略从服务器集群中选择目标节点;基于不同服务器的资源利用均衡、服务器实现的节点数量的均衡以及代码检查数量和/或资源占用量的均衡,分配相应代码检查任务给所述目标节点。
2.根据权利要求1所述的代码检查配置方法,其特征在于,基于所述请求参数构建所述代码检查环境,包括:
获取容器镜像;
运行所述容器镜像以形成容器;
对所述容器加载编译配置参数;
对所述容器配置待检查代码的代码访问路径及检查工具。
3.根据权利要求1所述的代码检查配置方法,其特征在于,所述编译配置参数包括以下至少一种:编译依赖项;环境变量。
4.根据权利要求1所述的代码检查配置方法,其特征在于,所述对所述容器配置待检查代码的代码访问路径及检查工具,包括:
基于所述代码访问路径参数,挂载待检查代码至所述容器;
挂载匹配于所述检查工具参数的检查工具至所述容器。
5.根据权利要求1或2所述的代码检查配置方法,其特征在于,所述容器镜像基于基础镜像构建,所述基础镜像或容器镜像获取自预设的镜像仓库;和/或,检查组件获取自预设的检查组件仓库。
6.根据权利要求1所述的代码检查配置方法,其特征在于,还包括:获取所述目标节点执行所述代码检查任务所得到的执行结果,并返回以响应所述代码检查请求。
7.根据权利要求1所述的代码检查配置方法,其特征在于,所述代码检查环境由所述目标节点基于代码检查任务所传递的至少部分请求参数所创建。
8.一种代码检查配置装置,其特征在于,包括:
请求获取模块,用于获取关于待检查代码的代码检查请求;其中,所述代码检查请求包含请求参数;所述请求参数用于确定构建代码检查环境所需的配置;
任务调度模块,用于将对应所述代码检查请求的代码检查任务调度至服务器集群中的目标节点,以由所述目标节点利用代码检查环境执行所述代码检查任务;其中,所述代码检查环境基于所述请求参数所构建;所述目标节点为所述服务器集群任一可用节点;
其中,所述代码检查请求来自持续集成工具;所述代码检查环境基于在容器中运行代码检查所需的依赖项和检查工具;
所述请求参数包括:待检查代码的代码语言类型、构建方式、编译指令、检查工具参数、代码访问路径参数;
所述任务调度模块,还用于:基于所述请求参数构建所述代码检查环境;
所述任务调度模块,用于:基于所述代码语言类型及构建方式,获取匹配的已构建的容器镜像;或者从镜像库获取匹配的容器镜像构建文件,并基于所述容器镜像构建文件建立容器镜像;
运行所述容器镜像以形成容器;
对所述容器加载匹配于所述编译指令的编译配置参数;
对所述容器配置待检查代码的代码访问路径及检查工具;其中,所述代码访问路径匹配于所述代码访问路径参数,所述检查工具匹配于所述检查工具参数;
所述任务调度模块,还用于:根据负载均衡的资源利用策略从服务器集群中选择目标节点;基于不同服务器的资源利用均衡、服务器实现的节点数量的均衡以及代码检查数量和/或资源占用量的均衡,分配相应代码检查任务给所述目标节点。
9.一种计算机装置,其特征在于,包括:通信器、存储器及处理器;所述通信器用于与外部通信;所述存储器存储有程序指令;所述处理器用于运行所述程序指令以执行如权利要求1至7中任一项所述的代码检查配置方法。
10.一种计算机可读存储介质,其特征在于,存储有程序指令,所述程序指令被运行以执行如权利要求1至7中任一项所述的代码检查配置方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210405115.3A CN114756464B (zh) | 2022-04-18 | 2022-04-18 | 代码检查配置方法、装置及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210405115.3A CN114756464B (zh) | 2022-04-18 | 2022-04-18 | 代码检查配置方法、装置及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN114756464A CN114756464A (zh) | 2022-07-15 |
CN114756464B true CN114756464B (zh) | 2024-04-26 |
Family
ID=82331103
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210405115.3A Active CN114756464B (zh) | 2022-04-18 | 2022-04-18 | 代码检查配置方法、装置及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114756464B (zh) |
Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP3089037A1 (en) * | 2015-04-29 | 2016-11-02 | Areva NP SAS | Method for checking equivalence of code |
CN109358944A (zh) * | 2018-09-17 | 2019-02-19 | 深算科技(重庆)有限公司 | 深度学习分布式运算方法、装置、计算机设备及存储介质 |
CN109684215A (zh) * | 2018-12-25 | 2019-04-26 | 中国科学院电子学研究所苏州研究院 | 一种自动化软件***质量检查和快速迭代方法 |
EP3557463A1 (de) * | 2018-04-16 | 2019-10-23 | Siemens Aktiengesellschaft | Verfahren und ausführungsumgebung zum ausführen von programmcode auf einem feldgerät |
CN110609732A (zh) * | 2019-08-13 | 2019-12-24 | 平安普惠企业管理有限公司 | 应用程序部署方法、装置、计算机设备和存储介质 |
CN112084008A (zh) * | 2020-09-10 | 2020-12-15 | 浪潮云信息技术股份公司 | 一种基于容器技术快速部署云管***的方法 |
CN113467829A (zh) * | 2021-09-03 | 2021-10-01 | 广州嘉为科技有限公司 | 一种基于Docker的代码检查方法及代码检查服务器 |
CN113703730A (zh) * | 2021-08-30 | 2021-11-26 | 平安普惠企业管理有限公司 | 持续集成方法、装置、计算机设备及存储介质 |
-
2022
- 2022-04-18 CN CN202210405115.3A patent/CN114756464B/zh active Active
Patent Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP3089037A1 (en) * | 2015-04-29 | 2016-11-02 | Areva NP SAS | Method for checking equivalence of code |
EP3557463A1 (de) * | 2018-04-16 | 2019-10-23 | Siemens Aktiengesellschaft | Verfahren und ausführungsumgebung zum ausführen von programmcode auf einem feldgerät |
CN109358944A (zh) * | 2018-09-17 | 2019-02-19 | 深算科技(重庆)有限公司 | 深度学习分布式运算方法、装置、计算机设备及存储介质 |
CN109684215A (zh) * | 2018-12-25 | 2019-04-26 | 中国科学院电子学研究所苏州研究院 | 一种自动化软件***质量检查和快速迭代方法 |
CN110609732A (zh) * | 2019-08-13 | 2019-12-24 | 平安普惠企业管理有限公司 | 应用程序部署方法、装置、计算机设备和存储介质 |
CN112084008A (zh) * | 2020-09-10 | 2020-12-15 | 浪潮云信息技术股份公司 | 一种基于容器技术快速部署云管***的方法 |
CN113703730A (zh) * | 2021-08-30 | 2021-11-26 | 平安普惠企业管理有限公司 | 持续集成方法、装置、计算机设备及存储介质 |
CN113467829A (zh) * | 2021-09-03 | 2021-10-01 | 广州嘉为科技有限公司 | 一种基于Docker的代码检查方法及代码检查服务器 |
Non-Patent Citations (2)
Title |
---|
C++源代码漏洞静态扫描***的设计与实现;史洋洋;《中国优秀硕士学位论文全文数据库 (信息科技辑)》(第04期);I138-153 * |
浅谈企业软件代码质量管理;廖鹏举等;《信息***工程》;20200531(第05期);114-116 * |
Also Published As
Publication number | Publication date |
---|---|
CN114756464A (zh) | 2022-07-15 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US9678740B2 (en) | Migration mechanism | |
US9582330B2 (en) | Methods and system for distributing data to technical computing workers | |
CN111580861A (zh) | 用于计算机环境迁移的基于模式的人工智能计划器 | |
CN111527474B (zh) | 软件功能的动态交付 | |
US8332459B2 (en) | Federation of composite applications | |
US20080183799A1 (en) | System and method for collaborative hosting of applications, virtual machines, and data objects | |
Zhao et al. | Microservice based computational offloading framework and cost efficient task scheduling algorithm in heterogeneous fog cloud network | |
Zatsarinny et al. | Toward high performance solutions as services of research digital platform | |
CN111176818B (zh) | 分布式预测的方法、装置、***、电子设备及存储介质 | |
US11301226B2 (en) | Enterprise deployment framework with artificial intelligence/machine learning | |
CN116414518A (zh) | Kubernetes上的大数据的数据局部性 | |
US10530892B2 (en) | Processing request for multi-versioned service | |
US20210232438A1 (en) | Serverless lifecycle management dispatcher | |
CN114756464B (zh) | 代码检查配置方法、装置及存储介质 | |
CN109800060B (zh) | 云平台***、管理方法、设备及存储介质 | |
CN114860401B (zh) | 异构云桌面调度***、方法、服务***、装置及介质 | |
CN114169733A (zh) | 一种资源分配方法和装置 | |
Lopes et al. | Towards a High Performance Computing Scalable Implementation of Cyber Physical Systems. | |
US20230102645A1 (en) | Resource Reuse for Pipeline Workloads | |
CN113157436B (zh) | 资源请求分发方法、装置、服务器和存储介质 | |
Deng et al. | Modularizing variability and scalability concerns in distributed real-time and embedded systems with modeling tools and component middleware | |
CN115480878A (zh) | 一种容器部署方法及装置 | |
Hass et al. | Interactive Application Deployment Planning for Heterogeneous Computing Continuums | |
CN118093105A (zh) | 一种算法调度方法、装置、设备及存储介质 | |
von Laszewski et al. | e-Science project and experiment management with Microsoft Project |
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 |