基于Kubernetes的Jenkins构建集群实践
李华强 乐视致新
2017.09.17
目 录
1
2
3
4
Jenkins分布式构建架构
基于Lable的Slave集群管理
基于Docker插件的容器化实践
基于Kubernetes的容器化实践
Jenkins分布式构建架构
Jenkins Slave 连接方式
Ø Launch slave agents
via SSH
Ø Launch agent via Java
Web Start (JNLP)
Jenkins 调度策略
Ø 用户视角
p 直接使用slave name,构建使用指定slave
p 使用label,构建多数使用同一个的slave,偶尔使用其他slave
Ø 系统实现
Ø 其他插件
p consistent hashing algorithm (node,available executors,job name)
p 每一个Job都有一个对应所有Node的优先级列表
p Least Load (https://plugins.jenkins.io/leastload)
p Commercial plugin Even Scheduler Plugin
目 录
1
2
3
4
Jenkins分布式构建架构
基于Lable的Slave集群管理
基于Docker插件的容器化实践
基于Kubernetes的容器化实践
Android产品复杂环境
业务产品差异性 Mobile, TV, Box, IOV, VR 等
多种构建类型
代码量大
编译空间大
编译时间长
Daily build,Test build,Continuous Build,APK 编译
等
50GB +
100-200GB
2-3小时(24线程)
业务间相对独立 专属编译服务器,独立的构建环境
服务器差异
版本,CPU,Memory,Disk等
Jenkins使用中暴露的问题
表象问题:
Ø Slave很多,空闲的Slave也很多
Ø 队列中等待构建任务很多
Ø 一些构建失败,暴露workspace空间不足问题
原因分析:
Ø 业务间,编译环境不统一,不能跨业务共享
Ø 业务内,特定jobs直接绑定特定slave,并发量受限于executor数目
Ø slave上构建workspace的遗留,占用大量空间
Ø 业务量增大,新建Jobs增多,瓶颈出现