基于Kubernetes搭建企业级可自动伸缩Jenkins slave集群

背景
贝壳在成立后借助链家雄厚的资本实力快速发展,事业部项目数量不断扩增,项目的开发语言涵盖了java、php、nodejs、golang、C等等类型。公司从一开始使用了jenkins来完成编译部署等一些自动化工作,但是随着项目的越来越多,天然单点受限的jenkins的瓶颈越来越突出。业务方大多数是自己挤出一台空闲机器作为编译机,将一些编译环境部署好后,联系jenkins管理员,将这台编译机作为slave节点加入jenkins集群,目前jenkins-slave的节点已经达到了六十多台物理机。但是从jenkins web 上我们可以清晰的看到,jenkins的队列依然保持在十几个任务积压的状态。为什么六十多个slave节点还是不能够满足当前业务方编译的需求呢?首先,编译环境各个业务方独立使用,切编译环境不统一,这是造成当前状况的根因。这种方式造成了节点空闲不均匀,资源利用率极低。而且一旦slave节点遭到破坏,需要人为的进行修复甚至重建,非常麻烦。我们通过kubernetes集群上部署jenkins,并利用Kubernetes插件来调用k8s集群实现动态的按需扩展jenkins-slave,从而实现有任务时自动增加slave节点,任务结束slave节点自动销毁。对于jenkins来说,slave节点(容器)是临时的,任务一结束就会销毁。