| May 31, 2015 | Jenkins Mesos CI auto-scaling
在基于Jenkins, Apache Mesos和Marathon的弹性高可用的持续集成环境(上篇), 探讨了利用 marathon/Mesos 管理Jenkins集群的整个架构流程,以及如何一步步配置 Jenkins Master 来将其注册成为 Mesos 的 Framework 。本篇博客,我们主要解决Jenkins Master的数据持久化问题,marathon会在Jenkins Master因意外崩溃后重新部署其到某个mesos slave节点上,但marathon无法维护应用程序的数据,即我们需要一个 Jenkins Master 的数据持久化方法,由于Jenkins Master是将数据存储在XML文件而不是数据库中,这里可以利用jenkins插件SCM Sync configuration plugin来将Jenkins Master的数据同步到相应的repo。
我们需要在内部的代码库或者公共代码库创建一个名为 jenkins-on-mesos 的 gitrepo , 譬如:git@gitlab.dataman.io:wtzhou/jenkins-on-mesos.git 。 这个 repo 是 jenkins 插件 SCM Sync configuration plugin 用来同步jenkins数据的。
另外,对于SCM-Sync-Configuration来说,非常关键的一步是保证其有权限 pull/push 上面我们所创建的gitrepo。 以我们公司的内部环境为例, 在mesos集群搭建时,我们首先使用ansible为所有的mesos slave节点添加了用户core并生成了相同的ssh keypair,同时在内部的gitlab上注册了用户core并上传其在slave节点上的公钥,然后添加该用户core为repo git@gitlab.dataman.io:wtzhou/jenkins-on-mesos.git的developer或者owner,这样每个mesos slave节点都可以以用户core来 pull/push 这个gitrepo了。
我们首先需要wget两个文件:
wget -O start-jenkins.app.sh https://raw.githubusercontent.com/Dataman-Cloud/jenkins-on-mesos/master/start-jenkins.app.sh.template
wget https://raw.githubusercontent.com/Dataman-Cloud/jenkins-on-mesos/master/marathon.json
其中start-jenkins.app.sh
是需要配置的,
#! /bin/bash
# Sync the config with SCM_SYNC_GIT
# SCM_SYNC_GIT format: git@gitlab.dataman.io:wtzhou/jenkins-on-mesos.git
SCM_SYNC_GIT=
# deploy jenkins on marathon as user APP_USER, who has been granted to pull/push repo SCM_SYNC_GIT
APP_USER=
# Marathon PORTAL, for example: http://192.168.3.4:8080/v2/apps
MARATHON_PORTAL=
......
......
......
编辑如下3个变量:
APP_USER=core
。接下来就可以执行命令:
bash start-jenkins.app.sh
来让 marathon 部署我们的 Jenkins Master 了。这样, 我们在 Jenkins Master 上所保存的任何配置,创建的任何job都会被SCM-Sync-Configuration同步到repo里,并在 Jenkins Master 被重新发布后 download 到本地。
SCM-Sync-Configuration初始化完成后(在我们环境里初始化过程会被自动触发),每次配置更新或者添加,编辑构建作业时,我们会得到一个提示页面来为新的 commit message 添加 comment,如下图所示,
当前,所支持的配置文件如下:
另外,我们可以在每一页的下面看到 scm sync config 的状态, 下图是同步出错时的截图,你可以去System Log查看具体的出错信息。
blog comments powered by Disqus