一种基于版本控制的DevOps元流水线系统的制作方法

文档序号:34734159发布日期:2023-07-12 17:56阅读:47来源:国知局
一种基于版本控制的DevOps元流水线系统的制作方法

本发明涉及计算机软件,具体地说是一种基于版本控制的devops元流水线系统。


背景技术:

1、devops包含development和operations,是开发和运营维护的总称。软件设计过程中,应对开发部门、运维部门进行协调,确保各项工作流程与方法高效使用,为项目工作工作提供可靠参考。基于devops软件开发源于2009年欧洲传统it模式,对解决运维管理问题起到关键作用。为巩固软件设计与开发结果,将开发、运维与测试结合一起,形成了devops软件开发管理模式。

2、devops流水线是可以以特定流程执行自动化脚本的软件应用系统,可以使devops专业人员和开发人员能够可靠而有效地编译,构建并将其代码部署到生产计算平台。

3、devops流水线通常包含一组工具,这些工具一般分为如下几类:

4、源代码控制,构建工具,容器化,配置管理,监控;

5、源代码控制一般是vcs(versioncontrolsystem)系统,比如:svn或者git,用于保存软件产品的程序源代码;

6、构建工具是将源代码通过编译、链接、测试、集成等步骤转化为可执行程序的一些额外工具,比如gcc、g++、cmake、javasdk、maven等等;

7、容器化工具一般就是docker或基于容器的编排工具如kubernetes(k8s),其中的配置管理通常是容器化部署的环境配置,比如容器化部署的dockercompose配置文件或者k8s的helmchart,用于指示docker或kubernetes以特定步骤编排容器的部署和网络连接方式;

8、监控一般是对devops流水线的执行结果以及流水线各个步骤的运行日志的收集,用于流水线的结果产看和故障调试。

9、早期的devops流水线通常由运维开发工程师自行人工搭建,只保存源代码的各个版本和流水线中运行由源代码构建生成的二进制程序所运行在的容器的编排部署配置的各个版本,没有对流水线自身进行版本记录和管理;目前部分devops集成系统产品提供了版本管理功能,但只支持查看流水线版本号和ui图形化后的低代码流水线内容,以及回滚版本等相关操作,无法通过配置文件方式生成新版本的流水线,这就造成了如下问题:

10、1、因为流水线各个步骤的shell/python/bat等自动化脚本都隐藏在ui图形化后的模块内部,需要点击对应的模块后在模块内的文本域中才能查看脚本详情,且图形化后的流水线的变化在各个版本之间很难进行直观的对比,因此造成了流水线变更后的审计困难,不能很方便地评审某一次流水线变更对整个devops系统造成的影响,从而无法在流水线变更前及时排查出并规避流水线故障的风险;

11、2、因为缺少通过配置文件生成或变更流水线的能力,手工搭建devops流水线的效率不高,流水线的变更主要还是通过人工手动搭建,搭建过程中难以排除其他临时工作沟通等事务对流水线搭建的干扰,容易引入一些人为疏忽造成的错误。


技术实现思路

1、本发明的技术任务是针对以上不足之处,提供一种基于版本控制的devops元流水线系统,能够通过版本控制库的pr审核增强被构建的devops流水线的健壮性,简化搭建流程,提高devops人员的工作效率。

2、本发明解决其技术问题所采用的技术方案是:

3、一种基于版本控制的devops元流水线系统,该系统基于给定的配置文件搭建并生成对应的devops流水线,并通过识别配置文件的更新来更新维护生成的devops流水线;其实现包括元流水线系统和工作负载池;

4、还包括流水线配置文件、配置仓库、配置加载器和配置生成器,其中流水线配置文件以人类可读的结构化文件(如yaml)描述流水线结构;配置仓库用于保存流水线配置文件并进行版本控制;配置加载器用于解析流水线配置文件并生成对应的结构化数据对象;配置生成器用于从流水线实例元数据库中读取需要导出配置的流水线的版本控制信息,并根据对应版本从配置仓库获取流水线实例的对应配置文件。

5、该系统通过将devops流水线的构成情况抽象为模板文件,并使用版本控制仓库进行审计管理,同时通过元流水线从版本控制仓库中提取模板进行devops流水线的构建,可以通过版本控制库的pr审核增强被构建的devops流水线的健壮性,简化搭建流程,提高devops人员的工作效率。

6、可以通过本系统的devops元流水线基于给定的配置文件搭建并生成对应的devops流水线,并通过识别配置文件的更新来更新维护生成的devops流水线,提高流水线的搭建和升级效率;

7、被元流水线生成的devops流水线的结构、所使用的负载以及其中各部分所使用的自动化脚本都使用版本控制仓库保存管理,可以在变更前方便地进行人工审核,提前识别和规避流水线变更操作中的风险;

8、后期可以通过接入自然语音学习的机器学习系统,通过向机器学习系统提出需求描述,由机器学习系统根据需求描述生成所需的流水线配置文件;

9、进一步的,所述元流水线系统可抽象为流水线实例元数据库、编排引擎和调度器,其中,

10、流水线实例元数据库用于保存流水线的逻辑结构,包括流水线实例的各个执行步骤,执行每个步骤的工作负载,每个步骤需要执行的自动化脚本以及各个步骤的执行配置信息;

11、编排引擎负责编排并生成流水线实例的逻辑结构;

12、调度器负责根据流水线实例元数据库中的流水线元数据将流水线实例调度到工作负载池中的指定工作负载并进行实例的一次执行。

13、进一步的,创建新流水线的实现过程如下:

14、流水线运维人员编写新的流水线配置文件,并向元流水线系统的配置仓库发起pullrequest请求,相关审核人员审核通过后合并pullrequest到配置仓库的主工作分支;元流水线通过githook感知配置仓库的更新,触发配置加载器通过gitdiff找到需要更新的流水线,并将对应的配置文件解析为流水线实例的元数据后,调用编排引擎更新流水线实例元数据库中的相关元数据;调度器在流水线下次执行时,根据最新版本的流水线实例元数据从工作负载池选择执行实例流水线的相关负载,并执行实例流水线。

15、进一步的,导出流水线配置文件的过程如下:

16、流水线运维人员通过预先暴露的api向配置生成器发送查询指定流水线实例版本的请求,配置生成器查询流水线实例元数据库中的指定实例版本并返回版本信息列表,流水线运维人员根据选定的流水线实例和版本号发送导出流水线配置的请求,配置生成器根据该请求携带参数中指定的流水线实例id和版本号从配置仓库拉取对应的流水线配置文件并返回供流水线运维人员下载。

17、进一步的,更新流水线的实现过程如下:

18、流水线运维人员修改导出后的流水线配置文件,修改需要更新的内容,并向元流水线系统的配置仓库发起pullrequest请求,相关审核人员审核通过后合并pullrequest到配置仓库的主工作分支;元流水线通过githook感知配置仓库的更新,触发配置加载器通过gitdiff找到需要更新的流水线,并将对应的配置文件解析为流水线实例的元数据后,调用编排引擎更新流水线实例元数据库中的相关元数据;调度器在流水线下次执行时,根据最新版本的流水线实例元数据从工作负载池选择执行实例流水线的相关负载,并执行实例流水线。

19、优选的,所述流水线配置文件保存于版本控制仓库中,一组相关的流水线存储于一个git仓库,并用不同目录区分不同的流水线。

20、如下例所示:

21、

22、其中pipelines下是以流水线名称命名的多个子文件夹,一个子文件夹对应一个流水线实例。每个子文件夹下的config.yml是一个用于描述流水线结构的yaml配置文件,此外是被这个配置文件引用的自动化部署脚本(如:scripta.sh、scriptb.bat、scriptc.py等)。

23、进一步对,所述流水线配置文件包括五个部分:

24、1)、base-info,用于描述流水线基本信息,包括如下属性:

25、pipe-name:用于描述流水线名称,

26、version:用于描述流水线版本,

27、tags:是一个yaml数组结构,可以为流水线创建多个标签用于筛选过滤流水线,

28、group:用于描述流水线所属分组;

29、2)、global-params,用于定义流水线全局参数,包括如下属性:

30、name:参数名,

31、type:参数类型,包括text文本,single_select单选,checkbox复选框;

32、default:参数默认值,

33、secret:布尔类型(true/false),是否在日志中加密此参数,

34、required:布尔类型(true/false),是否为必填参数,

35、description:参数描述;

36、3)、sources,用于描述流水线的代码源,sources是由多个source组成的数组,每个source代表一种代码源,包括如下属性:

37、type:代码源类型,包括github、gitlab、gitee,

38、project:代码工程名,

39、repo:代码库地址,

40、default-branch:代码检出时使用的默认分支,

41、triggers:是代码变更时触发流水线执行的触发器组合,可以定义多种不同的trigger;

42、4)、stages,用于描述流水线中的执行步骤,stages由多个stage组成,每个stage代表一个流水线执行阶段,包括如下属性:

43、name:阶段名称,

44、trigger-type:触发方式,分为自动触发和手动触发,

45、fail-strategy:失败策略,分为自然失败和快速失败,自然失败即遇到执行错误跳过,继续执行后续步骤;快速失败即遇到执行错误即失败,不再继续执行后续步骤;

46、passbys:跳过阶段的条件,由多个passby组成,每个passby由三个表达式属性组成,key为要判断的变量名,op为判断表达式(==或!=或>或<),value为要判断变量是否满足表达式的值,

47、build-params:额外构建参数,由多个param组成,每个param有多个属性,name为参数名,default为参数的默认值,description为参数描述,

48、tasks:为阶段的任务集合,由多个task组成,每个task有如下属性:

49、name:任务名,

50、host:任务要调度到的工作负载,

51、script:构建时需要执行的脚本文件,

52、passbys:跳过当前任务的条件,由多个task组成,每个task由三个表达式属性组成,key为要判断的变量名,op为判断表达式(==或!=或>或<),value为要判断变量是否满足表达式的值,

53、timeout:当前任务的超时时间,如果当前任务执行时间到达超时时间规定的时长,则判定当前任务失败,

54、retry:当前任务的重试次数,规定当前任务失败后可以重试执行的次数;

55、5)、general,用于描述流水线的触发器和通知推送信息,包括:

56、triggers:触发器,其中timer为布尔类型(true/false),表示是否定时触发;expression为定时触发的cron表达式,timer为true时必须提供;web-hook为布尔类型(true/false)表示是否通过web-hook触发;token为web-hook的token;

57、block:为布尔类型(true/false),表示是否阻塞构建,即同一条流水线的执行是否阻塞下次执行。

58、进一步的,所述global-params,如果参数type是单选或复选框,还需要定义一个由多个item属性组成的items数组,每个item包括如下属性:

59、default:当前item是否为默认值;

60、key:参数名;

61、value:参数值。

62、进一步的,所述sources属性triggers,每个trigger由如下属性构成:

63、auto-when-changed:布尔类型(true/false),代码变更后是否自动触发流水线;

64、comment-matcher:文本类型,提交注释匹配器,如果代码的提交注释中包含文本定义的正则表达式,则触发流水线执行;

65、listen-branches:布尔类型(true/false),是否监听特定分支;

66、branch-listeners:分支监听器,如果listen-branches为true则需要定义分支监听器,由多个rules构成,每个rules有三个属性,match为匹配规则,包括前缀匹配,中缀匹配和后缀匹配,branch为监听的分支名称,msg-type为触发类型包括merge和pr,merge为本地分支push对应远端分支后触发,pr为远端主分支合并pullrequest之后执行;

67、listen-tags:布尔类型(true/false),是否监听git的tag变化;

68、tag-listeners:tag监听器,如果listen-tags为true则需要定义分支监听器,由多个rules构成,每个rules有三个属性,match为匹配规则,包括前缀匹配,中缀匹配和后缀匹配,branch为监听的分支名称,msg-type为触发类型包括merge和pr,merge为本地分支push对应远端分支后触发,pr为远端主分支合并pullrequest之后执行。

69、进一步的,该系统还包括机器学习扩展接口,通过流水线配置导出功能为机器学习提供接口,nlp系统可通过导出流水线配置文件进行学习,并通过与人的自然语言交互确认学习结果进行训练,直至可以生成devops运维人员需要的流水线配置,后期流水线运维人员只需向nlp系统提出书面需求,即可获得希望得到的流水线配置,可以大大减轻流水线编排设计的工作量。

70、本发明的一种基于版本控制的devops元流水线系统与现有技术相比,具有以下有益效果:

71、以编写配置文件的方式代替人工搭建,提高了devops流水线的搭建和升级效率;

72、提高了devops流水线的可审核性,降低了人工搭建造成的风险;

73、提供调用接口,可以被机器学习系统接入调用,根据用户需求描述自动生成流水线配置文件,减轻devops工程师的工作负担。

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