一种智能化持续集成与持续部署流水线方法及系统与流程

文档序号:16206927发布日期:2018-12-08 07:13阅读:435来源:国知局
一种智能化持续集成与持续部署流水线方法及系统与流程

本发明涉及持续集成与持续部署的技术领域,尤其涉及一种智能化持续集成与持续部署流水线方法及系统。

背景技术

持续集成是软件开发中的一项重要实践。gradybooch于1994年最先提出持续集成的理念,随后,kentbeck与ronjeffrie在他们提出的极限编程方法(extremeprogramming)中推广了持续集成。

持续集成的基本的思想是软件开发团队中所有开发者的工作要持续地集成到一条共享的开发主线上,集成过程包括了代码的合并、编译、构建、测试等任务,该方法的持续性表现为每天进行若干次这样的集成过程。

持续集成通过不断地合并和检查各个开发者的代码变更来及早发现他们之间的冲突和质量问题。

对于互联网应用等需要部署的软件系统,持续集成从开发阶段延伸到部署阶段便产生了持续部署。

持续部署可以加快软件产品的更新迭代速度,及时将软件的变更推送给用户,有效提升用户体验。

jenkins、trvaisci等持续集成工具(服务)通过流水线技术实现了持续集成的过程的高度自动化。

持续集成与持续部署流水线包括了持续集成与持续部署任务及其配置、任务间的依赖关系以及任务的自动执行机构。

用户编写流水线配置文件,持续集成工具(服务)根据配置文件执行流水线中的任务。

持续集成与持续部署的频率、时机以及任务的选择对其效率具有很大的影响,过高的频率和不必要的任务会造成计算资源的过度开销、集成与部署周期的延长,并给开发者带来过多的干扰,过低的频率以及不完备的任务则无法达到提高开发效率与软件质量的目标。

现有工具虽然能够自动化持续集成和持续部署的过程,但是开发者需要根据经验配置持续集成和持续部署流水线,并且一个项目开发的上下文是在持续变化的,开发者难以手工地针对这些变化对配置进行实时的、有效的调整。

因此,软件项目及软件开发者迫切需要一种智能推荐、自动调节的持续集成与持续部署流水线,用以提高持续集成与持续部署的效果并降低开销。



技术实现要素:

本发明所要解决的技术问题是:克服现有技术的不足,提供一种能够感知开发活动及其上下文、评估持续集成与持续部署任务执行效果并进行推荐和自动调优的持续集成与持续部署流水线方法及系统,以提高持续集成和持续部署的效果并降低开销。

本发明技术解决方案:本发明的一种智能化持续集成与持续部署流水线方法,包括:

(1)收集开放协作平台上可被访问的项目的持续集成与持续部署配置文件及项目使用的开发语言、开发框架信息,构建持续集成与持续部署流水线任务库及配置模板库;

(2)针对(1)中所述的持续集成与持续部署流水线任务库中的每一项任务构建一套可选、可配置的任务执行规则;

(3)获取本方法服务的用户项目使用的开发语言、开发框架,根据其使用的开发语言、开发框架从(1)中所述的持续集成与持续部署流水线任务库及配置模板库中推荐流水线配置模板与流水线任务,用户在推荐下完成流水线的配置,最终形成用户项目的持续集成与持续部署流水线;

(4)记录(3)中所述用户项目的版本控制仓库地址,在本地建立上述版本控制仓库的副本,持续监控原版本控制仓库与本地副本仓库间的差异,发现开发者提交的代码变更;

(5)对(3)中所述持续集成与持续部署流水线中任务的执行进行综合监控、度量分析和记录,形成历史信息库,监控、度量分析和记录内容包括代码变更信息及其上下文,代码变更对应的持续集成与持续部署任务执行信息;

(6)对(3)中所述持续集成与持续部署流水线中任务的输入和输出文件进行追踪,建立任务与文件间的输入输出关联并缓存任务输出的文件,根据任务与文件间的输入输出关联进一步建立任务间的依赖关系;

(7)发现(2)中所述开发者提交的代码变更时,根据四个决策面依次判断(3)中所述持续集成与持续部署流水线中的任务是否需要执行、是否并行执行并决定需要执行的任务的参数和配置:a.用户选择和配置的(2)中所述任务执行规则,b.基于(5)中所述历史信息库的机器学习决策模型的预判结果,c.(6)中所述任务间的依赖关系,d.(6)中所述任务输入文件的变更;

在该技术方案中,根据使用的开发语言、开发框架对开放协作平台上可被访问的项目分类,从分类后的每一类项目的配置文件中提取常见的任务及其信息、任务间的依赖关系,所述任务信息包括任务的名称、任务的参数和配置,所述任务的参数和配置包括任务依赖的工具、工具的参数和配置,使用这些任务及其信息、任务间依赖关系构建持续集成与持续部署流水线任务库及模板库。

在该技术方案中,流水线的配置过程包括:

在流水线任务库和流水线配置模板库中匹配用户项目使用开发语言、开发框架,根据匹配结果向用户推荐流水线配置模板;

用户对推荐的流水线配置进行选择调整,并参考任务库增补需要的任务。

优选地,所述代码变更信息包括代码变更的作者和提交者、代码变更的作者和提交者的业务经验技能、代码变更的类型(包括主代码类、文本类、测试类、其他),每种类型的行数(添加与删除的行数),变更的文件、变更文件近期被变更的次数、变更文件上次变更的作者与提交者与本次是否相同,变更文件近期涉及的持续集成与持续部署任务次数。

优选地,该技术方案中所述的代码变更上下文包括近期代码变更的次数、近期代码变更的作者数和提交者数、距离上一次代码变更的时间、距离上一次持续部署与持续集成任务的时间、上一次持续部署与持续集成任务的执行结果。

优选地,所述持续集成与持续部署任务执行信息包括执行时间与执行结果,所述持续集成与持续部署任务执行结果包括成功与失败。

该技术方案中相关的量化方法包括:

数量型及分类型的信息直接使用其数值和类别;

代码变更作者与提交者的经验按以下公式量化:

经验=(历史上代码提交次数+添加和删除的各类别代码行数)成功的持续集成与持续部署次数占比

优选地,该技术方案中所述的一套可选、可配置的任务执行规则包括周期性执行规则、最大时间间隔执行规则、累积变更规模执行规则、流水线配置变更执行规则,用户可为每个任务的执行配置一组规则。

上述周期性执行规则为:

预设任务执行周期、任务参数和配置,如果周期内代码发生变更,在周期结束时,不考虑其他因素,以预设的任务参数和配置执行任务。

上述最大时间间隔执行规则为:

预设任务执行的最大时间间隔、任务参数和配置,在最大时间间隔内,如果代码发生了变更且任务没有被执行过,不考虑其他因素,以预设的任务参数和配置执行任务。

上述累积变更规模执行规则为:

预设累积变更规模、任务参数和配置,上次任务执行后,源版本控制库与本地版本控制库副本变更累积到预设规模后,不考虑其他因素,以预设的任务参数和配置执行任务。上述累积变更规模以行数计算,区别不同类型的变更。

上述流水线配置变更执行规则为:

预设任务参数和配置,流水线配置被用户修改后,不考虑其他因素,以预设的任务参数和配置执行任务。

在该技术方案中,针对每个任务,通过历史信息库训练基于统计的机器学习决策模型,将新提交的代码变更信息及其上下文、任务参数和配置输入模型得到任务执行是否出现异常的预判。

该技术方案在对一项任务的执行决策时,首先考虑决策面a,如果用户选择和配置的规则命中,则执行该任务;如果没有命中,则考虑决策面b,如果决策模型给出的预判结果为有较大概率出现异常,则执行该任务,否则考虑决策面c,如果依赖于该任务的其他任务需要执行,则执行该任务。最后,考虑决策面d,如果需要执行的任务的输入文件没有发生变化则跳过该任务直接复用缓存的输出文件。

本发明的一种智能推荐和自动调节的持续集成与持续部署流水线系统,包括以下模块:

持续集成与持续部署流水线配置模板库和任务库模块,用于构建和管理所述持续集成与持续部署流水线配置模板库、任务库;

持续集成与持续部署流水线配置模块,用于完成持续集成与持续部署流水线的配置;基于流程图编辑器,与持续集成与持续部署流水线配置模板库和任务库模块联动进行配置的推荐;

代码变更监控与管理模块,用于创建所述本地的版本控制仓库副本,追踪源版本控制仓库的变更,对比变更;

任务监控、度量分析和记录模块,用于代码变更信息、上下文信息、任务执行信息的监控、度量分析和记录;

历史信息管理模块,用于创建和管理历史信息库;

任务决策模块,用于管理可选择、可配置的任务执行规则,完成基于规则、模型、任务间依赖和任务输入文件变更进行决策;

任务执行机构管理模块,用于管理任务执行机构,包括任务执行机构的注册、任务下发、启动,以及任务输入、输出文件的追踪。

本发明与现有技术相比的优点在于:

(1)本发明提供了持续集成与持续部署流水线的配置模板库和任务库,并可以根据项目信息推荐配置模板和任务,大大降低了配置流水线的复杂度以及开发者的经验要求;

(2)本发明可以自动获取代码变更的信息及上下文,记录代码变更的信息及上下文及对应的持续集成与持续部署任务的执行信息,形成历史信息库,该库为开发者对持续集成与持续部署历史进行回溯、分析提供了素材,也为智能化的推荐和自动化的任务调节建立了基础;

(3)本发明对持续集成与持续部署流水线中任务的执行进行综合监控、度量分析,有助于开发者对持续集成与持续部署的过程以及本发明中的决策进行理解和自行调整;

(4)本发明基于历史训练的统计模型和对当前代码变更的度量分析,自动调整流水线中任务的执行,同时融入任务并发执行和任务输出文件缓存机制,降低持续集成与持续部署对开发者的干扰和资源开销,缩短一次集成与部署的执行时间;

(5)本发明包含了一组任务执行规则,保证了持续集成与持续部署的频度不因机器学习决策模型自动决策的失误而过低。

附图说明

图1为本发明的一种智能化持续集成与持续部署流水线方法实施例的步骤流程图;

图2为本发明的一种智能化持续集成与持续部署流水线系统实施的结构框图。

具体实施方式

为使本发明的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式对本发明作进一步详细的说明。

本发明的核心思想在于从开放协作平台上众多可被访问的项目的持续集成与持续部署流水线配置中提取一般配置,辅助用户完成流水线配置,利用众多其他项目及本方法服务的用户项目的持续集成与持续部署历史信息,持续集成与持续部署任务的执行进行综合监控、度量分析和记录,以及任务执行规则,对持续集成与持续部署任务进行持续调整,同时融入并行和缓存机制,降低对开发者的干扰和资源开销,缩短一次集成与部署的执行时间。

如图1所示,本发明一种智能推荐、自动调节的持续集成与持续部署流水线实施例的步骤流程图,可以包括以下步骤:

步骤101,构建持续集成与持续部署配置模板库及任务库;

随着持续集成与持续部署工具的成熟与广泛采用,开发者们已经编写了大量持续集成与持续部署流水线配置,本发明利用已有的海量配置信息辅助开发者快速高效地配置新项目的持续集成与持续部署流水线。

在本发明的一种优选实施例中,所述步骤101可以包括如下子步骤:

子步骤s11,收集大量项目的持续集成与持续部署配置文件及项目信息,所述项目信息包括项目使用的开发语言、开发框架,例如java语言、python语言、spring框架、django框架,所述配置文件为项目所使用的持续集成与持续部署工具的配置文件,例如jenkins的jenkinsfile文件、travisci的.travis.yml文件。

子步骤s12,将配置文件按照项目信息进行两级分类,一级分类为开发语言,二级分类为开发框架;

子步骤s13,解析这些配置文件,从中提取持续集成与持续部署任务名称、任务所使用的工具、工具参数和配置、任务间依赖关系,通过挖掘频繁单项集提出一般性的任务名称、工具、工具参数和配置,即任务,通过挖掘频繁多项集提出一般性的共现任务集合,即配置模板,上述一般性可以是在百分之五以上的项目中出现;

上述任务和配置模板以及他们所属的分类共同构成构建持续集成与持续部署配置模板库及任务库。

步骤102,获取项目信息,推荐和完成持续集成与持续部署流水线配置;

同一类型内的项目所使用的持续集成与持续部署流水线的配置相对不同类型的项目会更加相似,因此本发明获取用户项目的信息,通过项目信息找到对应的分类,从该分类中推荐流水线配置和任务。用户在推荐下完成配置,配置过程中可以进行修正。

步骤103,建立一套可选、可配置的任务执行规则,从中为每个任务选取和配置一组任务执行规则;

在本发明的一种优选实施例中,所述步骤103中的选、可配置的任务执行规则包括:

周期性执行规则:预设任务执行周期、任务参数和配置,如果周期内代码发生变更,在周期结束时,不考虑其他因素,以预设的任务参数和配置执行任务,优选地,周期以24小时为例。

最大时间间隔执行规则:预设任务执行的最大时间间隔、任务参数和配置,在最大时间间隔内,如果代码发生了变更且任务没有执行过,不考虑其他因素,以预设的任务参数和配置执行任务,优选地,最大时间间隔以12小时为例。

累积变更规模执行规则:预设累积变更规模、任务参数和配置,上次任务执行后,源版本控制库与本地版本控制库副本变更累积到预设规模后,不考虑其他因素,以预设的任务参数和配置执行任务。优选的,以累积超过50行测试代码为例。

流水线配置变更执行规则为:预设任务参数和配置,流水线配置被用户修改后,不考虑其他因素,以预设的任务参数和配置执行任务。

步骤104,记录项目版本库地址,创建本地副本,持续监控代码变更;

在本发明的实施例中,优选地,以分布式版本控制系统为例说明步骤104。

记录用户项目的版本控制仓库地址,通过克隆,在本地建立上述版本控制仓库的fork,根据本地fork的状态信息,持续监控原版本控制仓库与本地副本仓库间的差异,实时地将新提交的commit同步到本地fork,提取代码的最新版本与上一次集成时版本间的差异。

步骤105,获取代码变更信息和上下文信息,量化,录入历史信息库;

在本发明的一种优选实施例中,以分布式版本控制系统为例,所述步骤105可以包括如下子步骤:

子步骤s21,获取新的commit信息,包括代commit的作者和提交者、commit作者和提交者的业务经验技能、代码变更的类型(包括主代码类、文本类、测试类、其他),每种类型的行数(添加与删除的行数),变更的文件、变更文件近期被变更的次数、变更文件上次变更的作者与提交者与本次是否相同,变更文件近期涉及的持续集成与持续部署任务次数;

在所述子步骤s21中,commit的作者和提交者以电子邮箱作为id;

子步骤s22,获取commit上下文信息,包括近期commit的数量、近期commit的作者数和提交者数、距离上一次commit的时间、距离上一次持续部署与持续集成任务的时间、上一次持续部署与持续集成任务的执行是否成功;

子步骤s23,量化commit信息和commit上下文信息,数量型及分类型的信息直接使用其数值和类别,commit作者与提交者的经验通过其历史上代码提交次数、添加和删除的代码行数(区分代码类别)及成功的持续集成与持续部署次数占比来量化;

子步骤s24,优选地,以关系型数据库为例,将量化的commit信息和commit上下文信息录入关系型数据库。

步骤106,基于历史信息针对每个任务及其每一种配置训练任务执行的机器学习决策模型;

在本发明的一种优选实施例中,优选地,以逻辑斯蒂回归模型为例阐释所述步骤106,模型的自变量为量化的commit信息和commit上下文信息、前驱任务执行结果、任务执行平均时耗、任务工具、工具参数和配置,模型的因变量为任务执行成功与否,基于历史信息库中的数据,使用经典的模型拟合方法,最小二乘法训练模型。

在上述步骤106中,优选地,当历史信息库中自上次模型训练后的新的数据条目达到20条时,针对每个任务的每一种配置进行一次模型的训练。

步骤107,当代码库发生变更时,匹配每项任务的执行规则来决策任务的执行;

在上述步骤107中,有规则命中则以预设的参数和配置执行该任务。

步骤108,将代码变更信息及其上下文信息以及任务参数和配置输入每项任务对应的决策模型得到任务执行的决策;

在上述步骤108中,优选地,以50%以上的概率为例,当执行结果预判出现异常的概率大于50%则以对应的任务参数和配置执行该任务。

步骤109,根据任务间依赖以及任务输入的变化决策任务的执行;

在上述步骤109中,如果依赖于该任务的其他任务需要执行,则执行该任务;如果需要执行的任务的输入文件没有发生变化则跳过该任务直接复用缓存的输出文件。

步骤110,执行任务,获取任务执行信息,量化,录入历史信息库。

在本发明的一种优选实施例中,所述步骤110可以包括如下子步骤:

子步骤s31,任务交由自动化任务执行引擎完成,优选地,以jenkins为例,通过jenkins的提供的接口完成任务的下发与启动。

子步骤s32,获取任务的执行信息,包括任务的执行时间和任务的执行结果,所述任务的执行结果包括成功或者失败;

子步骤s33,量化任务执行信息,数量型及分类型的信息直接使用其数值和类别;

子步骤s34,优选地,以关系型数据库为例,将量化的任务执行信息录入关系型数据库。

如图2所示,本发明的一种智能化持续集成与持续部署流水线系统实施例的结构框图,具体可以包括以下模块:

持续集成与持续部署流水线配置模板库、任务库模块201,用于构建和管理持续集成与持续部署流水线配置模板库、任务库。

持续集成与持续部署流水线配置模块202,用于持续集成与持续部署流水线配置;

流水线配置以流程图的形式表示,上述模块202基于流程图编辑器,与模块201联动进行配置的推荐。

代码变更监控与管理模块203,用于创建本地的版本控制仓库副本,追踪源版本控制仓库的变更,对比变更。

任务监控、度量分析和记录模块204,用于代码变更信息、上下文信息、任务执行信息的监控、度量分析和记录。

历史信息管理模块205,用于创建和管理历史信息库。

优选地,上述历史信息库基于关系型数据库,数据库中包括两类实体,一类是持续集成与持续部署过程,一类是持续集成与持续部署任务,前者与后者为一对多的关系。

任务决策模块206,用于管理可选择、可配置的任务执行规则、训练任务决策模型,并基于规则、模型、任务间依赖和任务输入文件变更进行决策。

任务执行机构管理模块207,用于管理任务执行机构,包括任务执行机构的注册、任务下发、启动,以及任务输入、输出文件的管理。

尽管已描述了本发明的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例做出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明范围的所有变更和修改。

最后,还需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。

以上对本发明进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。

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