首页 » Java程序员修炼之道 » Java程序员修炼之道全文在线阅读

《Java程序员修炼之道》12.4 Jenkins:满足CI需求

关灯直达底部

CI的成功要靠管理(开发纪律)和工具相结合。为了让CI过程达到优秀的标准,Jenkins提供了很多必需的支持,如表12-2所示。

表12-2 衡量CI构建是否优秀的标准及Jenkins如何达成这些标准

标准Jenkins如何达成自动构建Jenkins会在你需要的任何时间运行构建。它可以通过构建触发器实现自动构建一直测试Jenkins能运行任何你想要的目标,包括Maven的test。它有强大的测试失败趋势报告,只要有一个测试没通过,它就会报告构建失败定期提交这是开发人员的事每次提交都构建每次检测到版本控制库的新提交时Jenkins都可以执行构建快速构建这对基于单元测试的构建更加重要,因为你想要它们有更快的往返时间。Jenkins可以把工作发送给从属节点从而提高速度,但更主要的是开发人员做出精益的、有意义的构建脚本,并配置Jenkins在执行构建时调用恰当的构建周期目标结果可视化Jenkins有基于Web的仪表板,还有一套发送通知的办法

所有CI服务器都能轮询版本控制资源库,并执行构建周期目标compiletest。让Jenkins脱颖而出的是它易于使用的UI和可扩展的插件生态系统。

在配置Jenkins和它的插件时,UI的帮助非常大,它经常会在你输入完成后用Ajax检查输入的有效性。它还提供了大量的情景式帮助信息,运行Jenkins根本就不需要专业技能。

Jenkins的插件包罗万象,几乎可以轮询任何版本控制资源库,并且可以生成一系列非常有价值的代码报告。

Jenkins和Hudson

在网上和某些书中,这个CI服务器的名字有些混乱。Jenkins实际上是Hudson项目最近出现的一个副本,主流的开发人员和活跃的社区现在都集中在Jenkins上。Hudson本身仍然是一个优秀的CI服务器,但相较而言Jenkins项目更活跃。

Jenkins是自由的开源软件,其社区充满活力,对新手帮助很大。

关于如何下载和安装Jenkins,请参阅附录D。完成下载和安装后,马上回来继续!

警告 假定你会把Jenkins的WAR文件装到Web服务器上,那么Jenkins安装的根URL是http://localhost:8080/jenkins/。如果是直接运行WAR文件1,根URL应该是http://localhost:8080/。

1 指运行java –jar Jenkins.war。——译者注

本节会讨论Jenkins安装的基础配置,然后是如何设置、执行构建任务。我们会以java7developer项目为例,但你可以随意选用自己喜欢的项目。

为了让Jenkins监测源码资源库并执行构建,需要先配置基础设置。

12.4.1 基础配置

我们会从Jenkins的主页http://localhost:8080/jenkins/开始。要配置Jenkins,请点击左边菜单中的Manage Jenkins(管理Jenkins)链接(http://localhost:8080/jenkins/manage)。管理页中列出了很多设置选项。

现在,选择Configure System(系统配置)链接(http://localhost:8080/jenkins/configure)。你应该能进入类似于图12-2的界面中。

图12-2 Jenkins配置页

从界面的顶部可以看到Jenkins的home目录的位置。如果需要在UI之外进行配置,可以到这个目录中去。

提示 如果你是为团队安装Jenkins,并且需要考虑安全性,应该选中Enable Security(安全保护)和Prevent Cross Site Request Forgery Exploits(阻止跨域攻击请求)多选框,并进行相应的配置。对初学者来说,用Jenkins自身的数据库最容易。以后你可以随时切换到企业LDAP上,或基于Active Directory(活动目录)进行认证和授权。

为了执行构建,Jenkins需要知道构建工具放在哪里。这还要在配置页中设置,找到单词“Maven”。

1. 构建工具配置

Jenkins内置了对Ant和Maven(可以用插件支持其他构建工具)的支持。在java7developer项目中,我们用的是Maven(在Windows上),所以对Jenkins的配置如图12-3所示。

图12-3 设置构建工具Maven

注意,Jenkins有一个自动安装Maven的选项,在没装Maven的机器上,这个选项还是挺方便的。

现在Maven配置好了,需要告诉Jenkins你用什么版本控制资源库。这在配置页的下面。找到单词SVN。

2. 版本控制配置

Jenkins内置了对CVS和Subversion(SVN)的支持。像Git和Mercurial这样的版本控制系统也有插件。java7developer项目用SVN 1.6,配置如图12-4所示。

图12-4 SVN版本控制配置

在设置好这些配置后,点击屏幕底部的Save按钮,以确保这些配置会被保存下来。

现在Jenkins的基础设置已经做好了,可以创建你的第一个任务了。

12.4.2 设置任务

要设置新任务,请回到仪表板中并点击左手菜单的New Job(新任务)链接,进入任务设置页面(http://localhost:8080/jenkins/view/All/newJob)。这里有很多选项可供选择。

要设置一个任务来构建java7developer项目,先要给任务确定一个标题(java7developer),选择Build a Maven 2/3 Project(构建一个Maven 2/3项目)选项并点击OK按钮继续。你应该会进入一个类似图12-5的配置界面。这里有一些输入项要填,但下面这些应该是你先填好的内容:

  • 源码管理;
  • 构建触发器;
  • 构建。

图12-5 Maven 2/3任务配置页面

我们从源码管理的配置开始。

1. 源码管理

源码管理主要设置要构建的源码来自版本控制的哪个分支、标记或标签。随着你的团队向版本控制系统中稳步添加源码,它就是持续集成中的“集成”。对于java7developer项目,我们用SVN构建主干中的源码。设置如图12-6所示。

图12-6 java7developer源码管理配置

一旦告诉Jenkins从哪里获取源码,接下来要配置的就是Jenkins应该隔多长时间构建一次,这是通过构建触发器完成的。

2. 构建触发器

构建触发器把“持续”引入了持续集成。你可以要求Jenkins在源码控制库每次有新提交时就进行构建,或者采用更悠闲的方式,设为每日构建一次。

我们对java7developer项目的设置,只是要求Jenkins每隔15分钟轮询SVN一次,如图12-7所示。

图12-7 java7developer构建触发器配置

你可以点击输入项旁边的帮助图标(表示为?)查看帮助信息。在这个例子中,编写类似cron的表达式来指定轮询周期时你可能需要帮助。

到这个阶段,Jenkins已经知道了到哪里去找源码,隔多长时间构建一次。接下来就该告诉Jenkins应该执行哪个构建阶段(构建脚本中的目标或目的)。

3. 构建

用Jenkins可以设置很多任务来执行构建周期的不同阶段。你可能想要一个每晚执行一次完整的系统集成测试的任务。但更多情况下,你可能想要执行频率更高的任务,在每次有新的源码提交到版本控制系统时编译源码并运行单元测试。

对于java7developer项目,我们要求Jenkins执行Maven的cleaninstall目标,如图12-8所示。

图12-8 Java7developer任务中要执行的Maven构建目标(cleaninstall

Jenkins现在有java7developer项目的所有信息了,它可以每隔15分钟轮询一次SVN代码库的主干,执行Maven的cleaninstall目标。不要忘了点击Save按钮把任务存下来!

现在可以回到仪表板,在那里看看你的任务,它应该非常像图12-9。

图12-9 有java7developer任务的仪表板

在Last Success (S)一栏(最近一次成功),圆形图标表示任务最后一次构建的状态。在Weather (W)(天气)一栏,天气图标表示项目的总体健康状况,它是由构建失败的频率、测试是否通过,还有一系列其他可能情况(取决于你配置的插件)决定的。要进一步了解这些图标的含义,请点击仪表板中的Legend(图例)链接(http://localhost:8080/jenkins/legend)。

现在任务已经准备好了,你可能想看看它运行起来是什么样!你可以等15分钟后的第一次轮询,也可以强制执行一次构建。

12.4.3 执行任务

要检查新配置,强迫任务执行是个好办法。对于java7developer任务,只要到仪表板中,点击Schedule a Build(调度构建)按钮(在Last Duration旁边带绿色箭头的钟表图标)。然后你就能刷新页面去看看构建的执行结果了。

提示 点击仪表板右上角的Enable Auto Refresh(允许自动刷新),可以让仪表板自动刷新。这样你就可以及时看到当前构建的状态了。

在构建执行时,java7developer任务的第一个图标会闪,表明构建正在处理中。在页面左侧还能看到Build Executor Status(构建执行器状态)。构建一完成,Last Success (S)(最近一次成功)一栏那个圆形图标就变成了红色,表明构建失败了。

这个失败是因为漏掉了build.properties文件。如果你阅读12.2节时没按照书中的指示做,现在也可以很快解决掉这个问题,找到build.properties文件样本,编辑它,以便能找到要用到的Java 7 JDK。下面是在Unix上执行这些操作的例子:

cd $USER/.jenkins/jobs/java7developer/workspace/java7developercp sample_build_unix.properties build.properties  

现在你可以回到仪表板中,再次手工运行构建。这次构建应该能成功,并且仪表板中java7developer任务的Last Success(最近一次成功)一栏应该是个蓝色图标,表示构建成功了。

你还可以马上去看一下构建的测试报告,因为Jenkins知道如何读取Maven产生的输出。要看测试结果,可以点击java7developer任务Last Success一栏的链接(http://localhost:8080/jenkins/job/java7developer/lastSuccessfulBuild/)。该链接会将你带入Latest Test Result(最新测试结果)页面,其界面如图12-10所示。

图12-10 java7developer成功构建的测试结果

测试全部通过,非常棒!如果有任何一个失败,你可以深入了解每个测试的细节。

我们对运行失败和成功构建的基础都进行了总结。对于java7developer项目来说,Jenkins会继续轮询SVN并在发现新提交时执行新构建。

你已经见过Jenkins如何运行构建,构建因不同原因失败时如何在界面上发出警告,如何检查测试成功或失败。但Jenkins可以做得不止这些,它还能给出一系列实用的代码指标,让你对代码的质量有更深入的认识。