现在的源调企业很多都在用Jenkins做持续集成 ,各个业务端都依靠Jenkins ,度系vivo Devops也是统设使用Jenkins来进行持续构建,部署Jenkins服务时如何保障服务的计实践高可用变得尤为重要
。 下面是自研s资目前Jenkins存在的一些问题。 Jenkins本身是源调单体的,即只能有一个Jenkins Master
。度系虽然你也可以在多台机器上部署多个Jenkins Master ,统设但这些Master之间没有联系,免费模板计实践都是自研s资各自把任务交给手下的slaver去执行
,没有任何交集。源调 基于以上情况
,vivo Devops对Jenkins的部署架构进行优化搭建,并且配套了一套Jenkins资源调度系统用于管理Jenkins资源。模板下载 目前业界也包含一些Jenkins 高可用的设计方式,但是并不能完全的满足解决上述问题,比如: 这是OpenStack团队使用的方案
。这个方案使用了gearman , gearman是个任务分发框架
。 需要在每个Master上安装好gearman的插件,并配置好能连接到gearman server ,同时在每个Master必须建立相同的云计算job。 之后运行任务的流程如下
: 优点 : 这样各个salver资源可以得到充分利用,某个master挂掉另外的master可以继续服务 。源码下载 弊端: 每个master的slave必须配置一致,否则会造成job调度错误
,同时会造成一些资源的浪费。当一个master出现问题
,该master的任务不会进行自动重新分配。 目前Jenkins的配置文件都是直接在硬盘上以文件形式存储的 ,你在JENKINS_HOME的个文件夹下能看到各种.xml文件。有些公司在Jenkins上进行二次开发,高防服务器将Jenkins的数据存储方式改为数据库存储
,这样前端可以起多个Jenkins服务
,后端连相同的数据库即可 。数据库也有比较成熟的高可用方案 。 优点: 可以达到Jenkins的高可用也就是某个master挂掉另外的master可以继续服务 。 弊端
: 需要对Jenkins进行二次开发,使用数据库会降低读取资源效率下降。 平时让Jenkins A机器提供服务 ,并使用SCM Sync configuration plugin保存数据 ,JenkinsA机器修改配置后触发Jenkins B更新配置,一旦Jenkins A出现问题挂掉后
,切换到备机Jenkins B上。 优点: 可以达到Jenkins的高可用
,当master宕机后会进行切换到备机上。 弊端: 会有一批Jenkins备机存在资源浪费 ,切换master时间过长,会导致有段时间Jenkins服务不可用
。 由于目前业界的一些实现还不能完全的满足我们目前的需求,所以我们进行了vivo jenkins scheduler系统的设计与实现。该系统需要达到如下的目的: ①提供精准流控方式
,在jenkins构建出现请求量过高的时候可以进行流控和持久化操作
,减少对目前系统的冲击。
一
、自研s资前言
二 、业界实现
2.2 方案二 改造Jenkins的文件存储方式
三、vivo Jenkins Scheduler系统目标