基于jenkins的持续集成大体发展经过如下阶段:
单机版的jenkins:jenkins既做任务调度,也做任务执行
master-slave的jenkins:master的jenkins做任务调度,slave节点做任务执行,支持的slave包括jnlp方式、ssh等,slave节点的创建和添加、删除需要手工(当然也可以通过Jenkins/cli实现)
基于cloud的jenkins:依旧是分布式架构,master的jenkins做任务调度,slave节点动态生成,任务执行完不需要的时候删除,当前用的较多的是docker。
前两种方式不能合理利用机器的资源,比如有些计算节点空闲,有些节点繁忙,第三种方式解决了机器使用率的问题。那么问题来了,上述3中方案中,作为master的jenkins都没有做高可用,一旦master挂掉怎么办?
我们知道,jenkins的关键信息,包括任务、插件等都是保存在<jenkins_home>中,所以保存这个文件夹就可以实现jenkins的备份和恢复(备份和恢复比如可以用linux的定时任务;rsync;jenkins的thinbakcup等)。但是恢复的时间是不可避免的,尤其是备份的文件较大时。另外一种方案,就是把<jenkins_home>放在一个NFS共享目录中,这样我们只需要恢复jenkins环境即可,NFS目录的高可用由存储进行保证。而如果jenkins使用docker部署,则此种方式恢复起来就更加方便了。再精简一步,就是jenkins container挂掉,容器自动重启或者生成新的container进行部署,这些可以通过k8s等容器编排实现。文章介绍的是基于apache mesos和marathon的实现方式。至于apache mesos+marathon和k8的区别,大家自行百度,简单来讲:
mesos已经在twitter等公司有稳定成功应用实例
mesos不仅仅支持docker作为container,也支持mesos的的container
mesos的定义为分布式内核,所以和k8s对标的是marathon
mesos现在也可以跑k8s
mesos搭建简单
系统架构如下:
图例是做了高可用,即marathon、mesos master均通过zk做了3节点。主要工作流程如下:
1、部署和启动mesos-master;
2、部署和启动mesos-agent;
3、部署和启动marathon;
4、部署和启动marathon-lb;
5、部署jenkins;
6、通过marathon-lb访问jenkins。
关注:测试领域专家(头条&微信)获取第一时间文章更新。