为什么要把Jenkins 运行到Apache Mesos上?
1、把Jenkins运行到Apache Mesos上,或者说利用Apache Mesos向Jenkins提供slave资源,最主要的目的是,利用Mesos的弹性资源分配来提高资源利用率。通过配置Jenkins-on-Mesos插件,Jenkins master可以在作业构建时根据实际需要动态的想Mesos申请slave节点,并在构建完成的一段时间后将节点归还给Mesos
2、同时,Marathon会对发布到它之上的应用程序进行健康检查,从而在应用程序由于某些原因以为崩掉后自动重启该应用。这样,选择利用Marathon管理Jenkins Master保证了该构建体系的全局高可用。而且,Jenkins Master本身也通过Marathon部署运行在Mesos资源池内,进一步实现了资源共享,提高资源利用率
1 安装Jenkins的mesos插件
首先,需要在Jenkins上安装mesos插件,这个非常简单,就不过多说明。(Jenkins我是在centos7的docker镜像基础之上做的一个新镜像运行的。)
2 配置Mesos Cloud信息
mesos插件安装好之后,从Jenkins的 系统管理 -> 系统设置 ->管理node和cloud, 进入设置页面,在最下面会出现一个新增一个云的选项,点这个下拉选项选择Mesos Cloud就会出现如下的界面:
这个界面上有几个主要的信息一定是要填写的:
- Mesos native library path
这里是要填/usr/lib/libmesos.so,但是如果没装mesos的话是不会有这个文件的。要是直接拷贝一个libmesos.so放到这个目录也是不好用的,所以,我是在Jenkins Master的容器镜像里面也安装了mesos来解决这个问题。 - Mesos Master
这里填Mesos Master地址即可,可以是zk://…/mesos的方式,也可以是单个ip:端口的方式。 - Slave username
默认好像填的是jenkins,这里我直接改成root。 - Jenkins URL
填自己的Jenkins Master的访问地址即可。
配到这里并没有结束,点开上图右下角的高级…就会看见还有一些配置项,是用来配置slave info用的。
这里也有几个需要注意的地方:
- Checkpointing
这里选Yes,之后就会在Mesos的Framework信息界面看见Jenkins Scheduler的信息。 - Label String
这是为Mesos Cloud起一个label名字,这个名字在以后创建Jenkins任务,指定运行的节点时会用到。
其他的信息,搭建可以看提示信息,根据自己的需要适当修改。接着,再点开上图所示右下角的高级…按钮,会出现docker容器的设置信息。
- Use Docker Containerizer
这一项是问是否使用容器,将其勾选。 - Docker Image
填写用来运行Jenkins slave的docker镜像。 - Networking
有Host和Bridge两种方式,我这里用的是Bridge方式(Host方式的我还没有试过)。 - Port Mapping
端口映射,填写自己想要映射的服务端口。 - Volumes
挂载 /usr/bin/docker /var/lib/docker /sys/fs/cgroup /var/run/docker.sock这几个目录后,在容器内部就可以操作主机上的Docker环境,使Jenkins Slave 可以在容器内部进行一些Docker Build,Docker Run,Docker Push等工作,所以我也进行了挂载。
到这里,Mesos Cloud需要配置的主要信息差不多都配置完毕了。其他可以根据自己的实际情况进行修改和调整。
3 配置Jenkins任务
Mesos Cloud配置完之后,Jenkins任务怎么用它呢,这里简单介绍一下。
如图所示,在Restrict where this project can be run下面的Label空栏里填上之前Mesos配置信息中Label String对应的名字。如果没有问题的话,下面就会出现一条提示信息:Label is serviced by no nodes and 1 cloud。这表明指定的是一个cloud,而不是某个固定的节点。
在下面的构建环境里面,选上Mesos Single-Use Slave,在构建里面执行一条while循环语句来试验下效果。点击构建之后,可以看到如下结果:
从图中可以看出,Jenkins Master已经从Mesos的资源池里动态调度到一个节点来执行Jenkins的构建任务。这时,在Mesos Master界面上也能看到该节点的信息:
等到Jenkins任务执行完成之后,Mesos便会将该节点资源收回: