使用Jenkins实现自动构建Maven项目

自动构建(CI)是敏捷开发中非常重要的一个环节,Jenkins是最常用的开源的自动构建工具,本文将实现使用Jenkin实现每日自动构建并发布到远程开发服务器上给客户进行演示。

1. 安装Jenkins
Jenkins官网下载最新版的Jenkins(本文下载的版本是2.3.1),是一个war包,可以直接扔到tomcat的webapps目录下或其他Java Web容器中运行,也可以直接执行java命令进行安装,建议以第二种方式,程序独立并且可以自由设置。方法如下:

执行 java -jar jenkins.war --httpPort=8099 命令运行Jenkins,然后打开浏览器访问 http://localhost:8099 就可以运行Jenkins,非常简单。

上面的命令中 httpPort 用来设定端口,默认为8080,跟多的参数请访问 Starting and Accessing Jenkins
需要注意的是,Jenkins 2.x要求JDK的版本必须是1.7及以上,否则无法运行。

Jenkins 2.x 首次安装运行增加了安全认证,根据屏幕提示访问指定的initialAdminPassword文件内容,将里面的字符串输入验证之后才可以继续,第一次启动的时候需要等待系统初始化,然后根据向导来初始化系统,配置信息都放在了当前用户目录下的.jenkins目录中,也可以自定义目录。

如果想要Jenkins自动运行,Linux下直接将启动的命令放在/etc/rc.local中即可,Windows下面需要将其按章程服务,如果使用命令行运行的Jenkins,可以在Manage Jenkins下面点击的Install as Windows Service按钮进行安装:

执行的时候可以重新设置jenkins的目录,如果设置成新的目录之后默认的.jenkins目录就可以删除了。卸载的时候只要进入到数据目录,然后执行 jenkins uninstall 即可。

因为Jenkins会执行一些定时任务,所以需要比较大的内存,需要对web server分配足够的内存,如果是放在Java Web容器中的话在容器中设置,命令行的方式可以直接在命令行中增加参数,采用上面独立安装的方式的话,可以在数据目录下的jenkins.xml文件中设置,如下图所示:

为了提升运行的效率,Jenkins每次启动的时候会将配置信息读取到内存中,所以如果修改了Jenkins的配置信息的话,需要在Manage Jenkins下面点击 Reload Configuation from Disk,重新加载配置信息。

Jenkins以其拥有大量的插件而著称,接下来需要安装常用的插件,本文需要确保已经安装了如下插件:

Email Extension Plugin (邮件通知)
Deploy to container Plugin (部署到Java容器中的插件)
Publish Over SSH (远程Shell)
Maven Integration plugin (Maven集成,否则新建的时候没有Maven Project)
Monitoring (监控Jenkins所消耗的系统资源,如内存使用等)

在Plugin Manager中可以查看已经安装的插件,也可以通过在线的方式进行安装。

2. 对Jenkins进行配置
接下来在Global Tool Configuration中配置jdk和maven,见下图所示:

设置的时候可以直接让Jenkins在线安装,也可以设置成本机的路径。

3. 创建一个maven任务
回到主界面,点击左上角的New Item:

保存之后进入下一步,分别设置源代码管理,这里以SVN为例:

设置集成的方式,选中 Build periadically设置定时集成的表达式,规则和linux下的定时任务表达式规则是一致的:

设置项目的pom.xml文件(相对路径)和maven的命令:

上面 clean install 前面是maven的参数,分别表示指定profile、显示详细的错误信息、自动应答需要交互的流程和忽略测试。还可以加上 -U 参数强制更新Maven依赖包。点开下面的Advanced按钮之后可以设置MAVEN_OPTS等信息,主要设置jvm的一些参数,防止构建的时候出现内存溢出错误。

可以在此处设置一个针对当前项目的设置,也可以在Configure System设置中设置一个全局的配置:

经过这样设置保存之后,就可以进入欢迎页看到创建的项目了,然后点击最右边的 Build 按钮进行构建测试。在构建的时候可以点击项目的 Console Output 按钮查看控制台输出的日志,查看构建的过程。

还有几个问题请参考其他相关文章:
Jenkins构建时出现PermGen space错误的解决方法
使用Jenkins自动将maven webapp发布到远程演示服务器上

参考资料:
《Jenkins权威指南》
「Jenkins+Git+Maven+Shell+Tomcat持续集成」经典教程
Starting and Accessing Jenkins
使用Jenkins可持续集成maven项目
How to give Jenkins more heap space when it´s started as a service under Windows?
Maven实战(四)——基于Maven的持续集成实践
Skip a submodule during a maven build

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注