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

持续集成(CI)是一种软件开发实践,使用得当,它会极大的提高软件开发效率并保障软件开发质量;Jenkins是一个开源项目,它提供了一种易于使用的持续集成系统;Mesos是Apache下的一个开源的统一资源管理与调度平台,它被称为是分布式系统的内核;Marathon是注册到Apache
Mesos上的管理长时应用(long-running applications)的framework,如果把Mesos比作数据中心kernel的话,那么Marathon就是init或者upstart的daemon。
本文旨在探讨如何利用Jenkins,Apache Mesos和Marathon搭建一套弹性的,高可用的持续集成环境。
把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资源池进行作业构建的整个过程。
为了便于理解,这里我简化了Mesos/Marathon集群的架构,不再考虑集群本身的高可用性。至于如何利用zookeeper配置高可用的mesos/marathon集群,可以参考,这里不再展开。
我搭建了一个包含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
参照的文档配置启动Marathon,Mesos-Master和Mesos-Slave,下面的整个操作都将在这个集群上完成。
Marathon支持web页面或者RESTapi两种方式发布应用,在192.168.3.*内网执行下面的bash命令,就会通过Marathon的RESTapi在mesos slave上启动一个Jenkins master实例。
git clone :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/ charset=utf-8' \
-H 'User-Agent: HTTPie/0.8.0' \
-d@marathon.json \
http://192.168.3.4:8080/v2/apps
这里我在github上fork了到,并进行了一些。
如果Jenkins master实例被成功部署,通过浏览器访问http://192.168.3.4:8080(请确定你的浏览器能够访问内网,譬如可以利用设置浏览器代理等方式来搞定)可以在running tasks列表中找到jenkins,点击进入详细信息页面,我们会看到下图:
访问http://192.168.3.4:5050/#/frameworks并在Active Frameworks中找到Marathon,点击进入详细信息页面,可以在该页面找到Jenkins Master具体运行到Mesos哪一台Slave上,如下图所示:
点击sandbox
接下来是配置Jenkins注册成为Mesos的Framework,需要通过浏览器访问http://192.168.3.25:31052/来到Jenkins Master的UI页面。下面的截图是我逐步配置的全过程。
如果Jenkins在Mesos上注册成功,访问http://192.168.3.4:5050/#/frameworks,我们可以找到jenkins Framework,如下图所示:
现在我们可以同时启动多个构建作业来看一下Jenkins在Mesos上的弹性伸缩,在http://192.168.3.25:31052/上新建一个名为test的工程,配置其构建过程为运行一个shell命令top,如下图所示:
把该工程复制3份test2、test3和test4,并同时启动这4个工程的构建作业,Jenkins Master会向Mesos申请资源,如果资源分配成功,Jenkins Master就在获得的slave节点上进行作业构建,如下图所示:
因为在前面的系统配置里我们设置了执行者数量为2(即最多有两个作业同时进行构建),所以在上图中我们看到两个正在进行构建的作业,而另外两个作业在排队等待。
下图展示了当前的Jenkins作业构建共使用了0.6CPU和1.4G内存,
正在使用的slave节点的详细信息
配置Jenkins Slave参数(可选)
在使用Jenkins进行项目构建时,我们经常会面临这样一种情形,不同的作业会有不同的资源需求,有些作业需要在配置很高的slave机器上运行,但是 有些则不需要。为了提高资源利用率,显然,我们需要一种手段来向不同的作业分配不同的资源。通过设置Jenkins Mesos Cloud插件的slave info,我们可以很容易的满足上述要求。 具体的配置如下图所示:
利用mesos为jenkins弹性的提供资源,同时配置Jenkins Slave的参数来满足不同作业的资源需求,这些都大大提高了集群的资源利用率。另外,由于 Marathon 会自动检查运行在它之上的app的健康状态, 并重新发布崩溃掉的应用程序。 在, 我会提供一种数据持久化的方法来存储 Jenkins Master 的数据, 保证利用 marathon 部署 Jenkins Master 时系统的高可用。
本文已收录于以下专栏:
相关文章推荐
RP电信220.181.151.67联通202.106.127.1教育网211.153.19.1铁通211.98.2.4长宽202.106.101.202移动(暂时不可用)211.136.17.107
很多时候,我们都能体会到分布式架构的话好处,其实一个系统不大,做分布式的成本是很高的,系统变得松耦合,这样做的好处不言而喻,说说坏处吧,A系统远程调用B系统,B系统又依赖C,D系统,当线上某个接口报错...
dcos在universe商店里面集成了很多软件,比如常见的jenkins,marathon-lb等,这次我们选择jenkins试试。当我们在universe商店里面选择并install了jenkin...
目前测试环境开始尝试使用Mesos+Marathon+Docker,将服务的搭建部署容器化。在搭建部署服务的过程中,也少不了对持续化继承工具Jenkins的使用。老的一套Jenkins使用的是固定Je...
8月19日,中国开源软件推进联盟(COPU)发布一则关于“全国联筹软件自由日活动”的“联合通告”,此“联合通告”纯系造假。为什么?
        该“联合通告”自称是《软件自由国际(S...
Marathon为运行中的应用提供了灵活的重启策略。当应用只有一个实例在运行,这时候重启的话,默认情况下Marathon会新起一个实例,在新实例重启完成之后,才会停掉原有实例,从而实现平滑的重启。当然...
对于远程调用来说,限流是很重要的,这是对自己的保护政策,因为为了保证在业务高峰期,线上系统也能保证一定的弹性和稳定性,最有效的方案就是进行服务降级了,而限流就是降级系统最常采用的方案之一
限流即流...
什么SaaS--什么是SaaS?SaaS英文为“Software as a Service”,国内将其转译为“软件运营服务”,业内引意为“软件即服务”,它是目前一种新型软件服务形式,是从ASP(App...
他的最新文章
讲师:王哲涵
讲师:王渊命
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)当前位置: >>
Jenkins-持续集成环境搭建
持续集成环境搭建一、 简介持续集成是一种软件开发实践, 即团队开发成员经常集成它们的工作, 通过每个成员每 天至少集成一次,也就意味着每天可能会发生多次集成。每次集成都通过自动化的构建(包 括编译,发布,自动化测试)来验证,从而尽早地发现集成错误,持续集成是个简单重复劳 动,人来操作费时费力,使用自动化构建工具完成是最好不过的了 , 本文档采用的是 Jen
kins+Selenium+Sonar 搭建持续集成环境,完成版本持续集成,自动化测试及代码检测 分析的功能。二、 Jenkins 部署1. Jenkins 下载与安装在最简单的情况下,Jenkins 只需要两个步骤: (1) 直接运行 iar 包 下载最新的版本(一个 WAR 文件),Jenkins 官方网址: http://Jenkins-ci.org/ 运行 java -jar jenkins.war 注意:Jenkins 需要运行 Java 5 以及以上的版本 (2) 将下载的 war 包文件部署到 web 容器 例如将 jenkins.war 部署到 tomcat 的 webapps 目录下,然后启动 tomcat,在浏览器的 URL 地址栏中输入类似 http://localhost:8080/jenkins/这样的地址即可。将 jenkins.war 部署到 tomcat 的 webapps 目录下 windows 启动:切换到 tomcat 的 bin 目录,启动 startup.bat。 Linux 启动:切换到 tomcat 的 bin 目录,运行./catalina.sh start 启动,运行./catalina.sh stop 关闭。2. 修改 Jenkins 启动内存打开 startup.sh 文件,在最上面加上 export JAVA_OPTS=&-XX:MaxPermSize=1024m -Xms1024m -Xmx3096m&。3. 访问访 问 地 址 为 http://ip:8080/jenkins , 已 在 阿 里 云 上 部 署 , 地 址 为 : :8180/jenkins/。 4. 插件安装(在系统管理--插件管理,可选择中搜索)1) 2) 3) 安装 Sonar 插件,搜索 SonarQube Plugin 插件(代码质量分析),并勾选,点击直 接安装即可。 安装 war 部署容器插件,搜索 Deploy to container Plugin 插件,该插件支持部署 到 tomcat 和 jboss 里面。 安装 Email 插件,搜索 Email Extension Plugin 和 Email Extension Template Plugin,支持邮件发送和邮件自定义内容。5. 系统设置(在系统管理模块)(1) 提示信息1)Utf-8 编码 Jenkins 建议在 tomcat 中使用 utf-8 编码,配置 tomcat 下 conf 目录的 server.xml 文件2) 新的版本 有需要的话点击下载新的版本即可 3) 安全设置允许网络上的任何人代表您启动进程。 考虑至少启用身份验证来阻止滥用。 点击 Dismiss 忽略该消息,点击 Setup Security 进入设置界面 (2) 系统设置1) JDK 配置JDK 别名:给你看的,随便你自己,叫阿猫阿狗都可以 JAVA_HOME:这个是本机 JDK 的安装路径(错误的路径会有红字提示你的) 自动安装:不推荐这个选项 后面 Ant 与 Maven 的配置是一样的, JDK 去 oracle 官网下载, Ant 与 Maven 去 apache 官网下载 Ps:每个文本框后面都有个问号,点击问号就会出现帮助信息2) Maven 配置 MAVEN_HOME 是你本机的 maven 安装路径 maven 项目配置里需要填上你需要访问的 jenkins 的地址和系统管理员邮箱的 地址 3) Ant 配置4) 邮件通知配置Ps:这里系统管理员的邮件地址一定要配置,不然发邮件的时候会报错 5) SonarQube 配置这里配置是的当构建好项目时会将构建好的项目发送到配置好的 sonar 服务器去进 行代码质量检测,需要填写的是 sonar 服务器的地址,数据库地址还有用户名和密码三、 Sonar 部署1. Sonarqube 简介Sonar 是一个用于代码质量管理的开源平台,用于管理源代码的质量,可以从七个维度 检测代码质量 通过插件形式, 可以支持包括 java,C#,C/C++,PL/SQL,Cobol,JavaScrip,Groovy 等等二 十几种编程语言的代码质量管理与检测 Sonarqube 能带来什么? 1).糟糕的复杂度分布 文件、 类、 方法等, 如果复杂度过高将难以改变, 这会使得开发人员难以理解它们, 且如果没有自动化的单元测试, 对于程序中的任何组件的改变都将可能导致需要全面的 回归测试 2).重复 显然程序中包含大量复制粘贴的代码是质量低下的, sonar 可以展示源码中重复严 重的地方 3).缺乏单元测试 sonar 可以很方便地统计并展示单元测试覆盖率 4).没有代码标准 sonar 可以通过 PMD,CheckStyle,Findbugs 等等代码规则检测工具规范代码编写 5).没有足够的或者过多的注释 没有注释将使代码可读性变差, 特别是当不可避免地出现人员变动时, 程序的可读 性将大幅下降, 而过多的注释又会使得开发人员将精力过多地花费在阅读注释上, 亦违 背初衷 6).潜在的 bug sonar 可以通过 PMD,CheckStyle,Findbugs 等等代码规则检测工具检测出潜在的 bug 7).糟糕的设计 通过 sonar 可以找出循环,展示包与包、类与类之间的相互依赖关系, 可以检测自 定义的架构规则, 通过 sonar 可以管理第三方的 jar 包, 可以利用 LCOM4 检测单个任 务规则的应用情况检测耦合2. 下载从 Sonar 官网下载 SonarQube 包,地址 http://www.sonarqube.org/downloads/,目前 最新版本是 SonarQube 5.1.2。 从 http://docs.sonarqube.org/display/PLUG/Plugin+Library 下载汉化包。3. 安装部署 Sonar1)预置条件 已安装 JAVA 环境;已安装有 MySQL 数据库2) 3)解压 sonarqube-5.1.2.zip 修改配置文件 打开 sonarqube-5.1.2\conf\sonar.properties 打开连接数据库的用户名和密码打开数据库的地址和驱动4)创建数据库 在 mysql 数据库中新建名称为 sonar 的数据库,并新建一个用户,sonar/sonar, 然后将 sonar 数据库的所有权限赋给 sonar 用户 5)汉化插件 将汉化包 sonar-l10n-zh-plugin-1.9.jar 放到 sonarqube-5.1.2\extensions\plugins 目录下。4. 启动 Sonar(1)、windows 启动,直接进入 sonarqube-5.1.2\bin\windows-x86-32|64 目录,运行 StartSonar.bat,这样 sonar 就可以启动成功了,注意事项:sonarqube-5.1.2 在 Windows 放置的路径不要包含中文字符,否则启动有问题,且 5.1.2 版本只支持 JDK1.7 及以上的版 本。(2)、linux 启动,进入 sonarqube-5.1.2\bin\linux-x86-32|64 目录,运行./sonar.shstart 可以启动,运行./sonar.sh stop 可以停止。注意事项:在运行前,linux 环境 java 变量 必须是 1.7 以上,且需要先执行 chmod u+x *.sh,chmod u+x wrapper.conf5. 访问 Sonar访问地址为 http://ip:9000 即可访问, 默认端口是 9000, 已在阿里云上面部署过 Sonar, 地址为 :9000/。 备注:本地已配置好,见当前目录中的 持续集成相关发布包\sonar.zip,解压之后即可 正常使用。四、 项目构建(jenkins+maven+svn+sonar)在 jenkins 上你可以配置 maven 项目也可以配置任意的项目 1) 填写项目名称2) 配置源代码管理 在这里可以配置 svn 或者 cvs 等等源码管理,配置好地址之后 jenkins 就会从相应 的源码路径拷贝出项目并进行编译构建的过程 演示是使用 Subversion 的链接,在 Repository URL 中输入你的项目链接,如果没 有权限则会提示如下图,可以去配置 svn 用户名和密码 3) 配置构建触发器(表示 5 分钟扫描一次,如 SVN 有更新,则重新构建) 在其他项目构建完成后才执行构建:指定的项目完成构建后,触发此项目的构建。 Poll SCM :这是 CI 系统中常见的选项。当您选择此选项,您可以指定一个定时作 业表达式来定义 Jenkins 每隔多久检查一下您源代码仓库的变化。如果发现变化, 就执行一次构建。例如,表达式中填写 0,15,30,45 * * * *将使 Jenkins 每隔 15 分钟 就检查一次您源码仓库的变化。 Build periodically : 此选项仅仅通知 Jenkins 按指定的频率对项目进行构建, 而不管 SCM 是否有变化。如果想在这个 Job 中运行一些测试用例的话,它就很有帮助。4) 配置 Maven 构建文件及命令 (maven 项目才需要配置)5) 配置失败邮件配置6) 配置构建后 SonarQube 代码分析 在这里配置就是将你构建好的项目发送到 sonarqube 服务器上 7) 远程部署配置,其中 WAR/EAR files 为要部署的 war 包,Context path 为部署到 tomcat 容器中的 war 的名称, 即部署的 war 为 jenkinstest.war, Manager user name 和 Manager password 为 tomcat-user.xml 中配置的用户,tomcat url 为 tomcat 访问地址。8) 配置构建后邮件发送功能(成功或失败时的邮件接收人),多个接收人用,号隔开。 五、 Jekins 与 Selenium 结合可以选择安装火狐插件,在启动插件后录制网页六、 Jenkins 和 Ant 的结合1. Ant 简介首先 Apache Ant,是一个将软件编译、测试、部署等步骤联系在一起加以自 动化的一个工具,我们从最基础的例子说起,我们用一个记事本编写一个最简单 的 java 文件,然后在命令行中可以通过 javac 这个命令将.java 的文件编译 成.class 的文件,其实使用 ant 所做的操作和使用命令行的操作是一样的,只不 过它将各种命令转化为 xml 标签,所有使用 ant 的时候必须有以下两点:一个是使 用 ant 编译工程, 必须有一个 xml 文件, 默认 build.xml,第二个就是每个 build 文件配置一个 default target,执行 ant 命令会执行这个 target,在 build.xml 中允许存在多个 target 标签, 每个 target 是一个操作,clean 是删除 build 目 录,compile 是编译,run 是执行 java class,所以当使用 ant 编译工程时可以 根据需求编写 build. (还可以使用 eclipse 生成 build.xml,步骤是右键. Export-& General -& Ant Buildfiles .点 Next,选择项目,再点 Finish.)2. 创建项目在 eclipse 中创建一个简单的测试 ant 的项目,并编写好 build.xml 文件放在项目根目录下, 并将项目提交到 svn 中 3. Jenkins 构建首先创建一个自由风格的项目,在项目配置中有两种构建方法,前提是我们 已经下载好 antI、选择 Execute Windows batch command,在输入框输入如下命令 set path=C:\ANT_HOME\Apache-Ant-1.7.0\path 到 path ant junit 把 ant 的安装目录添加执行 junit taskII、方法 I 比较麻烦,如果我们设置好了 ANT_HOME,可以选择 Invoke Ant,然后 在 targets 里面指定我们 build.xml 里的 task name。不填的话默认根目录下的 build,xml 文件然后点击立即构建即可4. ant 与 selenium 结合在使用 ant 构建项目时,我们可以通过 build.xml 中的配置来与其他测试工具整合,去加载 selenium 的 jar 即可
Jenkins+Maven+SVN快速搭建持续集成环境_计算机软件及应用_IT/计算机_专业资料。Jenkins是一个可扩展的持续集成引擎,Jenkins非常易于安装和配置,简单易用,下面看看我们...Linux环境安装配置持续集成工具jenkins_计算机软件及应用_IT/计算机_专业资料。Linux 环境安装配置持续集成工具 jenkins (本文以 jenkins 2.7.1 为例) 1.安装 tomcat...一步步搭建jenkins持续集成平台_计算机软件及应用_IT/计算机_专业资料。一步步搭建...[java 实际的可执行路径 which java] 其他不动,保存 【maven 环境配置】 ...如何搭建基于Jenkins Apache Mesos和Marathon的弹性高可用的持续集成环境_计算机软件及应用_IT/计算机_专业资料。持续集成(CI)是一种软件开发实践,使用得当,它会极大...持续集成环境Jenkins详解_计算机软件及应用_IT/计算机_专业资料。持续集成环境 Jenkins 详解 Jenkins 介绍 Jenkins 是一个开源的 Java Web 项目,一个持续集成的 Web...本文正是从持续集成的基本概念入手, 通过具体实例,介绍了如何基于 Jenkins 快速搭建持续集成环境。 持续集成概述 什么是持续集成 随着软件开发复杂度的不断提高, ...持续集成环境maven+nexus+jenkins+svn搭建_计算机软件及应用_IT/计算机_专业资料...19 1. Maven3 安装 1.1 下载 maven 版本:3.0.3 下载地址:http://maven....Jenkins持续集成文档_互联网_IT/计算机_专业资料。Jenkins 持续集成构建平台 使用...(包括工作空间,本地仓库,编译运行环境) ;在 DEV 阶段的任务配置中,勾选“...Jenkins持续集成构建平台使用指南_计算机软件及应用_IT/计算机_专业资料。3.2.1...项目的构建任务分配到对应的节点去运行(包括工作空间,本地仓库,编译运 行环境)...【环境】 : (默认读者已经具备了 基本的持续集成经验和 jenkins 用法) 1. ...带补丁触发需要先安装补丁插件,并设置项目的补丁参数 【 Python 调用】 提供 ...
All rights reserved Powered by
copyright &copyright 。文档资料库内容来自网络,如有侵犯请联系客服。当前位置浏览文章
前言: 什么是持续集成?想必大家看了网上很多的介绍都会说持续集成(Consistent Integration)是一种实践,可以让团队在持续的基础 上收到反馈并进行改进,不必等到开发周期后期才寻找和修复缺陷,有着效率高,便于管理等各种优点,但是听起来还是有点模糊。那么我用两个简单的例子来说明一下为什么要用持续集成。1、咱们在传统的开发中开发人员都是按照模块划分功能任务,然后每个人从svn或者git上下载服务器代码,然后在本地测试,测试通过了然后将代码提交到服务器上。这样看似没有问题,但是大家想过一个问题没有,如果每个人都是这样,等所有人都提交代码到服务器上的时候难道就能保证大家的代码不会有冲突的地方?肯定会有这样的情况出现,笔者就经历过这样的情况。拿gradle来说,很可能大家在开发的时候gradle的版本都是不一样的,这样提交代码到服务器肯定会出现一些问题。那么用持续集成就能够解决问题么?当然可以。如果你去了解持续集成就知道,持续集成要求你制定一个代码库,所有人要想运行自己开发的功能模块,必须先要将代码提交到服务器上,再执行构建。这就相当于大家在测试的时候要把自己的代码从分支提交到主干上,然后从主干上打版本测试。这样一来我们就相当于已经在做每个人代码集成到主干的工作了,而不用等到后期才开始集成代码,大大降低了风险,这也是持续集成非常重要的意义所在。2、在给Android项目打包的时候,传统的方法是开发人员在Android Studio当中运行命令或者直接点击运行按钮生成应用,然后交给测试人员,如果开发人员不在的时候,测试人员可能就要干等着了。通过持续集成后,测试人员直接通过可视化 的界面直接构建最新的项目,这样是不是便于管理项目版本,也节省了开发人员和测试人员的时间?好了,说了这么多了,我们一起看一下怎么开始构建jenkins集成环境吧。1、去官网下载最新的Jenkins软件点击进入官网,例如笔者我下载的就是jenkins-2.60.zip,解压后直接就是一个安装程序jenkins.msi,整个安装过程也是非常简单,不用赘述。2、Jenkins是基于Java开发的一种持续集成工具,为了运行Android程序,你还需要安装jdk,我安装的版本是1.83、在安装的过程中还会让你选择要安装的插件,直接全选就可以。4、当你输入如下网址http://localhost:8080能够打开如下见面就说明你已经安装成功了。也不多说废话,给大家截图看一下jenkins基本配置,如果你想了解更多详细的内容,请参考jenkins的官方指导手册一定要设置ANDROID_HOME地址在上图中由于我用的是svn,所以在git配置项中没有做任何操作创建构建项目的时候选择和配置如下以上操作完成后,你就基本上搭建好了jenkins配置环境,然而事情还没完,更重要的是你要进行一次成功的构建。由于我的构建是在我本地的机器上测试的,我直接构建在服务器上的代码的时候还是出现了不少的问题,如果你也有和我类似的经历,不妨看一下我解决问题的过程,或许能对你有启发。很有可能你在构建项目的时候并不是一次就能成功,那么如果出现问题了我们该怎么分析呢?jenkins里面可以查看到构建的日志,如下图所示例如我故意修改了sdk路径,然后执行构建,结果就看到了这样的日志果然就告诉了我sdk路径不对,那你也许有点奇怪,不对啊,我明明有自己的sdk路径,为什么会提示不对呢?原因在于现在服务器上的代码版本很可能是你另外的同事提交的,他的sdk路径和你不一样很好理解。于是按照他的提示,我们可以把自己本地的sdk复制一份到上图报错的目录下,再次执行构建的话就不会再报那个错误了。相信到这里你就知道该怎么查看日志和解决问题了,该篇文章还会继续更新,有更多的内容会和大家及时分享。如果文章当中有任何不正确的地方,还请广大读者纠正,非常感谢!如何搭建基于Jenkins, Apache Mesos和Marathon的弹性高可用的持续集成环境
发表于 11:33|
作者周伟涛
摘要:持续集成(CI)是一种软件开发实践,使用得当,它会极大的提高软件开发效率并保障软件开发质量。本文探讨了如何利用Jenkins,Apache Mesos和Marathon搭建一套弹性的,高可用的持续集成环境。
【编者按】持续集成的开发实践是目前的一个热门话题,在本文中,数人科技云平台负责人周伟涛解析其利用开源的Jenkins,Apache Mesos和Marathon搭建弹性的,高可用的持续集成环境的实践,详细介绍了环境设置,在Marathon上部署Jenkins的master实例,配置Jenkins Master实现弹性伸缩,在内部的代码库或者 github 上创建一个 git repo,以及使用 marathon 部署可持久化的 Jenkins Master等步骤。持续集成(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资源池进行作业构建的整个过程。
环境设置为了便于理解,这里我简化了Mesos/Marathon集群的架构,不再考虑集群本身的高可用性。至于如何利用zookeeper配置高可用的mesos/marathon集群,可以参考Mesosphere的官方文档,这里不再展开。我搭建了一个包含40个节点 192.168.3.4-192.168.3.43 的Mesos集群,其中一个节点用作运行Marthon及Mesos-master,其它39个节点作为mesos的slave,如下所示。
配置启动Marathon,Mesos-Master和Mesos-Slave后,下面的整个操作都将在这个集群上完成。在Marathon上部署Jenkins的master实例Marathon支持web页面或者RESTapi两种方式发布应用,在192.168.3.*内网执行下面的bash命令,就会通过Marathon的RESTapi在mesos slave上启动一个Jenkins
master实例。
如果Jenkins master实例被成功部署,通过浏览器访问http://192.168.3.4:8080(请确定你的浏览器能够访问内网,譬如可以利用设置浏览器代理等方式来搞定)可以在running tasks列表中找到jenkins,点击进入详细信息页面,我们会看到下图:
访问http://192.168.3.4:5050/#/frameworks并在Active Frameworks中找到Marathon,点击进入详细信息页面,可以在该页面找到Jenkins Master具体运行到Mesos哪一台Slave上,如下图所示:
点击sandbox
配置Jenkins
Master实现弹性伸缩接下来是配置Jenkins注册成为Mesos的Framework,需要通过浏览器访问http://192.168.3.25:31052/来到Jenkins Master的UI页面。下面的截图是我逐步配置的全过程。1.点击”系统管理”中的”系统设置”2.设置Mesos Master为192.168.3.4:5050;点击”Test Connection”测试链接,显示链接成功后,点击”应用”保存设置。
Jenkins在Mesos上注册成功,访问http://192.168.3.4:5050/#/frameworks,我们可以找到jenkins
Framework,如下图所示:
现在我们可以同时启动多个构建作业来看一下Jenkins在Mesos上的弹性伸缩,在http://192.168.3.25:31052/上新建一个名为test的工程,配置其构建过程为运行一个shell命令top,如下图所示:
把该工程复制3份test2、test3和test4,并同时启动这4个工程的构建作业,Jenkins Master会向Mesos申请资源,如果资源分配成功,Jenkins Master就在获得的slave节点上进行作业构建,如下图所示:
因为在前面的系统配置里我们设置了执行者数量为2(即最多有两个作业同时进行构建),所以在上图中我们看到两个正在进行构建的作业,而另外两个作业在排队等待。下图展示了当前的Jenkins作业构建共使用了0.6CPU和1.4G内存:
正在使用的slave节点的详细信息:
配置Jenkins Slave参数(可选)在使用Jenkins进行项目构建时,我们经常会面临这样一种情形,不同的作业会有不同的资源需求,有些作业需要在配置很高的slave机器上运行,但是有些则不需要。为了提高资源利用率,显然,我们需要一种手段来向不同的作业分配不同的资源。通过设置Jenkins Mesos Cloud插件的slave info,我们可以很容易的满足上述要求。
具体的配置如下图所示:
至此我们利用mesos为jenkins弹性的提供资源,同时配置Jenkins Slave的参数来满足不同作业的资源需求,提高了集群的整体资源利用率。并通过Marathon 会自动检查运行在它之上的app的健康状态,
并重新发布崩溃掉的应用程序功能,实现了集群系统的部分高可用功能。接下来我们看看如何解决数据持久化的问题。如何解决Jenkins Master的数据持久化问题marathon会在Jenkins Master因意外崩溃后重新部署其到某个mesos slave节点上,但marathon无法维护应用程序的数据,即我们需要一个 Jenkins Master 的数据持久化方法,由于Jenkins Master是将数据存储在XML文件而不是数据库中,这里可以利用jenkins插件SCM Sync configuration plugin来将Jenkins Master的数据同步到相应的repo。在内部的代码库或者
github 上创建一个
git 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了。使用 marathon 部署可持久化的
Jenkins Master我们首先需要wget两个文件:
其中start-jenkins.app.sh是需要配置的,
编辑如下3个变量:1. SCM_SYNC_GIT:
上面所配置的
gitrepo 地址, 格式例子: git@gitlab.dataman.io:wtzhou/jenkins-on-mesos.git2. APP_USER: &marathon 会以用户 APP_USER
来部署 jenkins ,从而插件SCM-Sync-Configuration会以用户APP_USER来跟gitrepo进行同步。
所以在我们的这个例子里,我们让APP_USER=core。3. MARATHON_PORTAL: &marathon 的 RESTapi 入口,例如:
接下来就可以执行命令:
来让 marathon 部署我们的 Jenkins Master 了。这样,
我们在 Jenkins Master 上所保存的任何配置,创建的任何job都会被SCM-Sync-Configuration同步到repo里,并在 Jenkins Master 被重新发布后 download 到本地。关于SCM-Sync-Configuration的更多信息SCM-Sync-Configuration初始化完成后(在我们环境里初始化过程会被自动触发),每次配置更新或者添加,编辑构建作业时,我们会得到一个提示页面来为新的 commit message 添加 comment,如下图所示:
当前,所支持的配置文件如下:1. 构建作业的配置文件
(/jobs/*/config.xml)2. 全局的 Jenkins/Hudson 系统配置文件
(/config.xml)3. 基本的插件的配置文件
(/hudson*.xml, /scm-sync-configuration.xml)4. 用户手动指定的配置文件另外,我们可以在每一页的下面看到 scm sync config 的状态,
下图是同步出错时的截图,你可以去System Log查看具体的出错信息。
至此,我们又解决了Jenkins
Master的数据持久化问题。到这里,我们就真正搭建完成了基于Jenkins, Apache Mesos和Marathon的弹性高可用的持续集成环境。(责编/周建丁)作者简介:周伟涛,数人科技云平台负责人。曾在Red Hat工作。Pythoner,对NLP,CI,Mesos和Docker有一定的实践经验。
推荐阅读相关主题:
CSDN官方微信
扫描二维码,向CSDN吐槽
微信号:CSDNnews
相关热门文章

我要回帖

更多关于 android集成环境搭建 的文章

 

随机推荐