CN115858004A - 流水线生成方法、系统、设备及存储介质 - Google Patents
流水线生成方法、系统、设备及存储介质 Download PDFInfo
- Publication number
- CN115858004A CN115858004A CN202211513143.3A CN202211513143A CN115858004A CN 115858004 A CN115858004 A CN 115858004A CN 202211513143 A CN202211513143 A CN 202211513143A CN 115858004 A CN115858004 A CN 115858004A
- Authority
- CN
- China
- Prior art keywords
- pipeline
- preset
- target
- information
- determining
- 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.)
- Pending
Links
Images
Landscapes
- Stored Programmes (AREA)
Abstract
本申请提供一种流水线生成方法、系统、设备及存储介质,该方法通过获取目标项目的触发请求信息,根据触发方式信息确定流水线模板,根据触发项目标识信息从预设项目数据库中确定目标项目的项目预设信息,基于项目预设信息从预设共享库的预设工作容器库中确定目标节点配置数据,以在集群环境中创建目标容器,从预设方法共享库中确定流水线模板对应的目标方法,根据目标方法生成流水线脚本,以生成待生成流水线,通过预设共享库来对预设工作容器库进行管理,能够防止目标节点配置数据暴露在Jenkins服务器中被人篡改导致流水线构建失败的风险,灵活性高。
Description
技术领域
本发明实施例涉及计算机技术领域,具体涉及一种流水线生成方法、系统、设备及存储介质。
背景技术
持续集成(简称CI)和持续交付(简称CD)是将软件从源代码到软件产品交付的整个过程。这个过程中涉及到源代码静态检查,产品各阶段的测试,产品版本管理,产品发布等环节。
Jenkins是常用的持续集成工具,可以将CI和CD完全实现自动化,从代码提交到最终发布中间的步骤串联起来可以看成一条流水线,每个环节都自动完成,提高环节中各个岗位的工作效率和沟通效率,避免由于人为操作或人为干预造成问题。且能够保证每个环节的执行结果不被恶意篡改。通过编写流水线脚本jenkinsfile的方式实现持续集成和持续交付过程中的流水线。
但相关技术中,通过jenkinsfile脚本指定项目运行环境时通常是使用Jenkins上固定的Pod(节点)配置内容,项目种类多时需要在Jenkins上配置大量的Pod,所有的Pod配置是暴露在Jenkins前端界面的,灵活性差,且一旦Pod信息被人篡改则会直接导致流水线构建失败。
发明内容
鉴于以上所述现有技术的缺点,本发明实施例提供一种流水线生成方法、系统、设备及存储介质,以解决上述技术问题。
本发明实施例提供的流水线生成方法,所述方法包括:
获取目标项目的触发请求信息,所述触发请求信息包括触发方式信息和所述目标项目的触发项目标识信息;
根据所述触发方式信息确定流水线模板;
根据所述触发项目标识信息从预设项目数据库中确定所述目标项目的项目预设信息;
基于所述项目预设信息从预设共享库的预设工作容器库中确定目标节点配置数据,以在集群环境中创建目标容器,所述目标容器用于运行流水线脚本;
从所述预设方法共享库中确定所述流水线模板对应的目标方法,根据所述目标方法生成流水线脚本,以生成待生成流水线。
于本发明一实施例中,从所述预设方法共享库中确定所述流水线模板对应的目标方法包括:
获取所述预设方法共享库中确定所述流水线模板对应的多个预设方法,以及各所述预设方法的方法标识和方法更新时间;
若存在至少两个具有相同方法标识的所述预设方法,将所述方法更新时间与当前时间最近的一个所述预设方法确定为目标方法。
于本发明一实施例中,根据所述触发项目标识信息从预设项目数据库中确定所述目标项目的项目预设信息之前,所述方法还包括:
获取用户通过看板系统写入的写入信息,基于所述写入信息生成所述项目预设信息。
于本发明一实施例中,从所述预设方法共享库中确定所述流水线模板对应的目标方法,根据所述目标方法生成所述待生成流水线的流水线脚本,以生成所述待生成流水线之后,所述方法还包括
通过所述目标容器运行所述流水线脚本;
当所述待生成流水线执行完成,释放所述流水线脚本,并释放所述目标容器。
于本发明一实施例中,根据所述触发方式信息确定待生成流水线的流水线模板包括以下至少之一:
若所述触发方式信息包括管理人员手动触发,将所述流水线模板确定为产品构建流水线模板;
若所述触发方式信息包括运维人员手动触发,将所述流水线模板确定为软件部署流水线模板;
若所述触发方式信息包括定时触发,将所述流水线模板确定为定时检查流水线模板;
若所述触发方式信息包括代码合并请求触发,将所述流水线模板确定为代码合并检查流水线模板;
若所述触发项目标识信息为预设目标项目标识,将所述流水线模板确定为自定义流水线模板,并在所述预设项目数据库中配置所述预设目标项目标识对应的自定义项目的项目自定义信息。
于本发明一实施例中,从所述预设共享库中确定所述流水线模板对应的目标方法,根据所述目标方法生成流水线脚本,以生成待生成流水线之后,所述方法还包括:
再次获取所述目标项目的新的触发请求信息;
获取所述目标方法的方法更新状态;
若所述方法更新状态为已更新,以更新后的更新方法替换所述目标方法,以生成新的所述待生成流水线。
本发明实施例提供的一种流水线生成系统,所述系统包括:
获取模块,用于获取目标项目的触发请求信息,所述触发请求信息包括触发方式信息和所述目标项目的触发项目标识信息;
模板确定模块,用于根据所述触发方式信息确定流水线模板;
项目信息确定模块,用于根据所述触发项目标识信息从预设项目数据库中确定所述目标项目的项目预设信息;
工作空间创建模块,用于基于所述项目预设信息从预设共享库的预设工作容器库中确定目标节点配置数据,以在集群环境中创建目标容器,所述目标容器用于运行流水线脚本;
动态生成脚本模块,用于从所述预设方法共享库中确定所述流水线模板对应的目标方法,根据所述目标方法生成流水线脚本,以生成待生成流水线。
于本发明一实施例中,所述系统还包括预设共享库,所述预设共享库包括预设工作容器库,其中:
所述预设工作容器库包括多个工作容器的预设配置数据,以供将至少一个所述预设配置数据确定为所述目标节点配置数据,以在集群环境中创建所述待生成流水线的目标容器,所述预设配置数据包括所述工作容器的依赖镜像、空间大小、挂载到宿主机路径。
于本发明一实施例中,所述系统还包括预设共享库,所述预设共享库还包括预设方法共享库,所述预设方法共享库包括数据库接口、外围系统接口库、执行模块库、结果发布库中至少之一,以提供所述目标方法。
于本发明一实施例中,所述系统还包括预设共享库,所述预设共享库还包括预设自定义库,以供用户输入自定义方法内容。
本发明实施例提供的一种电子设备,所述电子设备包括:
一个或多个处理器;
存储装置,用于存储一个或多个程序,当所述一个或多个程序被所述一个或多个处理器执行时,使得所述电子设备实现上述任一项实施例所述的流水线生成方法。
本发明实施例提供的一种计算机可读存储介质,其上存储有计算机程序,当所述计算机程序被计算机的处理器执行时,使计算机执行上述任一项实施例所述的流水线生成方法。
本发明实施例的有益效果:本发明实施例中的流水线生成方法、系统、设备及存储介质,该方法通过获取目标项目的触发请求信息,根据触发方式信息确定流水线模板,根据触发项目标识信息从预设项目数据库中确定目标项目的项目预设信息,基于项目预设信息从预设共享库的预设工作容器库中确定目标节点配置数据,以在集群环境中创建目标容器,从预设方法共享库中确定流水线模板对应的目标方法,根据目标方法生成流水线脚本,以生成待生成流水线,通过预设共享库来对预设工作容器库进行管理,能够防止目标节点配置数据暴露在Jenkins服务器中被人篡改导致流水线构建失败的风险,灵活性高。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本申请。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本申请的实施例,并与说明书一起用于解释本申请的原理。显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术者来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。在附图中:
图1为本申请一示例性实施例示出的系统架构图;
图2是本申请的一示例性实施例示出的流水线生成方法的流程图;
图3是本发明一示例性实施例示出的流水线动态生成时序图;
图4是本发明一示例性实施例示出的流水线业务流程图;
图5是本发明一示例性实施例示出的流水线动态生成流程图;
图6是本申请的一示例性实施例示出的流水线生成系统的框图;
图7示出了适于用来实现本申请实施例的电子设备的计算机系统的结构示意图。
具体实施方式
以下将参照附图和优选实施例来说明本发明的实施方式,本领域技术人员可由本说明书中所揭露的内容轻易地了解本发明的其他优点与功效。本发明还可以通过另外不同的具体实施方式加以实施或应用,本说明书中的各项细节也可以基于不同观点与应用,在没有背离本发明的精神下进行各种修饰或改变。应当理解,优选实施例仅为了说明本发明,而不是为了限制本发明的保护范围。
需要说明的是,以下实施例中所提供的图示仅以示意方式说明本发明的基本构想,遂图式中仅显示与本发明中有关的组件而非按照实际实施时的组件数目、形状及尺寸绘制,其实际实施时各组件的型态、数量及比例可为一种随意的改变,且其组件布局型态也可能更为复杂。
在下文描述中,探讨了大量细节,以提供对本发明实施例的更透彻的解释,然而,对本领域技术人员来说,可以在没有这些具体细节的情况下实施本发明的实施例是显而易见的,在其他实施例中,以方框图的形式而不是以细节的形式来示出公知的结构和设备,以避免使本发明的实施例难以理解。
请参见图1,图1为本申请一示例性实施例示出的系统架构图。如图1所示,本申请实施例提供的方法可以支持多种业务域项目,如车云域、座舱域、车控域、驾驶域、其他域等,每一个业务域可以包括一个或多个项目。可以通过预先设定的触发方式实现该项目的流水线的触发,基于不同的触发方式信息所对应的触发方式,可以确定相应的模板,模板通常包括代码合并检查流水线、定时检查流水线、产品构建流水线、部署流水线,上述四种流水线模板包含了从代码提交到交付的各个环节。但有时,上述四种流水线模板不能满足某些特征项目的需要,本实施例提供的系统架构还提供了自定义流水线模板(图中的自定义流水线),这样,用户可以通过项目信息库中配置指定环节来自定义流水线,满足用户的多样需求。
在本实施例提供的方法中,所有的环节都被提取到共享库(也即预设共享库)中进行统一管理,按照执行的环节和项目的特征调取共享库中的目标方法(数据库接口的方法、外围系统接口库的方法、执行模块库的方法以及结果发布库的方法中至少之一,也即数据库接口、外围系统接口库、执行模块库、结果发布库,为流水提供了公共方法),可实现不同环节的具体执行内容。共享库中的Pod库(节点库,也即预设工作容器库)用于对Pod(节点,容器)进行统一管理。通过共享库的方式对Pod进行统一管理。避免Pod配置内容暴露在Jenkins服务器上被人篡改。也能让不同项目同时使用相同的Pod内容。若共享库中的方法无法满足特殊项目的需求,则可编写自定义方法库(图中的自定义库),该项目动态生成脚本时从自定义库中获取指定的方法,最后实现脚本的动态生成。
持续集成(简称CI)和持续交付(简称CD)是将软件从源代码到软件产品交付的整个过程。这个过程中涉及到源代码静态检查,产品各阶段的测试,产品版本管理,产品发布等环节。
Jenkins是常用的持续集成工具,可以将CI和CD完全实现自动化,从代码提交到最终发布中间的步骤串联起来可以看成一条流水线,每个环节都自动完成,提高环节中各个岗位的工作效率和沟通效率,避免由于人为操作或人为干预造成问题。且能够保证每个环节的执行结果不被恶意篡改。通过编写流水线脚本jenkinsfile的方式实现持续集成和持续交付过程中的流水线。
发明人发现,相关技术中的方案至少存在以下问题:
1、项目和jenkinsfile脚本是一对一的关系,甚至是一对多的关系,即一个项目至少有一个流水线脚本,如果流水线的环节不同,则可能会存在一个项目需要维护多个流水线脚本。如果有成百上千个项目接入到Jenkins中进行持续集成,则可能需要管理成百上千个jenkinsfile脚本文件。
2、如果同类型项目在持续集成和发布的过程中需要执行的环节相同,那么jenkinsfile脚本文件可能存在大量的内容重复。
3、一旦外部通用服务接口发生变化,那么所有涉及到通用接口的jenkinsfile脚本都需要进行修改,如果脚本已经部署到Jenkins上,那么需要修改后进行重新部署,存在维护困难且容易出错的问题。
4、通过jenkinsfile脚本指定项目运行环境时通常是使用Jenkins上固定的Pod(节点)配置内容,项目种类多时需要在Jenkins上配置大量的Pod,所有的Pod配置是暴露在Jenkins前端界面的,灵活性差,且一旦Pod信息被人篡改则会直接导致流水线构建失败。
为解决上述问题,本申请的实施例分别提出一种流水线生成方法、一种流水线生成系统、一种电子设备、一种计算机可读存储介质以及一种计算机程序产品,以下将对这些实施例进行详细描述。
请参阅图2,图2是本申请的一示例性实施例示出的流水线生成方法的流程图。该方法可以通过图1所示的系统架构所执行,也可以通过本领域技术人员所知晓的其他实施环境执行。如图2所示,在一示例性的实施例中,该流水线生成方法至少包括步骤S201至步骤S205,详细介绍如下:
步骤S201,获取目标项目的触发请求信息。
触发请求信息包括触发方式信息和目标项目的触发项目标识信息。
目标项目为当前触发流水线生成的项目,该目标项目可以为图1中的业务域项目中的一个或多个项目,当存在多个项目时,则逐一对项目的流水线进行生成。
触发项目标识信息表示该目标项目的身份信息,基于该身份信息可以便于后续在预设项目数据库中确定得到该目标项目的项目预设信息。触发项目标识信息可以为项目名称等。
步骤S202,根据触发方式信息确定流水线模板。
其中,触发方式信息表征流水线的触发方式,触发方式包括手动触发和自动触发,手动触发又根据触发人员的身份不同分为管理人员手动触发和运维人员手动触发,自动触发分为定时触发和代码合并请求触发。此外,还存在某些项目当前的模板并不能够满足需要的情形,本申请实施例还提供了若触发项目标识信息为预设目标项目标识,将流水线模板确定为自定义流水线模板,并在预设项目数据库中配置预设目标项目标识对应的自定义项目的项目自定义信息的方式,以实现自定义的流水香模板的补充。
在一个实施例中,根据触发方式信息确定待生成流水线的流水线模板包括以下至少之一:
若触发方式信息包括管理人员手动触发,将流水线模板确定为产品构建流水线模板;
若触发方式信息包括运维人员手动触发,将流水线模板确定为软件部署流水线模板;
若触发方式信息包括定时触发,将流水线模板确定为定时检查流水线模板;
若触发方式信息包括代码合并请求触发,将流水线模板确定为代码合并检查流水线模板;
若触发项目标识信息为预设目标项目标识,将流水线模板确定为自定义流水线模板,并在预设项目数据库中配置预设目标项目标识对应的自定义项目的项目自定义信息。
手动触发的方式可以是通过预先设置的触发控件,如设置触发按钮,并将触发按钮显示在人机交互界面,用户(运维人员或管理人员)通过点击、按压等方式触发该触发按钮,以这样的方式生成触发请求信息。
定时触发的方式可以通过接收代码仓库周期性发送的代码触发请求,根据该代码触发请求周期性的触发流水线任务。
例如,可以通过触发器来触发流水线,根据触发器的触发方式确定流水线的类型(也即确定流水线模板)。触发可分为自动触发和手动触发两种方式,代码管理仓库中由于合并请求导致的自动触发会匹配上代码合并检查流水线;由于定时条件满足导致的自动触发会匹配上定时检查流水线;软件产品管理人员手动进行的触发会匹配产品构建流水线;运维人员手动进行的触发会匹配软件部署流水线。
步骤S203,根据触发项目标识信息从预设项目数据库中确定目标项目的项目预设信息。
预设项目数据库中预先设定有不同项目的项目预设信息。
在一实施例中,根据触发项目标识信息从预设项目数据库中确定目标项目的项目预设信息之前,该方法还包括:
获取用户通过看板系统写入的写入信息,基于写入信息生成项目预设信息。
项目管理者通过看板系统(具有输入装置的设备)写入所有项目的基本信息。流水线触发后会自动从数据库中获取触发项目的基本信息(也即项目预设信息),并将这些项目预设信息作为流水线中的环境变量,用于后续各个构建环节。
例如,将流水线的类型分成5类,也即预先设置五种流水线模板,包括代码合并前的代码质量检查流水线、定时触发检查流水线、产品构建流水线和产品部署流水线,自定义流水线。前4个类型的流水线包含了从代码提交到交付的所有环节,绝大多数项目可以通过这4种类型的流水线完成产品交付。每种类型根据其目的的不同,定义了不同执行环节。例如合并前代码质量检查流水线包含代码静态扫描,单元测试,与看板系统交互等环节,只有代码质量检查合格才能被允许合入代码仓库的发布分支。定时检查流水线包含构建、单元测试、测试环境部署、接口测试、测试环境恢复等环节。产品构建流水线包含软件构建,软件产品上传等环节,合格的软件产品才能被上传到统一的管理平台进行版本管理,也为后续的部署提供软件基础。部署流水线包含代码静态检查和软件部署等环节,从软件产品的管理平台选择定版后的产品部署到生产环境。4类通用的流水线模板无法满足某些特殊项目,则可使用自定义流水线模板,通过在项目信息库中配置指定环节来自定义流水线。
需要说明的是,上述步骤S202根据触发方式信息确定流水线模板和步骤S203根据触发项目标识信息从预设项目数据库中确定目标项目的项目预设信息的执行步骤的顺序并不做限定,本领域技术人员可以根据需要依次执行步骤S202根据触发方式信息确定流水线模板和步骤S203根据触发项目标识信息从预设项目数据库中确定目标项目的项目预设信息,或者先执行步骤S203根据触发项目标识信息从预设项目数据库中确定目标项目的项目预设信息,再执行步骤S202根据触发方式信息确定流水线模板,又或者可以同时执行步骤S203根据触发项目标识信息从预设项目数据库中确定目标项目的项目预设信息和步骤S202根据触发方式信息确定流水线模板。
步骤S204,基于项目预设信息从预设共享库的预设工作容器库中确定目标节点配置数据,以在集群环境中创建待生成流水线的目标容器。
其中,该目标容器用于运行流水线脚本。该预设共享库中包含了对Pod库(预设工作容器库)的管理,防止Pod配置信息(目标节点配置数据)暴露在jenkins服务器中被人篡改导致流水线构建失败的风险。
基于项目基本信息(项目预设信息),从预设共享库中的Pod库(预设工作容器库)获取指定的节点配置(目标节点配置数据),并根据这些配置数据在kubernetes集群环境中自动创建流水线的工作容器,也即目标容器。
共享库中的Pod库(预设工作容器库)用于对Pod进行统一管理。每次执行流水线时都会在kubernetes集群中动态创建一个容器作为流水线的工作空间。Pod库中以yaml的形式存放了不同的Pod配置,配置中指定依赖的镜像、动态创建容器的空间大小、挂载到宿主机路径等等。流水线触发后从Pod库中选取匹配的Pod配置文件来创建工作空间。通过共享库的方式对Pod进行统一管理。避免Pod配置内容暴露在jenkins服务器上被人篡改。也能让不同项目同时使用相同的Pod内容。
步骤S205,从预设方法共享库中确定流水线模板对应的目标方法,根据目标方法生成流水线脚本,以生成待生成流水线。
在一实施例中,从预设方法共享库中确定流水线模板对应的目标方法包括:
获取预设方法共享库中确定流水线模板对应的多个预设方法,以及各预设方法的方法标识和方法更新时间;
若存在至少两个具有相同方法标识的预设方法,将方法更新时间与当前时间最近的一个预设方法确定为目标方法。
在一实施例中,从预设共享库中确定流水线模板对应的目标方法,根据目标方法生成流水线脚本,以生成待生成流水线之后,该方法还包括:
再次获取目标项目的新的触发请求信息;
获取目标方法的方法更新状态,方法更新状态可以通过该方法的配置文件的更新时间来确定,若存在至少两个更新时间,且距离当前时间最近的更新时间晚于该方法的最后一次执行时间,则该目标方法的方法更新状态为已更新,否则为未更新;
若方法更新状态为已更新,以更新后的更新方法替换目标方法,以生成新的待生成流水线。
通过上述方式,一旦需要对方法进行新增或更新,不需要重新定义流水线,只需要在流水线执行过程中拉取最新的方法作为目标方法即可。
其中,可以根据流水线类型(流水线模板)确定需要执行的环节,根据从预设项目数据库中获取到的预设项目信息,调用执行模块库中的方法。若预设共享库中的方法无法满足特殊项目的需求,则可编写自定义方法库,该项目动态生成脚本时从自定义库中获取指定的方法,最后实现脚本的动态生成。Jenkins根据jenkinsfile脚本完成各环节的任务。
在一个实施例中,该方法还包括:
并按照流水线中预先定义的评判标准判断软件代码是否存在问题,根据流水线各环节执行的结果进行最终结果的发布。
在一个实施例中,从预设方法共享库中确定流水线模板对应的目标方法,根据目标方法生成待生成流水线的流水线脚本,以生成待生成流水线之后,方法还包括
通过目标容器运行流水线脚本;
当待生成流水线执行完成,释放流水线脚本,并释放目标容器。
通过在流水线完成之后流水线脚本被及时释放,节约维护脚本成本,降低由于jenkinsfile脚本问题导致软件持续集成和持续发布失败的问题。
Jenkins结合kubernetes集群的方式,在执行流水线时可根据jenkinsfile脚本文件中编写的条件动态创建工作空间(目标容器),执行过程中可实现动态伸缩,执行完流水线后释放工作空间(目标容器),不额外占用主机资源,能够提高服务器利用率,也能够有效防止源代码泄漏。
上述实施例提供的方法,所有的环节都被提取到预设共享库中进行统一管理,按照执行的环节和项目的特征调取共享库中的方法,可实现不同环节的具体执行内容。共享库中的执行模块库可适配不同类型的项目,例如执行编译环节时,共享库中包含了适用于不同编码语言的编译指令,根据从项目信息库中获取到的项目编码语言,调取相应的执行编译模块。执行代码单元测试环节时,不同项目使用的测试框架不同,涉安项目和非涉安项目使用的单元测试也完全不同,本实施例中的共享库的执行模块库中囊括了超过7种单元测试方法。执行部署环节,根据项目类型不同共享库中的执行模块可执行云端项目的部署、上下位机项目的部署、操作系统部署等等。除了多元的执行模块库外,为实现多业务融合,此外,还提供了自定义执行库的接口,使用者可随时添加自定义方法。
例如,可以通过数据库接口、外围系统接口库、执行模块库、结果发布库等中至少之一为流水线提供了公共方法,执行流水线时,按照不同流水线类型(流水线模板)去共享库中动态获取需要访问的外部接口等信息。如果外部接口有变更,只需要修改共享库接口库的内容,再次执行流水线时,动态生成的流水线会自动获取最新的接口方法。例如流水线与看板系统交互的接口发生变化,既有的接口参数只有流水线最后的执行结果,但新的看板系统接口参数不仅包含最后执行结果,也需要包含各个环节的执行结果,那么只需修改一个接口库内容则可适用到所有项目中。所有项目使用和维护一套共享库,项目和jenkinsfile脚本成了N对一的关系,大大降低了jenkinsfile脚本文件的维护成本,也极大程度上降低了脚本出错几率。
在一实施例中,从预设方法共享库中确定流水线模板对应的目标方法,根据目标方法生成流水线脚本包括:
获取流水线模板的模板内容,其中模板内容包括编译、单元测试、扫描、自动化测试、部署中至少之一;
根据所述模板内容确定目标方法,其中目标方法包括编译方法、单元测试方法、扫描方法、自动化测试方法、部署方法中至少之一。
在一实施例中,获取流水线模板的模板内容之前,该方法还包括:
获取自定义方法状态,若存在自定义方法,则获取自定义方法。
通过上述方式可以实现流水线的动态生成。
下面通过一个示例性的使用场景对本发明实施例提供的流水线生成方法进行示例性的说明。汽车领域内项目包括座舱相关项目,云端服务相关项目,智能控制相关项目等。座舱域内某一项目是gradle项目,使用sonar工具进行扫描,执行单元测试时需要将编译生成的apk推送到车机上,结合外部接口进行测试,也需要在车机上进行接口或者UI测试,生成的最终产物是apk。云端域内某一项目是maven项目,使用sonar工具扫描,该项目发布的时候需要将编译后生成jar包并打包到docker里进行docker发布。智控域内某一项目是matlab项目,使用polyspace扫描工具,使用matlab的单元测试工具。智控域内某一项目是C语言编程的项目,使用cppcheck扫描工具,使用cmake工具进行编译,使用gtest工具进行单元测试,生成的二进制文件作为最终产物需要部署到车机中。采用本实施例提供的方法需要适配多元化的业务类型,以满足不用项目的需求。在项目信息数据库中每个项目都会有相应的项目类型,扫描工具,单元测试工具,产物类型等信息。本实施例提供的方法可根据这些信息从共享库中提取出针对不同项目的执行方法。并将这些方法按照Jenkins脚本的规则动态组装成流水线脚本。
下面再通过另一个示例性的使用场景对本发明实施例提供的流水线生成方法进行示例性的说明。目前接入到Jenkins上包含各业务域的一百多个项目,由于项目所处的阶段不同和目的不同,一个项目对应多条流水线,因此目前Jenkins上存在三百多条流水线。流水线执行的所有信息需要上传到看板系统进行展示,因此所有流水线都会调用看板系统的接口,并向接口传送指定参数。由于业务域需求变更,流水线向看板系统传送的参数也需求变更。传统的方式将流水线脚本以自动化或非自动话生成之后分别部署到项目流水线中。如果要变更传统方式脚本,需要将所有流水线的脚本搜集起来,变更三百多个脚本中与看板系统通信的接口内容,再将变更后的脚本重新部署到Jenkins。本实施例的方法使用共享库集中管理,且动态生成脚本的方式。只需要在共享库中变更与看板系统通信的接口内容,不需要对某个具体的流水线进行改变。流水线再次执行时,动态拉取共享库中最新的接口方法,实现执行方法的实时更新。
参见图3,图3是本发明一示例性实施例示出的流水线动态生成时序图,如图3所示,通过触发器来触发流水线,持续集成工具Jenkins接收到触发器发送的触发请求信息,基于触发请求的触发方式来确定流水线类型,也即从模板库中确定流水线模板,基于触发项目标识信息从预设项目数据库(也即图中的项目数据库)中确定项目预设信息,通过Jenkins发送获取项目信息消息到项目数据库,接收项目数据库返回的项目信息(项目预设信息)实现。项目数据库基于项目预设信息从预设共享库的预设工作容器库(也即图中的Pod库)中获取工作空间信息(目标节点配置数据),通过项目数据库发送获取工作空间信息给Pod库,接收Pod库返回的工作空间信息实现,该返回工作空间信息中就包括目标节点配置数据。基于该目标节点配置数据创建目标容器,也即图中的创建流水线工作空间。从自定义库和预设方法共享库中至少之一获取共享方法(目标方法),该目标方法可以是通过自定义库自定义的方法,也可以是预设方法共享库中现有的方法,基于上述目标方法动态生成脚本(流水线脚本),得到待生成流水线。执行该流水线脚本,并在执行完成后释放该流水线脚本和上述配置好的目标容器。
参见图4,图4是本发明一示例性实施例示出的流水线业务流程图,如图4所示,可以通过运维人员/管理人员进行手动触发图示触发器,也可以通过研发人员对代码仓库的代码合并请求触发图示触发器,还可以通过预先设定的定时器Timer对图示触发器进行触发,得到触发请求信息,以触发流水线,将该触发请求消息传输给Jenkins流水线,基于目标项目的触发项目标识信息从数据库(也即预设项目数据库)中获取项目信息(也即项目预设信息),其中数据库中的项目信息可以是预先通过看板系统写入的项目信息。在流水线执行过程中动态创建运行环境(确定目标容器),从共享库(预设共享库)中确定目标方法,目标方法的类型包括但不限于拉取代码、编译、扫描、单元测试、自动化测试、打包、部署等,基于该目标方法生成流水线脚本,执行流水线指令,并生成执行结果,将该执行结果通知给到相关人员,相关人员包括但不限于运维人员、管理人员、研发人员中至少之一,可以根据触发方式确定相关人员。在执行完成后,释放空间(目标容器)和流水线脚本。
参见图5,图5是本发明一示例性实施例示出的流水线动态生成流程图,如图5所示,首先根据流水线JobName获取项目名(触发项目标识信息),基于该项目名获取项目信息(项目预设信息),首先判断是否存在自定义方法,若有则获取自定义内容(自定义方法),否则,获取与外部系统接口,判断是否执行编译,若是,获取编译方法,若否判断是否执行单元测试,若是,获取单元测试方法,若否判断是否扫描,若是则获取扫描方法,若否判断是否自动化测试,若是则获取自动化测试方法,若否则判断是否部署,若是则获取是否部署方法,若是则动态生成流水线脚本,将该流水线脚本部署到对应的流水线中,完成流水线的动态生成。
上述实施例提供的流水线生成方法,通过获取目标项目的触发请求信息,根据触发方式信息确定流水线模板,根据触发项目标识信息从预设项目数据库中确定目标项目的项目预设信息,基于项目预设信息从预设共享库的预设工作容器库中确定目标节点配置数据,以在集群环境中创建目标容器,从预设方法共享库中确定流水线模板对应的目标方法,根据目标方法生成流水线脚本,以生成待生成流水线,通过预设共享库来对预设工作容器库进行管理,能够防止目标节点配置数据暴露在Jenkins服务器中被人篡改导致流水线构建失败的风险,灵活性高。
上述实施例提供的流水线生成方法能够适配多种业务,其生成过程可以为动态的过程,旨在对所有项目的jenkinsfile脚本文件进行统一处理和管理,每次执行流水线工作的时候动态生成完成的流水线脚本,增加脚本的可维护性。降低由于Jenkins上配置信息被篡改导致jenkinsfile脚本不能使用的风险。
通过将流水线模板归纳为5个大类,其中一个是自定义流水线,总的来说只有4个jenkinsfile脚本文件框架为成百上千个项目服务。当生成一个流水线后,当获取到新的新增项目的触发消息,若触发方式与该流水线生成时的触发方式相同,则此时该新增项目对应的新增流水线模块与之前生成的流水线的模板相同,此时,可以直接复用该流水线的流水线脚本执行该新增项目,实现一个流水线脚本服务多个项目。
通过对jenkinsfile脚本的各执行环节进行抽象管理,把接入到Jenkins中的项目的所有执行环节整合成一套并按照框架形式进行管理,共享库中存放多种编译方法,多种扫描方法,多种部署方法等等,能适配不同编码方式和不同类型的业务。
通过使用动态生成脚本的方式,在执行流水线时动态生成脚本,保证流水线中执行的方法是实时获取到共享库中的最新方法,且流水线完成之后脚本被及时释放,节约维护脚本成本,降低由于jenkinsfile脚本问题导致软件持续集成和持续发布失败的问题。
通过构建共享库,且该共享库中包含了对Pod库的管理,防止Pod配置信息暴露在Jenkins服务器中被人篡改导致流水线构建失败的风险。
图6是本申请的一示例性实施例示出的流水线生成系统的框图。如图6所示,该示例性的流水线生成系统600包括:
获取模块601,用于获取目标项目的触发请求信息,触发请求信息包括触发方式信息和目标项目的触发项目标识信息;
模板确定模块602,用于根据触发方式信息确定流水线模板;
项目信息确定模块603,用于根据触发项目标识信息从预设项目数据库中确定目标项目的项目预设信息;
工作空间创建模块604,用于基于项目预设信息从预设共享库的预设工作容器库中确定目标节点配置数据,以在集群环境中创建目标容器,目标容器用于运行流水线脚本;
动态生成脚本模块605,用于从预设方法共享库中确定流水线模板对应的目标方法,根据目标方法生成流水线脚本,以生成待生成流水线。
在一实施例中,该系统还包括预设共享库,预设共享库包括预设工作容器库,其中:
预设工作容器库包括多个工作容器的预设配置数据,以供将至少一个预设配置数据确定为目标节点配置数据,以在集群环境中创建待生成流水线的目标容器,预设配置数据包括工作容器的依赖镜像、空间大小、挂载到宿主机路径。
在一实施例中,该该系统还包括预设共享库,预设共享库还包括预设方法共享库,预设方法共享库包括数据库接口、外围系统接口库、执行模块库、结果发布库中至少之一,以提供目标方法。
在一实施例中,该系统还包括预设共享库,预设共享库还包括预设自定义库,以供用户输入自定义方法内容。
需要说明的是,上述实施例所提供的流水线生成系统与上述实施例图2所提供的流水线生成方法属于同一构思,其中各个模块和单元执行操作的具体方式已经在方法实施例中进行了详细描述,此处不再赘述。上述实施例所提供的流水线生成系统在实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将装置的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能,本处也不对此进行限制。
本申请的实施例还提供了一种电子设备,包括:一个或多个处理器;存储装置,用于存储一个或多个程序,当所述一个或多个程序被所述一个或多个处理器执行时,使得所述电子设备实现上述各个实施例中提供的流水线生成方法。
图7示出了适于用来实现本申请实施例的电子设备的计算机系统的结构示意图。需要说明的是,图7示出的电子设备的计算机系统1100仅是一个示例,不应对本申请实施例的功能和使用范围带来任何限制。
如图7所示,计算机系统1100包括中央处理单元(Central Processing Unit,CPU)1101,其可以根据存储在只读存储器(Read-Only Memory,ROM)1102中的程序或者从储存部分1108加载到随机访问存储器(Random Access Memory,RAM)1103中的程序而执行各种适当的动作和处理,例如执行上述实施例中所述的方法。在RAM1103中,还存储有系统操作所需的各种程序和数据。CPU 1101、ROM 1102以及RAM1103通过总线1104彼此相连。输入/输出(Input/Output,I/O)接口1105也连接至总线1104。
以下部件连接至I/O接口1105:包括键盘、鼠标等的输入部分1106;包括诸如阴极射线管(Cathode Ray Tube,CRT)、液晶显示器(Liquid Crystal Display,LCD)等以及扬声器等的输出部分1107;包括硬盘等的储存部分1108;以及包括诸如LAN(Local AreaNetwork,局域网)卡、调制解调器等的网络接口卡的通信部分1109。通信部分1109经由诸如因特网的网络执行通信处理。驱动器1110也根据需要连接至I/O接口1105。可拆卸介质1111,诸如磁盘、光盘、磁光盘、半导体存储器等等,根据需要安装在驱动器1110上,以便于从其上读出的计算机程序根据需要被安装入储存部分1108。
特别地,根据本申请的实施例,上文参考流程图描述的过程可以被实现为计算机软件程序。例如,本申请的实施例包括一种计算机程序产品,其包括承载在计算机可读介质上的计算机程序,该计算机程序包含用于执行流程图所示的方法的计算机程序。在这样的实施例中,该计算机程序可以通过通信部分1109从网络上被下载和安装,和/或从可拆卸介质1111被安装。在该计算机程序被中央处理单元(CPU)1101执行时,执行本申请的系统中限定的各种功能。
需要说明的是,本申请实施例所示的计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质或者是上述两者的任意组合。计算机可读存储介质例如可以是电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子可以包括但不限于:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机访问存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(Erasable Programmable Read Only Memory,EPROM)、闪存、光纤、便携式紧凑磁盘只读存储器(Compact Disc Read-Only Memory,CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本申请中,计算机可读的信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的计算机程序。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读的信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。计算机可读介质上包含的计算机程序可以用任何适当的介质传输,包括但不限于:无线、有线等等,或者上述的任意合适的组合。
附图中的流程图和框图,图示了按照本申请各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。其中,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,上述模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图或流程图中的每个方框、以及框图或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
描述于本申请实施例中所涉及到的单元可以通过软件的方式实现,也可以通过硬件的方式来实现,所描述的单元也可以设置在处理器中。其中,这些单元的名称在某种情况下并不构成对该单元本身的限定。
本申请的另一方面还提供了一种计算机可读存储介质,其上存储有计算机程序,该计算机程序被计算机的处理器执行时,使计算机执行如前所述的流水线生成方法。该计算机可读存储介质可以是上述实施例中描述的电子设备中所包含的,也可以是单独存在,而未装配入该电子设备中。
本申请的另一方面还提供了一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质中。计算机设备的处理器从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该计算机设备执行上述各个实施例中提供的流水线生成方法。
上述实施例仅示例性说明本发明的原理及其功效,而非用于限制本发明。任何熟悉此技术的人士皆可在不违背本发明的精神及范畴下,对上述实施例进行修饰或改变。因此,但凡所属技术领域中具有通常知识者在未脱离本发明所揭示的精神与技术思想下所完成的一切等效修饰或改变,仍应由本发明的权利要求所涵盖。
需要说明的是,本申请中,“第一”、“第二”等仅为对相似对象的区分,并非是对相似对象的顺序限定或先后次序限定。所描述的“包括”、“具有”等变形,表示该词语的主语所涵盖的范围除该词语所示出的示例外,并不排他。
可以理解的是,在本申请中记载的各种数字编号、步序编号等标号为描述方便进行的区分,并不用来限制本申请的范围。本申请标号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定。
Claims (12)
1.一种流水线生成方法,其特征在于,所述方法包括:
获取目标项目的触发请求信息,所述触发请求信息包括触发方式信息和所述目标项目的触发项目标识信息;
根据所述触发方式信息确定流水线模板;
根据所述触发项目标识信息从预设项目数据库中确定所述目标项目的项目预设信息;
基于所述项目预设信息从预设共享库的预设工作容器库中确定目标节点配置数据,以在集群环境中创建目标容器,所述目标容器用于运行流水线脚本;
从所述预设方法共享库中确定所述流水线模板对应的目标方法,根据所述目标方法生成流水线脚本,以生成待生成流水线。
2.如权利要求1所述的流水线生成方法,其特征在于,从所述预设方法共享库中确定所述流水线模板对应的目标方法包括:
获取所述预设方法共享库中确定所述流水线模板对应的多个预设方法,以及各所述预设方法的方法标识和方法更新时间;
若存在至少两个具有相同方法标识的所述预设方法,将所述方法更新时间与当前时间最近的一个所述预设方法确定为目标方法。
3.如权利要求1所述的流水线生成方法,其特征在于,根据所述触发项目标识信息从预设项目数据库中确定所述目标项目的项目预设信息之前,所述方法还包括:
获取用户通过看板系统写入的写入信息,基于所述写入信息生成所述项目预设信息。
4.如权利要求1所述的流水线生成方法,其特征在于,从所述预设方法共享库中确定所述流水线模板对应的目标方法,根据所述目标方法生成所述待生成流水线的流水线脚本,以生成所述待生成流水线之后,所述方法还包括
通过所述目标容器运行所述流水线脚本;
当所述待生成流水线执行完成,释放所述流水线脚本,并释放所述目标容器。
5.如权利要求1所述的流水线生成方法,其特征在于,根据所述触发方式信息确定待生成流水线的流水线模板包括以下至少之一:
若所述触发方式信息包括管理人员手动触发,将所述流水线模板确定为产品构建流水线模板;
若所述触发方式信息包括运维人员手动触发,将所述流水线模板确定为软件部署流水线模板;
若所述触发方式信息包括定时触发,将所述流水线模板确定为定时检查流水线模板;
若所述触发方式信息包括代码合并请求触发,将所述流水线模板确定为代码合并检查流水线模板;
若所述触发项目标识信息为预设目标项目标识,将所述流水线模板确定为自定义流水线模板,并在所述预设项目数据库中配置所述预设目标项目标识对应的自定义项目的项目自定义信息。
6.如权利要求1-5任一项所述的流水线生成方法,其特征在于,从所述预设共享库中确定所述流水线模板对应的目标方法,根据所述目标方法生成流水线脚本,以生成待生成流水线之后,所述方法还包括:
再次获取所述目标项目的新的触发请求信息;
获取所述目标方法的方法更新状态;
若所述方法更新状态为已更新,以更新后的更新方法替换所述目标方法,以生成新的所述待生成流水线。
7.一种流水线生成系统,其特征在于,所述系统包括:
获取模块,用于获取目标项目的触发请求信息,所述触发请求信息包括触发方式信息和所述目标项目的触发项目标识信息;
模板确定模块,用于根据所述触发方式信息确定流水线模板;
项目信息确定模块,用于根据所述触发项目标识信息从预设项目数据库中确定所述目标项目的项目预设信息;
工作空间创建模块,用于基于所述项目预设信息从预设共享库的预设工作容器库中确定目标节点配置数据,以在集群环境中创建目标容器,所述目标容器用于运行流水线脚本;
动态生成脚本模块,用于从所述预设方法共享库中确定所述流水线模板对应的目标方法,根据所述目标方法生成流水线脚本,以生成待生成流水线。
8.如权利要求7所述流水线生成系统,其特征在于,所述系统还包括预设共享库,所述预设共享库包括预设工作容器库,其中:
所述预设工作容器库包括多个工作容器的预设配置数据,以供将至少一个所述预设配置数据确定为所述目标节点配置数据,以在集群环境中创建所述待生成流水线的目标容器,所述预设配置数据包括所述工作容器的依赖镜像、空间大小、挂载到宿主机路径。
9.如权利要求7所述流水线生成系统,其特征在于,所述系统还包括预设共享库,所述预设共享库还包括预设方法共享库,所述预设方法共享库包括数据库接口、外围系统接口库、执行模块库、结果发布库中至少之一,以提供所述目标方法。
10.如权利要求7所述流水线生成系统,其特征在于,所述系统还包括预设共享库,所述预设共享库还包括预设自定义库,以供用户输入自定义方法内容。
11.一种电子设备,其特征在于,所述电子设备包括:
一个或多个处理器;
存储装置,用于存储一个或多个程序,当所述一个或多个程序被所述一个或多个处理器执行时,使得所述电子设备实现如权利要求1至6中任一项所述的方法。
12.一种计算机可读存储介质,其特征在于,其上存储有计算机程序,当所述计算机程序被计算机的处理器执行时,使计算机执行权利要求1至6中任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211513143.3A CN115858004A (zh) | 2022-11-28 | 2022-11-28 | 流水线生成方法、系统、设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211513143.3A CN115858004A (zh) | 2022-11-28 | 2022-11-28 | 流水线生成方法、系统、设备及存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115858004A true CN115858004A (zh) | 2023-03-28 |
Family
ID=85667861
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202211513143.3A Pending CN115858004A (zh) | 2022-11-28 | 2022-11-28 | 流水线生成方法、系统、设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115858004A (zh) |
-
2022
- 2022-11-28 CN CN202211513143.3A patent/CN115858004A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110795219B (zh) | 适用于多种计算框架的资源调度方法及系统 | |
CN108108297B (zh) | 自动化测试的方法和装置 | |
CN111666189A (zh) | 一种声明式可视化配置Prometheus监控告警的方法和系统 | |
CN112085217A (zh) | 部署人工智能服务的方法、装置、设备及计算机介质 | |
CN108416657B (zh) | 一种基于咨询服务的订单生成方法及设备 | |
CN113296758B (zh) | 一种前端组件库构建方法、装置及存储介质 | |
CN112395736B (zh) | 一种分布交互仿真系统的并行仿真作业调度方法 | |
CN112256406B (zh) | 作业流程平台化调度方法 | |
CN113934832A (zh) | 基于会话的交互处理方法、装置、设备、介质及程序产品 | |
CN112435072A (zh) | 一种模型创建方法、装置、电子设备及存储介质 | |
CN114356351A (zh) | 一种基于微服务的应用部署系统及方法 | |
CN117632372A (zh) | 一种基于Helm实现的持续部署管理方法 | |
CN115185496A (zh) | 一种基于Flowable工作流引擎的业务编排方法 | |
CN113448678A (zh) | 应用信息生成方法、部署方法及装置、系统、存储介质 | |
CN114912897A (zh) | 工作流执行方法、工作流编排方法及电子设备 | |
CN117806654A (zh) | 一种基于Tekton的自定义云原生DevOps流水线系统及方法 | |
CN113919158A (zh) | 一种用于飞行控制面板的仿真方法、装置及存储介质 | |
CN113126961B (zh) | 流水线处理方法、装置和存储介质 | |
CN117055913A (zh) | 一种感知系统环境搭建方法、装置、设备及介质 | |
CN115858004A (zh) | 流水线生成方法、系统、设备及存储介质 | |
CN114265595B (zh) | 一种基于智能合约的云原生应用开发与部署系统和方法 | |
CN115951887A (zh) | 一种控件创建方法、装置、设备及介质 | |
CN115037587A (zh) | 网络设备配置自动发放方法、装置、设备及存储介质 | |
CN112527443A (zh) | 提示框显示方法、装置、电子设备及计算机可读存储介质 | |
Harper et al. | Deploying healthcare simulation models using containerization and continuous integration |
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 |