读了mesos的论文(https://people.eecs.berkeley.edu/~alig/papers/mesos.pdf ),感觉应用在 CI 上的资源管理很赞,能够解决 jenkins在构建中,分配 executor 以及 executor 在building 的时候 hang 的问题,所以装了一个来试一下。
首先是先装 mesos 了,官网 1.3.0
rpm -Uvh http://repos.mesosphere.com/el/6/noarch/RPMS/mesosphere-el-repo-6-3.noarch.rpm
设置好 rpm 源,可以使用 yum install 了
接下来是 jenkins 插件的安装 https://wiki.jenkins.io/display/JENKINS/Mesos+Plugin
比较奇怪的一个问题是,mesos 在分配task的时候,slave在执行task,没有获得系统的环境变量,在没有使用docker的情况下,即使是 hardcode 绝对路径,也没有达到效果。
没查到原理,但是已经解决了
在shell中显示指定环境变量即可,为了避免出现乱码,还需设定LC的各项属性.
export LC_ALL=en_US.UTF-8
export LANG=en_US.UTF-8
export LANGUAGE=en_US.UTF-8
PS,针对 CI 集成 mesos 做了一次性能测试,同时 build 200+ 个job,配合14 个 slave
虽然数据可能看不上眼,这是公司平台中在迭代的200 + 个项目在mesos slave上进行构建,包括maven,gradle,node, 物理机表现不错,虚拟机的slave挂了,证明虚拟机需要提升。
另外,可以看到,在 task 完成后,slave上资源确实得到了回收和释放。
令人在意的一点是,为什么虚拟机资源不足,会被 master 分配任务,不确定是 jenkins 的 mesos 插件的问题,如果抛弃插件,通过脚本直接联系 master, 或许效果会更好?
另外,mesos 的分配策略,目前使用默认值,需要逐步调试成符合当前场景的情况了,也需注意。
待续