`
m635674608
  • 浏览: 5044160 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

基于Jenkins, Apache Mesos和Marathon的弹性高可用的持续集成环境(上篇)

 
阅读更多

持续集成(CI)是一种软件开发实践,使用得当,它会极大的提高软件开发效率并保障软件开发质量;Jenkins是一个开源项目,它提供了一种易于使用的持续集成系统;Mesos是Apache下的一个开源的统一资源管理与调度平台,它被称为是分布式系统的内核;Marathon是注册到Apache Mesos上的管理长时应用(long-running applications)的framework,如果把Mesos比作数据中心kernel的话,那么Marathon就是init或者upstart的daemon。

本文旨在探讨如何利用Jenkins,Apache Mesos和Marathon搭建一套弹性的,高可用的持续集成环境。

为什么要把Jenkins运行到Apache Mesos上

把Jenkins运行到Apache Mesos上,或者说利用Apache Mesos向Jenkins提供slave资源,最主要的目的是利用Mesos的弹性资源分配来提高资源利用率。通过配置Jenkins-on-Mesos插件,Jenkins Master可以在作业构建时根据实际需要动态的向Mesos申请slave节点,并在构建完成的一段时间后将节点归还给mesos。

同时,Marathon会对发布到它之上的应用程序进行健康检查,从而在应用程序由于某些原因意外崩溃后自动重启该应用。这样,选择利用Marathon 管理Jenkins Master保证了该构建系统的全局高可用。而且,Jenkins Master本身也通过Marathon部署运行在Mesos资源池内,进一步实现了资源共享,提高了资源利用率。

下面两张图形象的说明了Marathon将Jenkins Master部署到Mesos资源池,以及Jenkins Master使用Mesos资源池进行作业构建的整个过程。

基于Jenkins, Apache Mesos和Marathon的弹性高可用的持续集成环境(上篇)基于Jenkins, Apache Mesos和Marathon的弹性高可用的持续集成环境(上篇)

环境设置

为了便于理解,这里我简化了Mesos/Marathon集群的架构,不再考虑集群本身的高可用性。至于如何利用zookeeper配置高可用的mesos/marathon集群,可以参考Mesosphere的官方文档,这里不再展开。

我搭建了一个包含40个节点192.168.3.4-192.168.3.43的Mesos集群,其中一个节点用作运行Marthon及Mesos-master,其它39个节点作为mesos的slave,如下所示。

192.168.3.4  marathon/mesos-master
192.168.3.5  mesos-slave
192.168.3.6  mesos-slave
......
192.168.3.43  mesos-slave

参照http://get.dataman.io的文档配置启动Marathon,Mesos-Master和Mesos-Slave,下面的整个操作都将在这个集群上完成。

在Marathon上部署Jenkins的master实例

Marathon支持web页面或者RESTapi两种方式发布应用,在192.168.3.*内网执行下面的bash命令,就会通过Marathon的RESTapi在mesos slave上启动一个Jenkins master实例。

git clone git@github.com:Dataman-Cloud/jenkins-on-mesos.git && cd jenkins-on-mesos && curl -v -X POST \
-H 'Accept: application/json' \
-H 'Accept-Encoding: gzip, deflate' \
-H 'Content-Type: application/json; charset=utf-8' \
-H 'User-Agent: HTTPie/0.8.0' \
-d@marathon.json \
http://192.168.3.4:8080/v2/apps

这里我在github上fork了mesosphere的jenkins-on-mesos的repoDataMan-Cloud/jenkins-on-mesos,并进行了一些改进

如果Jenkins master实例被成功部署,通过浏览器访问http://192.168.3.4:8080(请确定你的浏览器能够访问内网,譬如可以利用设置浏览器代理等方式来搞定)可以在running tasks列表中找到jenkins,点击进入详细信息页面,我们会看到下图:

基于Jenkins, Apache Mesos和Marathon的弹性高可用的持续集成环境(上篇)

访问http://192.168.3.4:5050/#/frameworks并在Active Frameworks中找到Marathon,点击进入详细信息页面,可以在该页面找到Jenkins Master具体运行到Mesos哪一台Slave上,如下图所示:

基于Jenkins, Apache Mesos和Marathon的弹性高可用的持续集成环境(上篇)

点击sandbox

基于Jenkins, Apache Mesos和Marathon的弹性高可用的持续集成环境(上篇)

配置Jenkins Master实现弹性伸缩

接下来是配置Jenkins注册成为Mesos的Framework,需要通过浏览器访问http://192.168.3.25:31052/来到Jenkins Master的UI页面。下面的截图是我逐步配置的全过程。

基于Jenkins, Apache Mesos和Marathon的弹性高可用的持续集成环境(上篇)基于Jenkins, Apache Mesos和Marathon的弹性高可用的持续集成环境(上篇)

如果Jenkins在Mesos上注册成功,访问http://192.168.3.4:5050/#/frameworks,我们可以找到jenkins Framework,如下图所示:

基于Jenkins, Apache Mesos和Marathon的弹性高可用的持续集成环境(上篇)

现在我们可以同时启动多个构建作业来看一下Jenkins在Mesos上的弹性伸缩,在http://192.168.3.25:31052/上新建一个名为test的工程,配置其构建过程为运行一个shell命令top,如下图所示:

基于Jenkins, Apache Mesos和Marathon的弹性高可用的持续集成环境(上篇)

把该工程复制3份test2、test3和test4,并同时启动这4个工程的构建作业,Jenkins Master会向Mesos申请资源,如果资源分配成功,Jenkins Master就在获得的slave节点上进行作业构建,如下图所示:

基于Jenkins, Apache Mesos和Marathon的弹性高可用的持续集成环境(上篇)

因为在前面的系统配置里我们设置了执行者数量为2(即最多有两个作业同时进行构建),所以在上图中我们看到两个正在进行构建的作业,而另外两个作业在排队等待。

下图展示了当前的Jenkins作业构建共使用了0.6CPU和1.4G内存,

基于Jenkins, Apache Mesos和Marathon的弹性高可用的持续集成环境(上篇)

正在使用的slave节点的详细信息

基于Jenkins, Apache Mesos和Marathon的弹性高可用的持续集成环境(上篇)基于Jenkins, Apache Mesos和Marathon的弹性高可用的持续集成环境(上篇)

配置Jenkins Slave参数(可选)

在使用Jenkins进行项目构建时,我们经常会面临这样一种情形,不同的作业会有不同的资源需求,有些作业需要在配置很高的slave机器上运行,但是 有些则不需要。为了提高资源利用率,显然,我们需要一种手段来向不同的作业分配不同的资源。通过设置Jenkins Mesos Cloud插件的slave info,我们可以很容易的满足上述要求。 具体的配置如下图所示:

基于Jenkins, Apache Mesos和Marathon的弹性高可用的持续集成环境(上篇)

总结

利用mesos为jenkins弹性的提供资源,同时配置Jenkins Slave的参数来满足不同作业的资源需求,这些都大大提高了集群的资源利用率。另外,由于 Marathon 会自动检查运行在它之上的app的健康状态, 并重新发布崩溃掉的应用程序。 在基于Jenkins, Apache Mesos和Marathon的弹性高可用的持续集成环境(下篇), 我会提供一种数据持久化的方法来存储 Jenkins Master 的数据, 保证利用 marathon 部署 Jenkins Master 时系统的高可用。

参考

delivering-ebays-ci-solution-with-apache-mesos

blog comments powered by Disqus

来自:http://vitan.github.io/scale/ci/2015/05/12/jenkins-on-mesos-1.html
分享到:
评论

相关推荐

    基于Jenkins_快速搭建持续集成环境

    综上所述,基于Jenkins快速搭建持续集成环境是一个高效且便捷的过程,能够极大地提升软件开发的效率和质量,是当前软件开发团队不可或缺的工具之一。通过了解和掌握Jenkins的安装、配置、插件安装和系统管理等知识点...

    基于Jenkins快速搭建持续集成环境.pdf

    本文主要介绍了如何使用Jenkins快速搭建一个持续集成(CI)环境。持续集成是一种软件开发实践,团队成员频繁地将代码集成到共享仓库中,每次集成都通过自动化的方式进行构建甚至进行测试,从而尽早地发现集成错误。...

    ci-mesos:通过Docker,Mesos和Marathon增强了Jenkins

    Ci-mesos Jenkins Docker映像 ...显示Jenkins在Mesos奴隶上的日志 $docker ps $docker logs -f $( docker ps -lq ) 通过URL转到Jenkins 在Jenkins上配置Mesos集群 Mesos本机库路径= / usr / lib / libmesos.so M

    Jenkins+Maven+SVN+Tomcat 持续集成环境快捷部署

    整个持续集成环境部署完成后,开发人员每提交一次代码更改,Jenkins就会自动运行预设的构建任务,完成代码的编译、打包、部署等一系列自动化流程,从而提高开发效率和软件质量。 需要注意的是,在实际操作中可能会...

    基于Jenkins持续集成之入门篇.doc

    基于Jenkins的持续集成(CI)是现代软件开发过程中的一个重要组成部分,它自动化了构建、测试和部署的流程,确保代码质量并减少了错误。本篇文章将引导你入门Jenkins CI,帮助你理解其基本概念和操作步骤。 1. 前言...

    基于jenkins持续集成环境的构建

    ### 基于Jenkins持续集成环境的构建 #### Jenkins简介 Jenkins是一个开源的持续集成工具,由Java编写而成,旨在提供一个易于使用的软件平台,使得软件项目的持续集成成为可能。通过Jenkins,开发者可以自动化项目的...

    持续集成环境maven+nexus+jenkins+svn搭建

    "持续集成环境搭建" ...搭建一个完整的持续集成环境需要使用多种工具和技术,例如 Maven、Nexus、Jenkins 和 SVN 等。通过使用这些工具和技术,我们可以自动化构建、测试和部署软件,从而提高软件的质量和开发效率。

    Jenkins持续集成从入门到精通.pdf

    1、持续集成及Jenkins介绍 2、Jenkins安装和持续集成环境配置 3、Jenkins构建Maven项目 4、Jenkins+Docker+SpringCloud微服务持续集成 5、基于Kubernetes/K8S构建Jenkins微服务持续集成平台

    如何搭建弹性高可用的持续集成环境

    在本文中,数人科技云平台负责人周伟涛解析其利用开源的Jenkins,ApacheMesos和Marathon搭建弹性的,高可用的持续集成环境的实践,详细介绍了环境设置,在Marathon上部署Jenkins的master实例,配置JenkinsMaster实现...

    基于jenkins的持续集成使用指南.docx

    【基于Jenkins的持续集成使用指南】 持续集成是一种软件开发的最佳实践,旨在通过频繁的集成来减少集成中的问题,提高开发效率和软件质量。Jenkins作为一款开源的持续集成工具,为开发团队提供了自动化构建、测试和...

    持续集成-Subversion+Apache+Jsvnadmin+jenkins

    本篇主要讨论如何利用Subversion、Apache、Jsvnadmin和Jenkins搭建一个高效的持续集成环境。 首先,Subversion(SVN)是开源的版本控制系统,用于跟踪项目中的文件和目录变更,便于团队协作。安装Subversion需要...

    jenkins+jmeter持续集成.pdf

    总结:以上知识点涉及了从安装和配置JDK、JMeter到Jenkins的完整流程,以及如何将JMeter集成到Jenkins中进行持续集成和接口测试。文档中还提到了Ant的安装和Jenkins插件管理,以及Jenkins安全性设置的相关操作。这些...

    jenkins(持续集成)

    Jenkins 是一款强大的开源持续集成...通过以上步骤,你可以成功地在Apache Tomcat上部署和配置Jenkins,实现高效的持续集成流程。记住,持续集成的成功不仅在于工具的使用,更在于团队对自动化和快速反馈文化的坚持。

    Jenkins持续集成文档

    Jenkins是一款流行的开源自动化服务器,主要用于自动化各种任务,尤其是持续集成(Continuous Integration,简称CI)和持续部署(Continuous Deployment,简称CD)。持续集成是一种软件开发实践,在这种实践中,开发...

    jenkins持续集成Loadrunner

    jenkins持续集成Loadrunner jenkins是一款流行的持续集成工具,而Loadrunner是一款功能强大的性能测试工具。将Loadrunner集成到jenkins中,可以实现自动化的性能测试,提高测试效率和测试覆盖率。本文将详细介绍...

    git+gerrit+jenkins+sonar持续集成环境大家资料

    git+gerrit+jenkins+sonar持续集成环境大家资料,具体搭建步骤请参考本人博客。 里面还有一些插件,方便大家少走弯路

    Jenkins+SVN+Ant持续集成环境配置笔记

    本文将详细介绍如何搭建基于Jenkins、SVN 和 Ant 的持续集成环境,帮助读者理解并实施这一过程。 #### 二、Eclipse关联SVN 1. **准备工作**: - 安装 Eclipse。 - 下载并安装 TortoiseSVN。 2. **创建SVN仓库**...

    jenkins持续集成环境搭建步骤

    ### Jenkins 持续集成环境搭建详解 #### Jenkins 概述 Jenkins 是一款非常流行的开源持续集成(CI)和持续部署(CD)工具,它能够帮助开发团队自动化完成软件的构建、测试以及部署过程。借助于其强大的插件生态系统...

Global site tag (gtag.js) - Google Analytics