一种运行环境搭建方法及装置、代码合入方法及系统与流程

文档序号:16466582发布日期:2019-01-02 22:49阅读:185来源:国知局
一种运行环境搭建方法及装置、代码合入方法及系统与流程

本发明涉及软件开发的持续集成领域,尤其涉及一种运行环境搭建方法及装置、代码合入方法及系统。



背景技术:

随着敏捷开发模式的深入人心,软件行业的快速迭代、持续集成扮演着越来越重要的角色,开源社区出现了一种非常优秀的持续集成框架,它由代码托管评审工具、代码准入工具、任务分发框架、持续集成引擎等模块组成,通过制度化的流程保证保障了提交代码的代码质量,其核心是支持异地协作及多人并发修改代码及提交同行评审,并进行代码合入前的多级验证,最大程度的保证了软件质量。

参见图1,图1为现有技术提供的一种持续集成系统的示意图,软件开发者提交代码变更请求到代码托管评审工具后,代码托管评审工具会产生代码变更请求事件流,代码准入工具侦测到事件流后进行预处理,再通过任务分发框架分发任务到持续集成引擎,持续集成引擎再将任务分配到任务执行节点进行业务验证,业务验证完成后执行结果再沿原路返回给代码托管评审工具,最终完成代码的入库。

现有的持续集成的运行环境(包括代码准入工具、任务分发框架、持续集成引擎、任务执行节点)都是本地的硬件资源,运维成本高、扩展性差、并发量低、资源利用率低,导致整体的持续集成的反馈周期变长,降低了软件开发效率。



技术实现要素:

本发明实施例主要解决的技术问题是,提供一种运行环境搭建方法及装置、代码合入方法及系统,解决现有技术中,现有的持续集成的运行环境都是本地的硬件资源,运维成本高、扩展性差、并发量低、资源利用率低,导致整体的持续集成的反馈周期变长,软件开发效率低下的问题。

为解决上述技术问题,本发明实施例提供一种运行环境搭建方法,包括:

将代码准入工具、任务分发框架、持续集成引擎封装成通道容器,并部署在云端集群资源池中;

将任务执行节点部署在云端集群资源池中;

将通道容器和云端集群资源池进行对接;

通道容器用于在监听到代码托管评审工具发生代码库变更事件,并对代码库变更事件进行预设处理之后,分发测试任务给任务执行节点;

任务执行节点用于根据测试任务对云端集群资源池中的资源进行调度,并执行测试,并将测试结果通过通道容器返回给代码托管评审工具。

为解决上述技术问题,本发明实施例提供一种代码合入方法,包括:

代码托管评审工具在接收到用户提交的代码后,生成代码库变更事件;

通道容器在监听到代码托管评审工具发生代码库变更事件,并对代码库变更事件进行预设处理之后,分发测试任务给任务执行节点;通道容器由代码准入工具、任务分发框架、持续集成引擎封装而成,并部署在云端集群资源池中;任务执行节点部署在云端集群资源池中;通道容器与云端集群资源池对接;

任务执行节点根据测试任务对云端集群资源池中的资源进行调度,并执行测试,并将测试结果通过通道容器返回给代码托管评审工具。

为解决上述技术问题,本发明实施例提供一种运行环境搭建装置,包括:

封装模块,用于将代码准入工具、任务分发框架、持续集成引擎封装成通道容器;

第一部署模块,用于将通道容器部署在云端集群资源池中;

第二部署模块,用于将任务执行节点部署在云端集群资源池中;

对接模块,用于将通道容器和云端集群资源池进行对接;

其中,通道容器用于在监听到代码托管评审工具发生代码库变更事件,并对代码库变更事件进行预设处理之后,分发测试任务给任务执行节点;

任务执行节点用于根据测试任务对云端集群资源池中的资源进行调度,并执行测试,并将测试结果通过通道容器返回给代码托管评审工具。

为解决上述技术问题,本发明实施例提供一种代码合入系统,包括:

代码托管评审工具,用于在接收到用户提交的代码后,生成代码库变更事件;

通道容器,用于在监听到代码托管评审工具发生代码库变更事件,并对代码库变更事件进行预设处理之后,分发测试任务给任务执行节点;通道容器由代码准入工具、任务分发框架、持续集成引擎封装而成,并部署在云端集群资源池中;任务执行节点部署在云端集群资源池中;通道容器与云端集群资源池对接;

任务执行节点,用于根据测试任务对云端集群资源池中的资源进行调度,并执行测试,并将测试结果通过通道容器返回给代码托管评审工具。

为解决上述技术问题,本发明实施例还提供一种计算机存储介质,计算机存储介质中存储有计算机可执行指令,计算机可执行指令用于执行前述的运行环境搭建方法及代码合入方法。

本发明的有益效果是:

根据本发明实施例提供的一种运行环境搭建方法及装置、代码合入方法及系统,该运行环境搭建方法包括:将代码准入工具、任务分发框架、持续集成引擎封装成通道容器,并部署在云端集群资源池中;将任务执行节点部署在云端集群资源池中;将通道容器和云端集群资源池进行对接;通道容器用于在监听到代码托管评审工具发生代码库变更事件,并对代码库变更事件进行预设处理之后,分发测试任务给任务执行节点;任务执行节点用于根据测试任务对云端集群资源池中的资源进行调度,并执行测试,并将测试结果通过通道容器返回给代码托管评审工具。采用上述方案,将代码准入工具、任务分发框架、持续集成引擎封装成通道容器,并部署在云端集群资源池中,以及将任务执行节点部署在云端集群资源池中,省去了单独部署各个组件的繁琐事宜,降低了运维成本,缩短了持续集成的反馈速度,提高了软件开发效率,利用云端的集群资源,通过资源的弹性伸缩、水平扩展,最大程度的提高了资源的利用率。

附图说明

图1为现有技术提供的一种持续集成系统的示意图;

图2为本发明实施例一提供的一种运行环境搭建方法的流程图;

图3为本发明各个实施例提供的一种持续集成系统的示意图;

图4为本发明各个实施例提供的一种代码合入的示意图;

图5为本发明各个实施例提供的一种参数以插件方式配置的示意图;

图6为本发明各个实施例提供的一种代码合入完整流程的示意图;

图7为本发明实施例二提供的一种代码合入方法的流程图;

图8为本发明实施例三提供的一种运行环境搭建装置的示意图;

图9为本发明实施例四提供的一种代码合入系统的示意图。

具体实施方式

下面通过具体实施方式结合附图对本发明实施例作进一步详细说明。

实施例一

本实施例提供一种运行环境搭建方法,该方法是基于云端持续集成的运行环境的搭建方法,请参见图2,图2为本实施例提供的一种运行环境搭建方法的流程图,该方法包括以下步骤:

s201:将代码准入工具、任务分发框架、持续集成引擎封装成通道容器,并部署在云端集群资源池中;

将代码准入工具、任务分发框架、持续集成引擎进行容器化的封装,封装成通道容器,省去了单独部署各个组件的繁琐事宜,后续用户在使用时,只需要从仓库中导出容器镜像,运行容器即可。

s202:将任务执行节点部署在云端集群资源池中;

s203:将通道容器和云端集群资源池进行对接;

由此便能实现云内的通道容器对云内的任务执行节点的按需调用,例如可以使用云端集群资源池中的cpu(centralprocessingunit,中央处理器)、内存、存储等。

参见图3,图3为本实施例提供的一种持续集成系统的示意图;

图3中,代码准入工具、任务分发框架、持续集成引擎封装成通道容器并部署在云端集群资源池中;任务执行节点部署在云端集群资源池中;通道容器和云端集群资源池对接;各个组件的参数可以在持续集成引擎界面采用参数配置插件进行修改配置。

代码托管评审工具发生代码库变更事件之后,代码库变更事件被传入到通道容器、任务执行节点中进行处理。

其中,通道容器用于在监听到代码托管评审工具发生代码库变更事件,并对代码库变更事件进行预设处理之后,分发测试任务给任务执行节点;

其中,代码托管评审工具在接收到用户提交的代码后,生成代码库变更事件;

在监听到代码托管评审工具发生代码库变更事件,并对代码库变更事件进行预设处理之后,分发测试任务给任务执行节点包括:

代码准入工具在监听到代码托管评审工具发生代码库变更事件之后,准备临时变更代码库以供后续测试,并通过任务分发框架给持续集成引擎分发测试任务;持续集成引擎将测试任务分发到任务执行节点。

其中,代码准入工具的zuulmerger(代码准入工具合并)和httpd(apache超文本传输协议服务器的主程序)准备临时变更代码库以供后续测试,并通过gearmanserver(任务分发框架服务器)给持续集成引擎分发测试任务;

任务执行节点用于根据测试任务对云端集群资源池中的资源进行调度,并执行测试,并将测试结果通过通道容器返回给代码托管评审工具;

根据测试任务对云端集群资源池中的资源进行调度,并执行测试,并将测试结果通过通道容器返回给代码托管评审工具包括:

任务执行节点根据测试任务对云端集群资源池中的资源进行调度,并从代码准入工具下载临时变更代码库,并执行测试,并将测试结果依次通过持续集成引擎、任务分发框架、代码准入工具返回给代码托管评审工具形成闭环,实现代码合入;

具体的,从代码准入工具的httpd下载临时变更代码库。

可选的,该运行环境搭建方法还包括:在持续集成引擎的界面中设置参数配置功能,参数配置功能用于在将基于云端持续集成的运行环境搭建好之后、后续用户在使用该运行环境时,根据用户操作对代码托管评审工具、和/或代码准入工具、和/或任务分发框架、和/或持续集成引擎、和/或任务执行节点的参数进行配置;

其中,参数包括代码库的用户名、地址等;

该参数配置功能可以以插件形式实现;

由于系统中的各个关键组件均部署在云端集群资源池中,也即各个关键组件均运行在云内,各组件有参数需要变更时,就需要进入云端集群资源池进行修改,这势必会给云端集群资源池带来安全隐患,另外由于云端权限控制等原因,用户一般是没有权限进入云端集群资源池的,本实施例的方案将各个组件的参数集成到持续集成引擎的访问界面中,用户可以直接在浏览器端,通过持续集成引擎界面进行参数的修改配置,以插件形式配置管理,方便了用户操作,同时保证了云端集群资源池的安全。

在通过上述方案搭建好基于云端持续集成的运行环境之后,用户可以使用上述的运行环境进行代码合入。

参见图4,图4为本实施例提供的一种代码合入的示意图;

图4中,zuul(代码准入工具)包括zuulserver(代码准入工具服务器)、zuulmerger和httpd;

zuul、gearmanserver、jenkinsmaster封装成通道容器,将该通道容器记为jenkinsmasterdocker(持续集成引擎容器),并部署在mesosagent(云端集群资源池)中;

jenkinsmaster中集成有jenkinsgearmanplugin(插件);

jenkinsslave部署在mesosagent中;

jenkinsmasterdocker与jenkinsslave对接;

可以在jenkinsmaster(持续集成引擎)的访问界面采用参数配置插件对各个组件的参数进行修改配置;

参见图5,图5为本实施例提供的一种参数以插件方式配置的示意图;

示例性的,针对a项目提交了代码,生成了代码库,该代码库与前一个项目的代码库不同,a项目需要进行单元测试,在配置参数时,对参数进行修改且配置为joba的名称。

图4提供的代码合入包括以下步骤:

第一步:gerrit(代码托管评审工具)在接收到用户提交的代码后,生成代码库变更事件;

第二步:zuulserver侦听到项目gerrit代码库变更事件;

第三步:zuulmerger和httpd准备临时变更代码库供后续测试;

第四步:zuul通过gearmanserver给jenkinsmaster分发测试任务;

具体的,gearmanserver将测试任务的信息分发给集成在jenkinsmaster中的jenkinsgearmanplugin;

第五步:jenkinsmaster分发测试任务到jenkinsslave(任务执行节点);

第六步:jenkinsslave从zuulmerger和httpd下载临时变更代码库执行测试;

在测试完成后,将测试结果逆向返回给gerrit形成闭环,也即jenkinsslave将测试结果依次通过jenkinsmaster、gearman(任务分发框架)、zuul返回给gerrit,实现代码合入;

图4中,示出了发生两个代码库变更事件,每个代码库变更事件对应不同的jenkinsslave。

参见图6,图6为本实施例提供的一种代码合入完整流程的示意图;

图6中,云端一级ci(continuousintegration,持续集成)、云端二级ci中均部署有jenkinsmasterdocker和jenkinsslave;

首先提交代码到云端一级ci,云端一级ci进行检查代码质量、编码规范、代码编译、静态检查、漏洞扫描、单元测试等工作,若通过,则进行人工评审代码;若不通过,则需修复代码后重新提交到云端一级ci;

人工评审代码通过后,提交到云端二级ci,云端二级ci进行功能测试;若人工评审代码不通过,则需修复代码后重新提交到云端一级ci;

云端二级ci进行功能测试通过后,则代码入库,若云端二级ci进行功能测试不通过,则需修复代码后重新提交到云端一级ci。

通过本实施例的实施,将代码准入工具、任务分发框架、持续集成引擎封装成通道容器,并部署在云端集群资源池中,以及将任务执行节点部署在云端集群资源池中,省去了单独部署各个组件的繁琐事宜,降低了运维成本,缩短了持续集成的反馈速度,提高了软件开发效率,利用云端的集群资源,通过资源的弹性伸缩、水平扩展,最大程度的提高了资源的利用率。

实施例二

本实施例提供一种代码合入方法,在通过实施例一搭建好基于云端持续集成的运行环境之后,便可以使用该运行环境进行代码合入,请参见图7,图7为本实施例提供的一种代码合入方法的流程图,该代码合入方法包括以下步骤:

s701:代码托管评审工具在接收到用户提交的代码后,生成代码库变更事件;

s702:通道容器在监听到代码托管评审工具发生代码库变更事件,并对代码库变更事件进行预设处理之后,分发测试任务给任务执行节点;通道容器由代码准入工具、任务分发框架、持续集成引擎封装而成,并部署在云端集群资源池中;任务执行节点部署在云端集群资源池中;通道容器与云端集群资源池对接;

将代码准入工具、任务分发框架、持续集成引擎进行容器化的封装,封装成通道容器,省去了单独部署各个组件的繁琐事宜,后续用户在使用时,只需要从仓库中导出容器镜像,运行容器即可。

由此便能实现云内的通道容器对云内的任务执行节点的按需调用,例如可以使用云端集群资源池中的cpu、内存、存储等。

参见图3,图3为本实施例提供的一种持续集成系统的示意图;

图3中,代码准入工具、任务分发框架、持续集成引擎封装成通道容器并部署在云端集群资源池中;任务执行节点部署在云端集群资源池中;通道容器和云端集群资源池对接;各个组件的参数可以在持续集成引擎界面采用参数配置插件进行修改配置。

代码托管评审工具发生代码库变更事件之后,代码库变更事件被传入到通道容器、任务执行节点中进行处理。

s702在监听到代码托管评审工具发生代码库变更事件,并对代码库变更事件进行预设处理之后,分发测试任务给任务执行节点包括:

代码准入工具在监听到代码托管评审工具发生代码库变更事件之后,准备临时变更代码库以供后续测试,并通过任务分发框架给持续集成引擎分发测试任务;持续集成引擎将测试任务分发到任务执行节点。

其中,代码准入工具的zuulmerger和httpd准备临时变更代码库以供后续测试,并通过gearmanserver给持续集成引擎分发测试任务。

s703:任务执行节点根据测试任务对云端集群资源池中的资源进行调度,并执行测试,并将测试结果通过通道容器返回给代码托管评审工具;

s703根据测试任务对云端集群资源池中的资源进行调度,并执行测试,并将测试结果通过通道容器返回给代码托管评审工具包括:

任务执行节点根据测试任务对云端集群资源池中的资源进行调度,并从代码准入工具下载临时变更代码库,并执行测试,并将测试结果依次通过持续集成引擎、任务分发框架、代码准入工具返回给代码托管评审工具形成闭环,实现代码合入;

具体的,从代码准入工具的httpd下载临时变更代码库。

可选的,s702通道容器在监听到代码托管评审工具发生代码库变更事件之前,还包括:

在持续集成引擎的界面接收用户操作,根据用户操作对代码托管评审工具、和/或代码准入工具、和/或任务分发框架、和/或持续集成引擎、和/或任务执行节点的参数进行配置。

其中,参数包括代码库的用户名、地址等;

可选的,在持续集成引擎的界面接收用户操作之前,还包括:

接收用户输入的账号和密码;

将账号和密码、与预设的账号和密码进行匹配;

若匹配通过,则进入在持续集成引擎的界面接收用户操作的步骤。

由于系统中的各个关键组件均部署在云端集群资源池中,也即各个关键组件均运行在云内,各组件有参数需要变更时,就需要进入云端集群资源池进行修改,这势必会给云端集群资源池带来安全隐患,另外由于云端权限控制等原因,用户一般是没有权限进入云端集群资源池的,本实施例的方案将各个组件的参数集成到持续集成引擎的访问界面中,用户可以直接在浏览器端,通过持续集成引擎界面进行参数的修改配置,以插件形式配置管理,方便了用户操作,同时保证了云端集群资源池的安全。

参见图4,图4为本实施例提供的一种代码合入的示意图;

图4中,zuul包括zuulserver、zuulmerger和httpd;

zuul、gearmanserver、jenkinsmaster封装成通道容器,将该通道容器记为jenkinsmasterdocker,并部署在mesosagent中;

jenkinsmaster中集成有jenkinsgearmanplugin(插件);

jenkinsslave部署在mesosagent中;

jenkinsmasterdocker与jenkinsslave对接;

可以在jenkinsmaster的访问界面采用参数配置插件对各个组件的参数进行修改配置;

参见图5,图5为本实施例提供的一种参数以插件方式配置的示意图;

示例性的,针对a项目提交了代码,生成了代码库,该代码库与前一个项目的代码库不同,a项目需要进行单元测试,在配置参数时,对参数进行修改且配置为joba的名称。

图4提供的代码合入包括以下步骤:

第一步:gerrit在接收到用户提交的代码后,生成代码库变更事件;

第二步:zuulserver侦听到项目gerrit代码库变更事件;

第三步:zuulmerger和httpd准备临时变更代码库供后续测试;

第四步:zuul通过gearmanserver给jenkinsmaster分发测试任务;

具体的,gearmanserver将测试任务的信息分发给集成在jenkinsmaster中的jenkinsgearmanplugin;

第五步:jenkinsmaster分发测试任务到jenkinsslave;

第六步:jenkinsslave从zuulmerger和httpd下载临时变更代码库执行测试;

在测试完成后,将测试结果逆向返回给gerrit形成闭环,也即jenkinsslave将测试结果依次通过jenkinsmaster、gearman、zuul返回给gerrit,实现代码合入;

图4中,示出了发生两个代码库变更事件,每个代码库变更事件对应不同的jenkinsslave。

参见图6,图6为本实施例提供的一种代码合入完整流程的示意图;

图6中,云端一级ci、云端二级ci中均部署有jenkinsmasterdocker和jenkinsslave;

首先提交代码到云端一级ci,云端一级ci进行检查代码质量、编码规范、代码编译、静态检查、漏洞扫描、单元测试等工作,若通过,则进行人工评审代码;若不通过,则需修复代码后重新提交到云端一级ci;

人工评审代码通过后,提交到云端二级ci,云端二级ci进行功能测试;若人工评审代码不通过,则需修复代码后重新提交到云端一级ci;

云端二级ci进行功能测试通过后,则代码入库,若云端二级ci进行功能测试不通过,则需修复代码后重新提交到云端一级ci。

通过本实施例的实施,将代码准入工具、任务分发框架、持续集成引擎封装成通道容器,并部署在云端集群资源池中,以及将任务执行节点部署在云端集群资源池中,省去了单独部署各个组件的繁琐事宜,降低了运维成本,缩短了持续集成的反馈速度,提高了软件开发效率,利用云端的集群资源,通过资源的弹性伸缩、水平扩展,最大程度的提高了资源的利用率。

实施例三

本实施例提供一种运行环境搭建装置,请参见图8,图8为本实施例提供的一种运行环境搭建装置的示意图,该运行环境搭建装置包括:

封装模块801,用于将代码准入工具、任务分发框架、持续集成引擎封装成通道容器;

将代码准入工具、任务分发框架、持续集成引擎进行容器化的封装,封装成通道容器,省去了单独部署各个组件的繁琐事宜,后续用户在使用时,只需要从仓库中导出容器镜像,运行容器即可。

第一部署模块802,用于将通道容器部署在云端集群资源池中;

第二部署模块803,用于将任务执行节点部署在云端集群资源池中;

在一种实施方式中,第一部署模块802和第二部署模块803可以为同一个模块。

对接模块804,用于将通道容器和云端集群资源池进行对接;

由此便能实现云内的通道容器对云内的任务执行节点的按需调用,例如可以使用云端集群资源池中的cpu、内存、存储等。

参见图3,图3为本实施例提供的一种持续集成系统的示意图;

图3中,代码准入工具、任务分发框架、持续集成引擎封装成通道容器并部署在云端集群资源池中;任务执行节点部署在云端集群资源池中;通道容器和云端集群资源池对接;各个组件的参数可以在持续集成引擎界面采用参数配置插件进行修改配置。

代码托管评审工具发生代码库变更事件之后,代码库变更事件被传入到通道容器、任务执行节点中进行处理。

其中,通道容器用于在监听到代码托管评审工具发生代码库变更事件,并对代码库变更事件进行预设处理之后,分发测试任务给任务执行节点;

其中,代码托管评审工具在接收到用户提交的代码后,生成代码库变更事件;

在监听到代码托管评审工具发生代码库变更事件,并对代码库变更事件进行预设处理之后,分发测试任务给任务执行节点包括:

代码准入工具在监听到代码托管评审工具发生代码库变更事件之后,准备临时变更代码库以供后续测试,并通过任务分发框架给持续集成引擎分发测试任务;持续集成引擎将测试任务分发到任务执行节点。

其中,代码准入工具的zuulmerger和httpd准备临时变更代码库以供后续测试,并通过gearmanserver给持续集成引擎分发测试任务。

任务执行节点用于根据测试任务对云端集群资源池中的资源进行调度,并执行测试,并将测试结果通过通道容器返回给代码托管评审工具;

根据测试任务对云端集群资源池中的资源进行调度,并执行测试,并将测试结果通过通道容器返回给代码托管评审工具包括:

任务执行节点根据测试任务对云端集群资源池中的资源进行调度,并从代码准入工具下载临时变更代码库,并执行测试,并将测试结果依次通过持续集成引擎、任务分发框架、代码准入工具返回给代码托管评审工具形成闭环,实现代码合入;

具体的,从代码准入工具的httpd下载临时变更代码库。

可选的,该运行环境搭建装置还包括:设置模块805,用于在持续集成引擎的界面中设置参数配置功能,参数配置功能用于根据用户操作对代码托管评审工具、和/或代码准入工具、和/或任务分发框架、和/或持续集成引擎、和/或任务执行节点的参数进行配置。

其中,参数包括代码库的用户名、地址等;

该参数配置功能可以以插件形式实现;

由于系统中的各个关键组件均部署在云端集群资源池中,也即各个关键组件均运行在云内,各组件有参数需要变更时,就需要进入云端集群资源池进行修改,这势必会给云端集群资源池带来安全隐患,另外由于云端权限控制等原因,用户一般是没有权限进入云端集群资源池的,本实施例的方案将各个组件的参数集成到持续集成引擎的访问界面中,用户可以直接在浏览器端,通过持续集成引擎界面进行参数的修改配置,以插件形式配置管理,方便了用户操作,同时保证了云端集群资源池的安全。

在通过上述方案搭建好基于云端持续集成的运行环境之后,用户可以使用上述的运行环境进行代码合入。

参见图4,图4为本实施例提供的一种代码合入的示意图;

图4中,zuul包括zuulserver、zuulmerger和httpd;

zuul、gearmanserver、jenkinsmaster封装成通道容器,将该通道容器记为jenkinsmasterdocker,并部署在mesosagent中;

jenkinsmaster中集成有jenkinsgearmanplugin(插件);

jenkinsslave部署在mesosagent中;

jenkinsmasterdocker与jenkinsslave对接;

可以在jenkinsmaster的访问界面采用参数配置插件对各个组件的参数进行修改配置;

参见图5,图5为本实施例提供的一种参数以插件方式配置的示意图;

示例性的,针对a项目提交了代码,生成了代码库,该代码库与前一个项目的代码库不同,a项目需要进行单元测试,在配置参数时,对参数进行修改且配置为joba的名称。

图4提供的代码合入包括以下步骤:

第一步:gerrit在接收到用户提交的代码后,生成代码库变更事件;

第二步:zuulserver侦听到项目gerrit代码库变更事件;

第三步:zuulmerger和httpd准备临时变更代码库供后续测试;

第四步:zuul通过gearmanserver给jenkinsmaster分发测试任务;

具体的,gearmanserver将测试任务的信息分发给集成在jenkinsmaster中的jenkinsgearmanplugin;

第五步:jenkinsmaster分发测试任务到jenkinsslave;

第六步:jenkinsslave从zuulmerger和httpd下载临时变更代码库执行测试;

在测试完成后,将测试结果逆向返回给gerrit形成闭环,也即jenkinsslave将测试结果依次通过jenkinsmaster、gearman、zuul返回给gerrit,实现代码合入;

图4中,示出了发生两个代码库变更事件,每个代码库变更事件对应不同的jenkinsslave。

参见图6,图6为本实施例提供的一种代码合入完整流程的示意图;

图6中,云端一级ci、云端二级ci中均部署有jenkinsmasterdocker和jenkinsslave;

首先提交代码到云端一级ci,云端一级ci进行检查代码质量、编码规范、代码编译、静态检查、漏洞扫描、单元测试等工作,若通过,则进行人工评审代码;若不通过,则需修复代码后重新提交到云端一级ci;

人工评审代码通过后,提交到云端二级ci,云端二级ci进行功能测试;若人工评审代码不通过,则需修复代码后重新提交到云端一级ci;

云端二级ci进行功能测试通过后,则代码入库,若云端二级ci进行功能测试不通过,则需修复代码后重新提交到云端一级ci。

通过本实施例的实施,将代码准入工具、任务分发框架、持续集成引擎封装成通道容器,并部署在云端集群资源池中,以及将任务执行节点部署在云端集群资源池中,省去了单独部署各个组件的繁琐事宜,降低了运维成本,缩短了持续集成的反馈速度,提高了软件开发效率,利用云端的集群资源,通过资源的弹性伸缩、水平扩展,最大程度的提高了资源的利用率。

实施例四

本实施例提供一种代码合入系统,在通过实施例三搭建好基于云端持续集成的运行环境之后,便可以使用该运行环境进行代码合入,请参见图9,图9为本实施例提供的一种代码合入系统的示意图,该代码合入系统包括:

代码托管评审工具901,用于在接收到用户提交的代码后,生成代码库变更事件;

通道容器902,用于在监听到代码托管评审工具901发生代码库变更事件,并对代码库变更事件进行预设处理之后,分发测试任务给任务执行节点903;通道容器902由代码准入工具9021、任务分发框架9022、持续集成引擎9023封装而成,并部署在云端集群资源池中;任务执行节点903部署在云端集群资源池中;通道容器902与云端集群资源池对接;

将代码准入工具9021、任务分发框架9022、持续集成引擎9023进行容器化的封装,封装成通道容器902,省去了单独部署各个组件的繁琐事宜,后续用户在使用时,只需要从仓库中导出容器镜像,运行容器即可。

由此便能实现云内的通道容器902对云内的任务执行节点903的按需调用,例如可以使用云端集群资源池中的cpu、内存、存储等。

参见图3,图3为本实施例提供的一种持续集成系统的示意图;

图3中,代码准入工具9021、任务分发框架9022、持续集成引擎9023封装成通道容器902并部署在云端集群资源池中;任务执行节点903部署在云端集群资源池中;通道容器902和云端集群资源池对接;各个组件的参数可以在持续集成引擎9023界面采用参数配置插件进行修改配置。

代码托管评审工具901发生代码库变更事件之后,代码库变更事件被传入到通道容器902、任务执行节点903中进行处理。

代码准入工具9021用于在监听到代码托管评审工具901发生代码库变更事件之后,准备临时变更代码库以供后续测试,并通过任务分发框架9022给持续集成引擎9023分发测试任务;持续集成引擎9023将测试任务分发到任务执行节点903。

其中,代码准入工具9021的zuulmerger和httpd准备临时变更代码库以供后续测试,并通过gearmanserver给持续集成引擎9023分发测试任务。

任务执行节点903,用于根据测试任务对云端集群资源池中的资源进行调度,并执行测试,并将测试结果通过通道容器902返回给代码托管评审工具901。

任务执行节点903用于根据测试任务对云端集群资源池中的资源进行调度,并从代码准入工具9021下载临时变更代码库,并执行测试,并将测试结果依次通过持续集成引擎9023、任务分发框架9022、代码准入工具9021返回给代码托管评审工具901形成闭环,实现代码合入;

具体的,从代码准入工具9021的httpd下载临时变更代码库。

可选的,持续集成引擎9023还用于通道容器902在监听到代码托管评审工具901发生代码库变更事件之前,在持续集成引擎9023的界面接收用户操作,根据用户操作对代码托管评审工具901、和/或代码准入工具9021、和/或任务分发框架9022、和/或持续集成引擎9023、和/或任务执行节点903的参数进行配置。

其中,参数包括代码库的用户名、地址等;

可选的,持续集成引擎9023还用于在持续集成引擎9023的界面接收用户操作之前,接收用户输入的账号和密码;将账号和密码、与预设的账号和密码进行匹配;若匹配通过,则进入在持续集成引擎9023的界面接收用户操作的步骤。

由于系统中的各个关键组件均部署在云端集群资源池中,也即各个关键组件均运行在云内,各组件有参数需要变更时,就需要进入云端集群资源池进行修改,这势必会给云端集群资源池带来安全隐患,另外由于云端权限控制等原因,用户一般是没有权限进入云端集群资源池的,本实施例的方案将各个组件的参数集成到持续集成引擎9023的访问界面中,用户可以直接在浏览器端,通过持续集成引擎9023界面进行参数的修改配置,以插件形式配置管理,方便了用户操作,同时保证了云端集群资源池的安全。

参见图4,图4为本实施例提供的一种代码合入的示意图;

图4中,zuul9021包括zuulserver、zuulmerger和httpd;

zuul9021、gearmanserver、jenkinsmaster9023封装成通道容器902,将该通道容器902记为jenkinsmasterdocker,并部署在mesosagent中;

jenkinsmaster9023中集成有jenkinsgearmanplugin(插件);

jenkinsslave903部署在mesosagent中;

jenkinsmasterdocker与jenkinsslave903对接;

可以在jenkinsmaster9023的访问界面采用参数配置插件对各个组件的参数进行修改配置;

参见图5,图5为本实施例提供的一种参数以插件方式配置的示意图;

示例性的,针对a项目提交了代码,生成了代码库,该代码库与前一个项目的代码库不同,a项目需要进行单元测试,在配置参数时,对参数进行修改且配置为joba的名称。

图4提供的代码合入包括以下步骤:

第一步:gerrit901在接收到用户提交的代码后,生成代码库变更事件;

第二步:zuulserver侦听到项目gerrit901代码库变更事件;

第三步:zuulmerger和httpd准备临时变更代码库供后续测试;

第四步:zuul9021通过gearmanserver给jenkinsmaster9023分发测试任务;

具体的,gearmanserver将测试任务的信息分发给集成在jenkinsmaster9023中的jenkinsgearmanplugin;

第五步:jenkinsmaster9023分发测试任务到jenkinsslave903;

第六步:jenkinsslave903从zuulmerger和httpd下载临时变更代码库执行测试;

在测试完成后,将测试结果逆向返回给gerrit901形成闭环,也即jenkinsslave903将测试结果依次通过jenkinsmaster9023、gearman9022、zuul9021返回给gerrit901,实现代码合入;

图4中,示出了发生两个代码库变更事件,每个代码库变更事件对应不同的jenkinsslave903。

参见图6,图6为本实施例提供的一种代码合入完整流程的示意图;

图6中,云端一级ci、云端二级ci中均部署有jenkinsmasterdocker和jenkinsslave903;

首先提交代码到云端一级ci,云端一级ci进行检查代码质量、编码规范、代码编译、静态检查、漏洞扫描、单元测试等工作,若通过,则进行人工评审代码;若不通过,则需修复代码后重新提交到云端一级ci;

人工评审代码通过后,提交到云端二级ci,云端二级ci进行功能测试;若人工评审代码不通过,则需修复代码后重新提交到云端一级ci;

云端二级ci进行功能测试通过后,则代码入库,若云端二级ci进行功能测试不通过,则需修复代码后重新提交到云端一级ci。

通过本实施例的实施,将代码准入工具9021、任务分发框架9022、持续集成引擎9023封装成通道容器902,并部署在云端集群资源池中,以及将任务执行节点903部署在云端集群资源池中,省去了单独部署各个组件的繁琐事宜,降低了运维成本,缩短了持续集成的反馈速度,提高了软件开发效率,利用云端的集群资源,通过资源的弹性伸缩、水平扩展,最大程度的提高了资源的利用率。

显然,本领域的技术人员应该明白,上述本发明实施例的各模块或各步骤可以用通用的计算系统来实现,它们可以集中在单个的计算系统上,或者分布在多个计算系统所组成的网络上,可选地,它们可以用计算系统可执行的程序代码来实现,从而,可以将它们存储在存储介质(rom/ram、磁碟、光盘)中由计算系统来执行,并且在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤,或者将它们分别制作成各个集成电路模块,或者将它们中的多个模块或步骤制作成单个集成电路模块来实现。所以,本发明不限制于任何特定的硬件和软件结合。

以上内容是结合具体的实施方式对本发明实施例所作的进一步详细说明,不能认定本发明的具体实施只局限于这些说明。对于本发明所属技术领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干简单推演或替换,都应当视为属于本发明的保护范围。

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