CN115185561A - 一种基于Serveless Jenkins的CICD系统和实现方法 - Google Patents
一种基于Serveless Jenkins的CICD系统和实现方法 Download PDFInfo
- Publication number
- CN115185561A CN115185561A CN202210850847.3A CN202210850847A CN115185561A CN 115185561 A CN115185561 A CN 115185561A CN 202210850847 A CN202210850847 A CN 202210850847A CN 115185561 A CN115185561 A CN 115185561A
- Authority
- CN
- China
- Prior art keywords
- service
- jenkins
- application
- code
- construction
- 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
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/60—Software deployment
- G06F8/65—Updates
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5027—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computer Security & Cryptography (AREA)
- Stored Programmes (AREA)
Abstract
本发明公开了一种基于Serveless Jenkins的CICD系统和实现方法,包括:代码仓库、应用中心、Serverless Jenkins以及k8s集群服务四个部分;开发人员将通过审核的代码提交到代码仓库;应用中心承担着开发人员对于项目应用构建信息的统一管理,同时还要协调好Serverless Jenkins服务和k8s集群服务的部署和调度;Serverless Jenkins为一个serverless集群,部署了一个JenkinsMaster服务;k8s集群服务接收来自应用中心的操作请求,负责更新。本发明可以支持开发人员自定义构建流程模板,动态添加容器镜像服务仓库以及合理使用机器资源。
Description
技术领域
本发明属于新一代信息技术领域,特别涉及一种基于Serveless Jenkins的CICD系统。
背景技术
传统上在软件开发中(无论是瀑布模型还是敏捷方式,敏捷也比较传统),都由“开发团队”来构建 软件。开发团队需要与运维团队进行了大规模的交接”。运维团队负责执行一系列部署 “活动,将软件代码移至生产环境,负责维护后续的系统稳定运行。生产环境的基础设施与开发或测试不同。需要有额外检查和平衡,以确保它一切功能正常。部署是由不同的人完成的,运维团队之前从未见过或听说过任何此类软件。在没有CICD的情况下,手动构建和部署软件,对于开发和运维人员来说是乏味且令人沮丧的。这些手动任务会减缓交付过程,并最终阻碍创新。对于企业而言如果没有自动化的协助,那么在工作效率上就输掉了。基于目前CICD行业开源软件,虽然能解决大部分cicd功能,对于企业一些实际情况需求却难以满足,比如无法同时支持私有化部署和公有云部署;无法自定义代码构建规则;动态接入docker镜像容器服务以及在非运行期间合理节省未使用的机器资源等等问题。因此,有必要构建适合企业自身需求的一套cicd系统。
发明内容
为了解决上述问题,本发明提供了一种可以支持开发人员自定义构建流程模板,动态添加容器镜像服务仓库以及合理使用机器资源的基于Serveless Jenkins的CICD系统和实现方法。
为了实现上述目的,本发明采用以下技术方案:一种基于Serveless Jenkins的CICD系统,包括:代码仓库、应用中心、Serverless Jenkins以及k8s集群服务四个部分;
代码仓库支持多分支多版本控制,同时支持Webhook代码更新推送事件, 开发人员将通过审核的代码提交到代码仓库;
应用中心作为整个CICD系统的核心模块,承担着开发人员对于项目应用构建信息的统一管理,同时还要协调好Serverless Jenkins服务和k8s集群服务的部署和调度;
Serverless Jenkins为一个serverless集群,部署了一个JenkinsMaster服务,master服务负责Jenkins服务管理;
k8s集群服务接收来自应用中心的操作请求,负责k8sdeployment、k8sIngress以及k8sService的更新。
优选地,所述代码仓库采用阿里云Code、Github或者码云中的一种。
优选地,应用中心中应用部署信息包含以下信息:projectName(项目名称、对应k8s的命名空间),appName(应用名称,对应k8s中的部署名和Service命名),appType(应用类型,目前支持应用语言类型为:Java、NodeJs、Node、Python以及Go),clusterName(集群名称),codeLibraryAddress(代码仓库地址,包含代码分支或者tag),dockerAccount(容器镜像服务信息),moduleNames(模块名、需要包含构建的模块名,以逗号隔开),ingressAddress(服务ingress域名),端口号(容器内部端口号)。
优选地,当接收到开发人员的部署或者构建请求时,应用中心则需要根据应用的信息进行工作调度;
(1)如果是镜像构建请求,应用中心则会读取相应对应部署Jenkins容器执行模板,通知serverless jenkins模块创建相应的slave服务,同时Jenkins也会提供相应的容器启动yaml模板(kubernetes pod template)作为slavek8s pod资源描述,构建过程中涉及的docker账号都是动态根据应用参数配置读取;
(2)如果是应用服务部署,应用中心则会通过k8sapi server接口进行服务部署创建、Service创建以及Ingress创建,部署过程中涉及的docker账号都是动态根据应用参数配置读取配置。
优选地,Serverless Jenkins采用阿里云Serverless Kubernetes(ASK)集群,作为开发人员,无需购买节点即可直接部署容器应用,无需对集群进行节点维护和容量规划;当一个Jenkins Slave被拉起来的时候(触发JenkinsSlave构建机制有两种,一种是在应用中心手动触发,另外一种是通过webhook钩子推送事件触发)。
优选地,构建pipeline流程主要包含以下步骤:
(1)代码检查
根据项目中的代码仓库信息进行元代码拉取,拉取完后对代码进行秘钥保密信息进行审查,若发现相关保密信息则停止pipeline构建流程,无任何异常则视为代码检查通过;
(2)代码编译
根据应用语言类型选择相应的应用编译工具进行代码编辑,java语言则使用maven+open jdk,前端项目则采取nodejs技术,构造器都是通过模板代码进行配置,编译成功后则会将会相应的代码文件保存到指定目录中,如果失败的话则同样会终止pipeline构建;
(3)docker镜像构建
Docker容器镜像构建过程中的打包工具采用kaniko,kaniko接受三个参数:一个Dockerfile ,一个构建的上下文,一个将镜像推送到的注册表(容器镜像目标地址);kaniko在执行程序镜像中提取基本镜像的文件系统;然后,在 Dockerfile 中执行任何命令,快照用户空间中的文件系统;Kaniko 在每个命令后都会将一层已更改的文件附加到基本镜像;最后,执行程序将新镜像推送到指定的注册表。
优选地,Jenkins代码构建流程是通过pipeline流水线控制,在实际应用过程中可以动态更新pipeline构建逻辑,加入一个新的或者减少一个旧的构建步骤。
优选地,根据应用配置可以启动多pod模式从而提高应用服务的一个并发执行能力;在应用升级过程中可以选择滚动重启升级,保证服务永远至少有一部分服务在线使用。
一种基于Serveless Jenkins的CICD实现方法,其特征在于:
开发人员在代码变更后将代码推送到代码仓库,然后通过应用中心服务部署功能启动代码构建部署流程,或者通过代码仓库自带的Webhook功能检测到相应代码变化调用Jenkins服务的回调触发器从而启动代码构建流程,应用中心根据开发人员保存的部署配置信息选择相应的构建流程模板数据,调用ServerlessJenkins集群,唤起相应的构建podslave进行代码构建,slave启动后根据数据中的pipeline信息执行代码构建,构建完成后,Jenkins服务会通知应用中心,应用中心会根据配置选择是否自动更新kubernets(简称k8s)集群中对应的服务应用,也可支持一键式手动重新更新相应的k8s服务应用。
本发明可以支持开发人员自定义构建流程模板,动态添加容器镜像服务仓库以及合理使用机器资源。
附图说明
图1为本发明的流程示意图;
图2为本发明的架构图。
具体实施方式
下面结合附图对本发明作进一步详细的说明,但并不是对本发明保护范围的限制。
如图1和2所示,一种基于Serveless Jenkins的CICD系统,包含4个部分,即代码仓库、应用中心、Serverless Jenkins以及k8s集群服务。
开发人员将通过审核的代码提交到代码仓库,代码仓库支持多分支多版本控制,同时支持Webhook代码更新推送事件。目前主流的源代码仓库有阿里云Code、Github和码云,本发明采用阿里云Code。
应用中心作为整个CICD系统的核心模块,其承担着开发人员对于项目应用构建信息的统一管理,同时还要协调好Serverless Jenkins服务和k8s集群服务的部署和调度。应用中心中应用部署信息包含以下信息:projectName(项目名称、对应k8s的命名空间),appName(应用名称,对应k8s中的部署名和Service命名),appType(应用类型,目前支持应用语言类型为:Java、NodeJs、Node、Python以及Go),clusterName(集群名称),codeLibraryAddress(代码仓库地址,包含代码分支或者tag),dockerAccount(容器镜像服务信息),moduleNames(模块名、需要包含构建的模块名,以逗号隔开),ingressAddress(服务ingress域名),端口号(容器内部端口号)。
当接收到开发人员的部署或者构建请求时,应用中心则需要根据应用的信息进行工作调度。
如果是镜像构建请求,应用中心则会读取相应对应部署Jenkins容器执行模板,通知serverless jenkins模块创建相应的slave服务,同时Jenkins也会提供相应的容器启动yaml模板(kubernetes pod template)作为slavek8s pod资源描述,构建过程中涉及的docker账号都是动态根据应用参数配置读取;
如果是应用服务部署,应用中心则会通过k8sapi server接口进行服务部署创建、Service创建以及Ingress创建。部署过程中涉及的docker账号都是动态根据应用参数配置读取配置。
Serverless Jenkins本质是一个serverless集群,部署了一个JenkinsMaster服务,master服务负责Jenkins服务管理。本方案采用阿里云Serverless Kubernetes(ASK)集群,作为开发人员,无需购买节点即可直接部署容器应用,无需对集群进行节点维护和容量规划。当一个Jenkins Slave被拉起来的时候(触发JenkinsSlave构建机制有两种,一直是在应用中心手动触发,另外一种是通过webhook钩子推送事件触发),其构建pipeline流程主要包含以下步骤:
(1)代码检查
根据项目中的代码仓库信息进行元代码拉取,拉取完后对代码进行秘钥等保密信息进行审查,若发现相关保密信息则停止pipeline构建流程。无任何异常则视为代码检查通过。
(2)代码编译
根据应用语言类型选择相应的应用编译工具进行代码编辑,比如java语言则使用maven+open jdk,前端项目则采取nodejs技术等等。这些构造器都是通过模板代码进行配置。编译成功后则会将会相应的代码文件保存到指定目录中,如果失败的话则同样会终止pipeline构建。
(3)docker镜像构建
Docker容器镜像构建过程中的打包工具采用kaniko,kaniko接受三个参数:一个Dockerfile ,一个构建上下文以及将镜像推送到的注册表(容器镜像目标地址)。它在执行程序镜像中提取基本镜像的文件系统。然后,在 Dockerfile 中执行任何命令,快照用户空间中的文件系统。Kaniko 在每个命令后都会将一层已更改的文件附加到基本镜像。最后,执行程序将新镜像推送到指定的注册表。
由于Jenkins代码构建流程是通过pipeline流水线控制,在实际应用过程中可以动态更新pipeline构建逻辑,加入一个新的或者减少一个旧的构建步骤。
k8s集群服务接收来自应用中心的操作请求,负责k8sdeployment、k8sIngress以及k8sService的更新。根据应用配置可以启动多pod模式从而提高应用服务的一个并发执行能力。在应用升级过程中可以选择滚动重启升级,保证服务永远至少有一部分服务在线使用。
Claims (9)
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集群,作为开发人员,无需购买节点即可直接部署容器应用,无需对集群进行节点维护和容量规划;当一个JenkinsSlave被拉起来的时候,触发JenkinsSlave构建机制有两种,一种是在应用中心手动触发,另外一种是通过webhook钩子推送事件触发。
6.根据权利要求5所述的一种基于Serveless Jenkins的CICD系统,其特征在于:
其构建pipeline流程主要包含以下步骤:
(1)代码检查
根据项目中的代码仓库信息进行元代码拉取,拉取完后对代码进行秘钥保密信息进行审查,若发现相关保密信息则停止pipeline构建流程,无任何异常则视为代码检查通过;
(2)代码编译
根据应用语言类型选择相应的应用编译工具进行代码编辑,java语言则使用maven+open jdk,前端项目则采取nodejs技术,构造器都是通过模板代码进行配置,编译成功后则会将会相应的代码文件保存到指定目录中,如果失败的话则同样会终止pipeline构建;
(3)docker镜像构建
Docker容器镜像构建过程中的打包工具采用kaniko,kaniko接受三个参数:一个Dockerfile,一个构建的上下文,一个将镜像推送到的注册表;kaniko在执行程序镜像中提取基本镜像的文件系统;然后,在 Dockerfile 中执行任何命令,快照用户空间中的文件系统;Kaniko 在每个命令后都会将一层已更改的文件附加到基本镜像;最后,执行程序将新镜像推送到指定的注册表。
7.根据权利要求6所述的一种基于Serveless Jenkins的CICD系统,其特征在于:
Jenkins代码构建流程是通过pipeline流水线控制,在实际应用过程中可以动态更新pipeline构建逻辑,加入一个新的或者减少一个旧的构建步骤。
8.根据权利要求1-7中任意一项所述的一种基于Serveless Jenkins的CICD系统,其特征在于:
根据应用配置可以启动多pod模式从而提高应用服务的一个并发执行能力;在应用升级过程中可以选择滚动重启升级,保证服务永远至少有一部分服务在线使用。
9.根据权利要求8所述的一种基于Serveless Jenkins的CICD实现方法,基于权利要求8所述的系统实现,其特征在于:开发人员在代码变更后将代码推送到代码仓库,然后通过应用中心服务部署功能启动代码构建部署流程,或者通过代码仓库自带的Webhook功能检测到相应代码变化调用Jenkins服务的回调触发器从而启动代码构建流程,应用中心根据开发人员保存的部署配置信息选择相应的构建流程模板数据,调用ServerlessJenkins集群,唤起相应的构建pod slave进行代码构建,slave启动后根据数据中的pipeline信息执行代码构建,构建完成后,Jenkins服务会通知应用中心,应用中心会根据配置选择是否自动更新kubernets集群中对应的服务应用,也可支持一键式手动重新更新相应的k8s服务应用。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210850847.3A CN115185561A (zh) | 2022-07-20 | 2022-07-20 | 一种基于Serveless Jenkins的CICD系统和实现方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210850847.3A CN115185561A (zh) | 2022-07-20 | 2022-07-20 | 一种基于Serveless Jenkins的CICD系统和实现方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115185561A true CN115185561A (zh) | 2022-10-14 |
Family
ID=83519514
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210850847.3A Pending CN115185561A (zh) | 2022-07-20 | 2022-07-20 | 一种基于Serveless Jenkins的CICD系统和实现方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115185561A (zh) |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109522025A (zh) * | 2018-10-30 | 2019-03-26 | 深圳市小赢信息技术有限责任公司 | 一种基于git的代码发布系统 |
CN111475260A (zh) * | 2020-04-10 | 2020-07-31 | 杭州趣维科技有限公司 | 一种基于jenkins和kubernetes平台的可弹性CICD方法 |
CN114327484A (zh) * | 2021-12-31 | 2022-04-12 | 华云数据控股集团有限公司 | 支持多架构的k8s集成与部署方法、系统及存储介质 |
CN114721659A (zh) * | 2022-03-17 | 2022-07-08 | 阿里云计算有限公司 | 函数服务处理方法、装置及电子设备 |
-
2022
- 2022-07-20 CN CN202210850847.3A patent/CN115185561A/zh active Pending
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109522025A (zh) * | 2018-10-30 | 2019-03-26 | 深圳市小赢信息技术有限责任公司 | 一种基于git的代码发布系统 |
CN111475260A (zh) * | 2020-04-10 | 2020-07-31 | 杭州趣维科技有限公司 | 一种基于jenkins和kubernetes平台的可弹性CICD方法 |
CN114327484A (zh) * | 2021-12-31 | 2022-04-12 | 华云数据控股集团有限公司 | 支持多架构的k8s集成与部署方法、系统及存储介质 |
CN114721659A (zh) * | 2022-03-17 | 2022-07-08 | 阿里云计算有限公司 | 函数服务处理方法、装置及电子设备 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US8365140B2 (en) | Automated methods and systems for developing and deploying projects in parallel | |
US20200183896A1 (en) | Upgrade of heterogeneous multi-instance database clusters | |
CN105893050B (zh) | 一种基于PLMS、SVN和Jenkins进行软件项目全生命周期管理的方法 | |
CN110942387B (zh) | 基于微服务的电票业务功能构建方法和系统 | |
CN101411123B (zh) | 用于分布式数据处理系统端点上的集中式系统管理的方法、系统和计算机程序 | |
US8464246B2 (en) | Automation of mainframe software deployment | |
US8640098B2 (en) | Offline configuration and download approach | |
CN111158708A (zh) | 一种任务编排引擎系统 | |
CN113569987A (zh) | 模型训练方法和装置 | |
CN111857801B (zh) | 一种移动应用的构建方法 | |
CN109298868A (zh) | 测绘影像数据处理软件智能动态部署及卸载方法 | |
CN114461182A (zh) | 流水线构建的方法、装置、电子设备及计算机可读存储介质 | |
CN113050929A (zh) | 一种基于Hyperledger Fabric的智能合约开发运维一体化平台 | |
CN113312086A (zh) | 基于指令集的软件机器人系统及机器人运行方法 | |
CN115185561A (zh) | 一种基于Serveless Jenkins的CICD系统和实现方法 | |
CN115951970A (zh) | 一种异构多仿真软件集成开发环境 | |
CN115421847A (zh) | 支持多引擎的研发运维平台和cicd流水线的管理方法及设备 | |
CN113296809B (zh) | 一种声明式的通用Kubernetes调谐方法 | |
CN114428621A (zh) | 一种作业自动化部署方法 | |
CN112860438A (zh) | 一种基于云平台的分布式DevOps运行方法 | |
CN111897794A (zh) | 数据库的维护方法、装置、电子设备和存储介质 | |
CN117591132B (zh) | 一种服务的发布方法和发布系统 | |
CN115034095B (zh) | 一种敏态研发仿真系统 | |
CN116225464B (zh) | 一种平台的快速部署方法 | |
CN115993975A (zh) | 一种代码自动发布上线的方法及电子设备 |
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 |