一种基于ServelessJenkins的CICD系统和实现方法技术方案

技术编号:35220547 阅读:22 留言:0更新日期:2022-10-15 10:37
本发明专利技术公开了一种基于Serveless Jenkins的CICD系统和实现方法,包括:代码仓库、应用中心、Serverless Jenkins以及k8s集群服务四个部分;开发人员将通过审核的代码提交到代码仓库;应用中心承担着开发人员对于项目应用构建信息的统一管理,同时还要协调好Serverless Jenkins服务和k8s集群服务的部署和调度;Serverless Jenkins为一个serverless集群,部署了一个JenkinsMaster服务;k8s集群服务接收来自应用中心的操作请求,负责更新。本发明专利技术可以支持开发人员自定义构建流程模板,动态添加容器镜像服务仓库以及合理使用机器资源。容器镜像服务仓库以及合理使用机器资源。容器镜像服务仓库以及合理使用机器资源。

【技术实现步骤摘要】
一种基于Serveless Jenkins的CICD系统和实现方法


[0001]本专利技术属于新一代信息
,特别涉及一种基于Serveless Jenkins的CICD系统。

技术介绍

[0002]传统上在软件开发中(无论是瀑布模型还是敏捷方式,敏捷也比较传统),都由“开发团队”来构建 软件。开发团队需要与运维团队进行了大规模的交接”。运维团队负责执行一系列部署
ꢀ“
活动,将软件代码移至生产环境,负责维护后续的系统稳定运行。生产环境的基础设施与开发或测试不同。需要有额外检查和平衡,以确保它一切功能正常。部署是由不同的人完成的,运维团队之前从未见过或听说过任何此类软件。在没有CICD的情况下,手动构建和部署软件,对于开发和运维人员来说是乏味且令人沮丧的。这些手动任务会减缓交付过程,并最终阻碍创新。对于企业而言如果没有自动化的协助,那么在工作效率上就输掉了。基于目前CICD行业开源软件,虽然能解决大部分cicd功能,对于企业一些实际情况需求却难以满足,比如无法同时支持私有化部署和公有云部署;无法自定义代码构建规则;动态接入docker镜像容器服务以及在非运行期间合理节省未使用的机器资源等等问题。因此,有必要构建适合企业自身需求的一套cicd系统。

技术实现思路

[0003]为了解决上述问题,本专利技术提供了一种可以支持开发人员自定义构建流程模板,动态添加容器镜像服务仓库以及合理使用机器资源的基于Serveless Jenkins的CICD系统和实现方法。
[0004]为了实现上述目的,本专利技术采用以下技术方案:一种基于Serveless Jenkins的CICD系统,包括:代码仓库、应用中心、Serverless Jenkins以及k8s集群服务四个部分;代码仓库支持多分支多版本控制,同时支持Webhook代码更新推送事件, 开发人员将通过审核的代码提交到代码仓库;应用中心作为整个CICD系统的核心模块,承担着开发人员对于项目应用构建信息的统一管理,同时还要协调好Serverless Jenkins服务和k8s集群服务的部署和调度;Serverless Jenkins为一个serverless集群,部署了一个JenkinsMaster服务,master服务负责Jenkins服务管理;k8s集群服务接收来自应用中心的操作请求,负责k8sdeployment、k8sIngress以及k8sService的更新。
[0005]优选地,所述代码仓库采用阿里云Code、Github或者码云中的一种。
[0006]优选地,应用中心中应用部署信息包含以下信息:projectName(项目名称、对应k8s的命名空间),appName(应用名称,对应k8s中的部署名和Service命名),appType(应用类型,目前支持应用语言类型为:Java、NodeJs、Node、Python以及Go),clusterName(集群名称),codeLibraryAddress(代码仓库地址,包含代码分支或者tag),dockerAccount(容器镜
像服务信息),moduleNames(模块名、需要包含构建的模块名,以逗号隔开),ingressAddress(服务ingress域名),端口号(容器内部端口号)。
[0007]优选地,当接收到开发人员的部署或者构建请求时,应用中心则需要根据应用的信息进行工作调度;(1)如果是镜像构建请求,应用中心则会读取相应对应部署Jenkins容器执行模板,通知serverless jenkins模块创建相应的slave服务,同时Jenkins也会提供相应的容器启动yaml模板(kubernetes pod template)作为slavek8s pod资源描述,构建过程中涉及的docker账号都是动态根据应用参数配置读取;(2)如果是应用服务部署,应用中心则会通过k8sapi server接口进行服务部署创建、Service创建以及Ingress创建,部署过程中涉及的docker账号都是动态根据应用参数配置读取配置。
[0008]优选地,Serverless Jenkins采用阿里云Serverless Kubernetes(ASK)集群,作为开发人员,无需购买节点即可直接部署容器应用,无需对集群进行节点维护和容量规划;当一个Jenkins Slave被拉起来的时候(触发JenkinsSlave构建机制有两种,一种是在应用中心手动触发,另外一种是通过webhook钩子推送事件触发)。
[0009]优选地,构建pipeline流程主要包含以下步骤:(1)代码检查根据项目中的代码仓库信息进行元代码拉取,拉取完后对代码进行秘钥保密信息进行审查,若发现相关保密信息则停止pipeline构建流程,无任何异常则视为代码检查通过;(2)代码编译根据应用语言类型选择相应的应用编译工具进行代码编辑,java语言则使用maven+open jdk,前端项目则采取nodejs技术,构造器都是通过模板代码进行配置,编译成功后则会将会相应的代码文件保存到指定目录中,如果失败的话则同样会终止pipeline构建;(3)docker镜像构建Docker容器镜像构建过程中的打包工具采用kaniko,kaniko接受三个参数:一个Dockerfile ,一个构建的上下文,一个将镜像推送到的注册表(容器镜像目标地址);kaniko在执行程序镜像中提取基本镜像的文件系统;然后,在 Dockerfile 中执行任何命令,快照用户空间中的文件系统;Kaniko 在每个命令后都会将一层已更改的文件附加到基本镜像;最后,执行程序将新镜像推送到指定的注册表。
[0010]优选地,Jenkins代码构建流程是通过pipeline流水线控制,在实际应用过程中可以动态更新pipeline构建逻辑,加入一个新的或者减少一个旧的构建步骤。
[0011]优选地,根据应用配置可以启动多pod模式从而提高应用服务的一个并发执行能力;在应用升级过程中可以选择滚动重启升级,保证服务永远至少有一部分服务在线使用。
[0012]一种基于Serveless Jenkins的CICD实现方法,其特征在于:开发人员在代码变更后将代码推送到代码仓库,然后通过应用中心服务部署功能启动代码构建部署流程,或者通过代码仓库自带的Webhook功能检测到相应代码变化调用Jenkins服务的回调触发器从而启动代码构建流程,应用中心根据开发人员保存的部署配
置信息选择相应的构建流程模板数据,调用ServerlessJenkins集群,唤起相应的构建pod slave进行代码构建,slave启动后根据数据中的pipeline信息执行代码构建,构建完成后,Jenkins服务会通知应用中心,应用中心会根据配置选择是否自动更新kubernets(简称k8s)集群中对应的服务应用,也可支持一键式手动重新更新相应的k8s服务应用。
[0013]本专利技术可以支持开发人员自定义构建流程模板,动态添加容器镜像服务仓库以及合理使用机本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种基于Serveless Jenkins的CICD系统,其特征在于:其包括:代码仓库、应用中心、Serverless Jenkins以及k8s集群服务四个部分;代码仓库支持多分支多版本控制,同时支持Webhook代码更新推送事件, 开发人员将通过审核的代码提交到代码仓库;应用中心作为整个CICD系统的核心模块,承担着开发人员对于项目应用构建信息的统一管理,同时还要协调好Serverless Jenkins服务和k8s集群服务的部署和调度;Serverless Jenkins为一个serverless集群,部署了一个JenkinsMaster服务,master服务负责Jenkins服务管理;k8s集群服务接收来自应用中心的操作请求,负责k8sdeployment、k8sIngress以及k8sService的更新。2.根据权利要求1所述的一种基于Serveless Jenkins的CICD系统,其特征在于:所述代码仓库采用阿里云Code、Github或者码云中的一种。3.根据权利要求1所述的一种基于Serveless Jenkins的CICD系统,其特征在于:应用中心中应用部署信息包含以下信息:projectName,appName,appType,clusterName,codeLibraryAddress,dockerAccount,moduleNames,ingressAddress,端口号。4.根据权利要求3所述的一种基于Serveless Jenkins的CICD系统,其特征在于:当接收到开发人员的部署或者构建请求时,应用中心则需要根据应用的信息进行工作调度;(1)如果是镜像构建请求,应用中心则会读取相应对应部署Jenkins容器执行模板,通知serverless jenkins模块创建相应的slave服务,同时Jenkins也会提供相应的容器启动yaml模板作为slavek8s pod资源描述,构建过程中涉及的docker账号都是动态根据应用参数配置读取;(2)如果是应用服务部署,应用中心则会通过k8sapi server接口进行服务部署创建、Service创建以及Ingress创建,部署过程中涉及的docker账号都是动态根据应用参数配置读取配置。5.根据权利要求4所述的一种基于Serveless Jenkins的CICD系统,其特征在于:Serverless Jenkins采用阿里云Serverless Kubernetes集群,作为开发人员,无需购买节点即可直接部署容器应用,无需对集群进行节点维护和容量规划;当一个Jenkins Slave被拉起来的时候,触发JenkinsSlave构建机制有两种,一种是在应用中心手动触发,另外一种是通过w...

【专利技术属性】
技术研发人员:闫安旷晓鹏
申请(专利权)人:杭州雷数科技有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1