Hudson+Maven+Svn搭建持续集成环境

时间:2021-08-01 14:36:29

一、所用开发工具

1.    Hudson: Hudson 是一种革命性的开放源码 CI 服务器,它从以前的 CI服务器吸取了许多经验 教训。Hudson 最吸引人的特性之一是它很容易配置:很难找到更容易设置的 CI 服务器,也很难找到开箱即用特性如此丰富的CI 服务器。Hudson 容易使用的第二个原因是它具有强大的插件框架 ,所以很容易添加特性,例如添加tomcat插件后,可以方将build好的war包方便的部署到Tomcat里。下载地址:http://hudson-ci.org/

2.    Maven2:Maven 是一个*的 Apache Software Foundation 开源项目,创建它最初是为了管理 Jakarta Turbine 项目复杂的构建过程。从那以后,不论是开源开发项目还是私有开发项目都选择 Maven 作为项目构建系统。下载地址:http://maven.apache.org/download.html

3.    Subversion(svn):版本控制软件,和它功能相似的工具有cvs,perforce等。下载地址:http://www.subversion.org.cn/

4.    Hudson的自动部署插件,下载地址::https://hudson.dev.java.net/files/documents/2402/106347/deploy.hpi

二、工具的安装及设置

1.     Maven2的安装:把maven-2.0.4-bin.zip解压到D:\maven-2.0.4(或者你自己想解压的位置,我是如此配置的)下面就是配置环境变量了,这和1.0的版本是一样的。(1)MAVEN_HOME:D:\maven-2.0.4 (2)在Path 中加入%MAVEN_HOME%\bin

这样配置就OK了。测试是否安装成功,可以在命令行下输入mvn  -v,出现如下界面,说明安装成功

Hudson+Maven+Svn搭建持续集成环境

2.    Hudson的安装:Hudson的安装有两种方式(1)可以将Hudson部署到Tomcat下面运行,将下载的hudson.war直接放到Tomcat的webapp下,启动tomcat就ok了

(2)可以使用命令启动hudson。步骤:首先下载hudson.war,然后可以在一个盘符下建立一个文件夹,如D:\hudson(自己可以随意建立),然后将这个路径设置环境变量(别说你不会设置环境变量哦),Hudson_Home=D:\hudson,最后使用命令java -jar hudson.war启动hudson

3.    Svn的安装:svn的安装比较简单,下载好安装文件后,一路next即可。

三、Maven2+Hudson+Svn的集成

这里比较重要了,这三样的结合主要就是在这里来进行配置的,而Maven2和Svn的配置都是依赖于Hudson的,所以重点讲讲Hudson的配置

1.       Hudson的配置

用上述的Hudson的安装方法安装好Hudson后,就可以通过浏览器http://localhost:8080/hudson来打开Hudson的页面了,如下(如果你已经build过工程的话,会在这里显示出来哪些成功了,哪些失败了)

Hudson+Maven+Svn搭建持续集成环境

2.       Hudson的全局配置

接下来要对Hudson进行全局设置了,点击左边列表菜单Manage Hudson,然后点击Configure System。可以对hudson进行系统配置,包括全局路径和变量设置等。如下图

Hudson+Maven+Svn搭建持续集成环境

(1):System Message 当然了这是表面的东西啦,你可以写点随意的东西,比如HelloHudson啊,然后弄个Logo图片什么的,它也支持HTML语言,可以把这个欢迎界面弄的相当漂亮,不详述。

(2):Quiet period 这个值是表示你可以让你的构建有等待时间,以防止在提交代码的过程中去开始构建。这里是全局的变量,我习惯在每个项目里面去设定,因为我使用hudson搭建的项目有SVN的还有VSS的,这个等待时间的值肯定会不一样。(如果你想在这里设置可以查看右边的“帮助”)

(3):Enable security 这里是hudson权限的相应设置,选择该项后,如下图:

这里可以保留默认设置,如果你想对每个用户进行相应的权限操作,选择Authorization项下的Project-based Matrix Authorization Strategy这个选项就可以进行相应的设置了,如下图所示:

Hudson+Maven+Svn搭建持续集成环境

这里可以保留默认设置,如果你想对每个用户进行相应的权限操作,选择Authorization项下的Project-based Matrix Authorization Strategy这个选项就可以进行相应的设置了,如下图所示:

Hudson+Maven+Svn搭建持续集成环境

(4)Global properties这块设置默认即可

(5)Maven这里的设置,就是取个名字,然后路径中指定maven2的解压路径。如下图所示

Hudson+Maven+Svn搭建持续集成环境

在这里设置时,我一般去掉Install automatically,而是直接指定MAVEN_HOME,我的maven是装在C:\Program Files\apache-maven-2.2.1-bin\apache-maven-2.2.1(依个人设置)这里的,直接填入即可。

(6)JDK设置

Jdk的设置是必须的,如果你在这里没有设置jdk的路径的话,在build工程的时候有可能会报这个错误,如下图所示,

Hudson+Maven+Svn搭建持续集成环境

所以正确的设置也是去掉Install automatically选项,直接填写名称和   JAVA_HOME

我的JAVA_HOME是安装在C:\Java\jdk1.6.0_02这里的,所以直接填入即可。填写好的JDK设置如下图:

Hudson+Maven+Svn搭建持续集成环境

(7)shell,Ant,Maven,CVS等等,这些可以不用设定。这里就不做介绍啦,如果想了解的更深,右边的“help”(右边的蓝色小问号)会有很大的帮助。

(8):E-mail Notification 这个主要是邮件提醒,可以不用设置,要感兴趣的话,可以这样设置,具体参考右边的蓝色小问号。

SMTP server-->mail服务器地址(127.0.0.1)

Default user e-mail suffix-->邮件的后缀名(@123.com)

System Admin E-mail Address-->管理员用户的邮件帐号123@123.com

Hudson URL-->访问hudson的URL(http://127.0.0.1:8080

至此,Hudson的全局配置就差不多了…...

3.       开始创建job

点击左侧列表菜单的New Job,出现如下界面

填写Job name,然后选中Build a maven2 project,依个人项目设定,这里讲Maven2的工程,点击OK按钮。进入job的设置页面(这里是重点,在这里我们可以看到Hudson的伟大,如何将Maven2的工程以及Svn集成起来)如下图所示

Hudson+Maven+Svn搭建持续集成环境

(1): Project Name 在你建立项目的时候已经取过名字了,TestJob.如果你哪天想改名字,就在这里改就可以了.

(2): Description 这里主要是写对TestJob这个项目的描述,可以写项目的参与者,项目起止日期等等,可以说这个地方是美化界面+项目描述+提示信息等等,我对于界面美化没有太多的要求,这个就留给大家去研究啦.

(3): Discard Old Builds 建议开启这个选项(hudson有一个选项,可以从SVN上check out项目,但这个项目的位置好像只能是%hudson_home%/jobs/projectname/workspace下面,本人认为这是一个不合理的方式,因为很正常的大家都会在自己的目录下建立项目后,然后再用hudson去构建环境。

Advanced Project Options: 这里是表示你可以对你的项目构建进行一定的设置,它下面包括两个小的选项,

(1).Quiet period: 时间可以根据项目的需要来设定。哦,差点忘了,这里的这个时间是说明从构建开始到项目真正开始构建之间的时间差,比如,我将此时间设为300S,说明TestJob在要开始构建之前会有5分钟的时间缓冲,这个是非常人性化的,因为如果有大量的代码需要提交,会需要很长时间,如果没有等待时间的话很容易出现少代码的情况导致整个构建过程的失败。

(2).Use custom workspace:这个地方你可以将可以对外公布的东西放在一个特定的目录下,然后把这里的值设成该目录,如:D:\hudson\jobs\TestJob\builds这样的话,这个目录下的东西是就公共的了。

Source Code Management:呵呵,这里就是要结合版本控制工具的地方了,这里就看你选用的是那种工具了,我用的是svn,所以设置如下

在Repository URL里填入你的仓库地址,svn有两种地址,一种是http://.....这样的,一种是svn://......的,我这里是用的第二种方式,所以填入svn://192.168.0.245:56581/mydemo

(注意,这里是工程的根目录,也就是pom.xml所在的目录,你可不要填写成svn://192.168.0.245:56581/demo/src等的目录了。要注意哦!!!)

Use update: 这里选项勾上后,每次检测到库上有更新,就会使用svn update命令;如果没有勾上的话,那每次使用的是svn checkout命令,理由是update要比checkout命令省相当多的时间。

Build Triggers:可以理解为你想以什么样的方式去触发你的构建,以其它构建成功后为基础,还是周期性的构建,还是根据poll SCM(变更触发)来触发构建。

我习惯选择 Build periodically,并在Schedule中输入 0 12,20 * * *。

注: Schedule的配置规则是有5个空格隔开的字符组成,从左到右分别代表:分 时 天 月 年。*代表所有,具体参考右面的蓝色小问号

0 12,20 * * * 表示在任何年任何月的任何天的12和20点的0分 进行构建

Build和Build Settings没有什么特殊的设置,可以不用设置

Post-build Actions:这里也可以说是做一些发布啊,善后啊之类的,可以看到有mail, artifacts, publish之类的。

☆Hudson的自动部署:

一般我们build成功一个项目后,Hudson会在%Hudson_home%/jobs/projecct_name/ workspace/ projecct_name/ target下发布一个项目的war包。(注释:project_name是你的项目名称,Hudson_home一般在C:\Documents and Settings\username\.hudson下。其中username是你当前的系统用户,有来宾账户或者administrator等。呵呵,注释是不是很无聊啊,为普及用,见谅。)但是我们想build成功后,就要看到我们项目进展的怎么样了,就想通过Tomcat来加载这个war包直接看效果,这时,我们不得不手动的把这个war包拷贝到Tomcat的webapp下,然后启动Tomcat。很麻烦吧,这里介绍的就是这种简单的自动部署方法,可以通过Hudson的一个插件,呵呵,现在前面提到的那个插件就起大作用了。点击左侧列表菜单Manage Hudson,然后选择第三项Manage Plugins,这个选项的功能是管理Hudson插件的,(或者直接输入:http://localhost:8080/hudson/pluginManager/)在这里说明了Hudson的扩展性有多么的强大,在插件管理中心点击Advanced,在upload plugin 中上传刚才下载的插件,上传完毕后需要重启hudson才能完成安装(即重启tomcat),重启后点击New Job后,然后建立一个新的Job时(已有的项目,直接点击进入项目,然后点左侧的功能菜单configure),在配置页面的Post-build Actions项下面会多出一项功能:Deploy war/ear to a container,在这里WAR/EAR file:就是填写hudson所打好的war包路径,之前说过,hudson打好的war包是放在这里的,所以这里就写%Hudson_home%/jobs/projecct_name/ workspace/ projecct_name/ target/你的war文件的名称.war。Container选择你的Tomcat的版本。Manager user name:填写Tomcat的用户名,默认是admin, Manager password:填写Tomcat的密码,默认是空。Tomcat URL:填写http://localhost:8080/就ok了,至此保存就可以了,这样,当你再build此工程的时候,war文件会自动部署到你的tomcat的webapp目录下。设置如下图所示

Hudson+Maven+Svn搭建持续集成环境

Ok,最基本的快速的配置到这里就完了,大家觉得有用或者有问题的话,记得留言哦!!!!

5 
1 
分享到:  
评论
14 楼 wangzl2222 2013-03-04  
按照这个配置在tomcat的webapps下面就是没有war包,怎么回事?
13 楼 lzl129 2012-08-02  
  1. no change for http://repo.glarygroup.com/brand/trunk/core since the previous build
  2. ERROR: A Maven installation needs to be available for this project to be built.
  3. Either your server has no Maven installations defined, or the requested Maven version does not exist.
  4. [DEBUG] Skipping watched dependency update for build: core-compile #10 due to result: FAILURE
  5. Finished: FAILURE

请楼主帮忙看看。。。
QQ:398260301

12 楼 lzl129 2012-08-02  
我的怎么配置都不行,麻烦楼主帮忙看看。。
no change for http://repo.glarygroup.com/brand/trunk/core since the previous build
ERROR: A Maven installation needs to be available for this project to be built.
Either your server has no Maven installations defined, or the requested Maven version does not exist.
[DEBUG] Skipping watched dependency update for build: core-compile #10 due to result: FAILURE
Finished: FAILURE

QQ:398260301

11 楼 hgdcaixin 2012-04-01  
chxiaowu 写道
btl2024 写道
你好! 我都按照你的仔细的配了,跟三楼一样提示: 
Parsing POMs 
ERROR: No such file D:\Program\Hudson\HudsonHome\jobs\MyMaven2testjob\workspace\pom.xml 
Perhaps you need to specify the correct POM file path in the project configuration? 
Finished: FAILURE

弄了好久(查了很久没弄明白)..... 
以前没用过自动构建工具也没用过CI,不知道这个pom.xml 
文件干嘛用的,怎么生成的(自动还是手工配置),你给3楼回的那个我仔细看了,我的svn路径是项目目录下,是没有错的,我项目根目录下(src下)也没有那个pom.xml文件。好像就没见过这个东西

还望楼主给指教指教,非常感谢!

没有 pom.xml? 问题应该是这样的 。 
采用 Maven 方式,自动构建。需要你的项目本身就是 添加了 maven支持的。 
这样才会有 pom.xml。(eclipse 新建项目,下面不是有 添加 maven的选项么。)

在C:\Documents and Settings\Administrator\.hudson\jobs\目录下的workspace文件里有你的发布的工程把工程里的pom.xml文件向上级目录拷贝,再修改pom.xml文件中maven-war-plugin <directory></directory>路径加上上一级目录

10 楼 fengzhiyin 2011-12-29  
%Hudson_home%/jobs/projecct_name/ workspace/ projecct_name/ target/
hypgr 写道
我 的构建都成功了,可是自动部署却没有功能,都没有开始,
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 19 seconds
[INFO] Finished at: Thu Jun 24 20:28:03 CST 2010
[INFO] Final Memory: 28M/127M
[INFO] ------------------------------------------------------------------------
channel stopped
Finished: SUCCES
然后后面就没有,不知道是怎么回事,
Deply的网上有人说1.5的plugin不成功,换成1.4就成功了,可能换成1.4也是一样,没有开始Deply,不知道是怎么回事
9 楼 lqp03051228 2011-09-01  
我现在的项目分了很多的子项目,相互之间有依赖关系. 
比如:projectA,projectB,projectC,projectD 
projectB要引用projectA 
projectC要引用projectA 
projectD要引用projectB,projectC 
这种时候我该怎么去集成呢?
8 楼 sinye 2011-03-25  
chxiaowu 写道
btl2024 写道
你好! 我都按照你的仔细的配了,跟三楼一样提示: 
Parsing POMs 
ERROR: No such file D:\Program\Hudson\HudsonHome\jobs\MyMaven2testjob\workspace\pom.xml 
Perhaps you need to specify the correct POM file path in the project configuration? 
Finished: FAILURE

弄了好久(查了很久没弄明白)..... 
以前没用过自动构建工具也没用过CI,不知道这个pom.xml 
文件干嘛用的,怎么生成的(自动还是手工配置),你给3楼回的那个我仔细看了,我的svn路径是项目目录下,是没有错的,我项目根目录下(src下)也没有那个pom.xml文件。好像就没见过这个东西

还望楼主给指教指教,非常感谢!

没有 pom.xml? 问题应该是这样的 。 
采用 Maven 方式,自动构建。需要你的项目本身就是 添加了 maven支持的。 
这样才会有 pom.xml。(eclipse 新建项目,下面不是有 添加 maven的选项么。)

chxiaowu 写道
btl2024 写道
你好! 我都按照你的仔细的配了,跟三楼一样提示: 
Parsing POMs 
ERROR: No such file D:\Program\Hudson\HudsonHome\jobs\MyMaven2testjob\workspace\pom.xml 
Perhaps you need to specify the correct POM file path in the project configuration? 
Finished: FAILURE

弄了好久(查了很久没弄明白)..... 
以前没用过自动构建工具也没用过CI,不知道这个pom.xml 
文件干嘛用的,怎么生成的(自动还是手工配置),你给3楼回的那个我仔细看了,我的svn路径是项目目录下,是没有错的,我项目根目录下(src下)也没有那个pom.xml文件。好像就没见过这个东西

还望楼主给指教指教,非常感谢!

没有 pom.xml? 问题应该是这样的 。 
采用 Maven 方式,自动构建。需要你的项目本身就是 添加了 maven支持的。 
这样才会有 pom.xml。(eclipse 新建项目,下面不是有 添加 maven的选项么。)

是这样,要加入maven支持的,在eclipse创建项目的时候,下面有添加maven支持的选项,这样创建出来的项目就有pom.xml了,这个pom.xml里记录了项目的配置情况,以及引入jar文件的情况等

7 楼 chxiaowu 2011-03-22  
btl2024 写道
你好! 我都按照你的仔细的配了,跟三楼一样提示:
Parsing POMs
ERROR: No such file D:\Program\Hudson\HudsonHome\jobs\MyMaven2testjob\workspace\pom.xml
Perhaps you need to specify the correct POM file path in the project configuration?
Finished: FAILURE

弄了好久(查了很久没弄明白)..... 
以前没用过自动构建工具也没用过CI,不知道这个pom.xml
文件干嘛用的,怎么生成的(自动还是手工配置),你给3楼回的那个我仔细看了,我的svn路径是项目目录下,是没有错的,我项目根目录下(src下)也没有那个pom.xml文件。好像就没见过这个东西

还望楼主给指教指教,非常感谢!

没有 pom.xml? 问题应该是这样的 。
采用 Maven 方式,自动构建。需要你的项目本身就是 添加了 maven支持的。
这样才会有 pom.xml。(eclipse 新建项目,下面不是有 添加 maven的选项么。)

6 楼 btl2024 2010-11-24  
你好! 我都按照你的仔细的配了,跟三楼一样提示: 
Parsing POMs 
ERROR: No such file D:\Program\Hudson\HudsonHome\jobs\MyMaven2testjob\workspace\pom.xml 
Perhaps you need to specify the correct POM file path in the project configuration? 
Finished: FAILURE

弄了好久(查了很久没弄明白)..... 
以前没用过自动构建工具也没用过CI,不知道这个pom.xml 
文件干嘛用的,怎么生成的(自动还是手工配置),你给3楼回的那个我仔细看了,我的svn路径是项目目录下,是没有错的,我项目根目录下(src下)也没有那个pom.xml文件。好像就没见过这个东西

还望楼主给指教指教,非常感谢!

5 楼 hypgr 2010-06-25  
我 的构建都成功了,可是自动部署却没有功能,都没有开始, 
[INFO] ------------------------------------------------------------------------ 
[INFO] BUILD SUCCESSFUL 
[INFO] ------------------------------------------------------------------------ 
[INFO] Total time: 19 seconds 
[INFO] Finished at: Thu Jun 24 20:28:03 CST 2010 
[INFO] Final Memory: 28M/127M 
[INFO] ------------------------------------------------------------------------ 
channel stopped 
Finished: SUCCES 
然后后面就没有,不知道是怎么回事, 
Deply的网上有人说1.5的plugin不成功,换成1.4就成功了,可能换成1.4也是一样,没有开始Deply,不知道是怎么回事
4 楼 sinye 2010-06-03  
getdate 写道
现在有个问题是:我按着上面的步骤都一步一步地进行的,但是总是无法构建成功。 
Hudson 的构建日志如下: 
Started by timer 
Updating svn://192.168.1.15/abc 
At revision 8 
no change for svn://192.168.1.15/abc since the previous build 
Parsing POMs 
ERROR: No such file C:\Documents and Settings\Administrator\.hudson\jobs\abc\workspace\abc\pom.xml 
Perhaps you need to specify the correct POM file path in the project configuration?
[8mha:AAAAWB+LCAAAAAAAAABb85aBtbiIQSmjNKU4P08vOT+vOD8nVc8DzHWtSE4tKMnMz/PLL0ldFVf2c+b/lb5MDAwVRQxSaBqcITRIIQMEMIIUFgAAckCEiWAAAAA=[0mFinished: FAILURE

好像是没有pom.xml文件, 
但是 Maven 已经按着咱们上面所说的步骤 安装好了啊?

还望楼主给指点指点。。

请确定你的svn的访问地址的当前目录下存在pom.xml,也就是说svn的访问地址不是你的工程的上级目录或者下级目录,就是工程的根目录。 
例如:你的工程叫AAA,那么保证你的svn访问地址就是AAA,而不是/AAA/BBB

3 楼 getdate 2010-06-01  
现在有个问题是:我按着上面的步骤都一步一步地进行的,但是总是无法构建成功。 
Hudson 的构建日志如下: 
Started by timer 
Updating svn://192.168.1.15/abc 
At revision 8 
no change for svn://192.168.1.15/abc since the previous build 
Parsing POMs 
ERROR: No such file C:\Documents and Settings\Administrator\.hudson\jobs\abc\workspace\abc\pom.xml 
Perhaps you need to specify the correct POM file path in the project configuration?
[8mha:AAAAWB+LCAAAAAAAAABb85aBtbiIQSmjNKU4P08vOT+vOD8nVc8DzHWtSE4tKMnMz/PLL0ldFVf2c+b/lb5MDAwVRQxSaBqcITRIIQMEMIIUFgAAckCEiWAAAAA=[0mFinished: FAILURE

好像是没有pom.xml文件, 
但是 Maven 已经按着咱们上面所说的步骤 安装好了啊?

还望楼主给指点指点。。

2 楼 sinye 2010-01-28  
mutongwu 写道
想请问一下:连接SVN时候的用户名密码,在什么时候指定的?如何修改? 
hudson是不是默认使用启动tomcat应用的用户作为连接SVN的用户?

(1)SVN的用户名密码是在建立你的仓库后,在仓库下的conf目录 
修改svnserve.conf: 
# [general] 
# password-db = passwd 
改为: 
[general] 
password-db = passwd

然后修改同目录的passwd文件,去掉下面三行的注释: 
# [users] 
# harry = harryssecret 
# sally = sallyssecret 
最后变成: 
[users] 
harry = harryssecret 
sally = sallyssecret

在passwd文件中,“=”前的字符就是用户名,后面的就是密码。还要注意“[users]”前面的注释“#”一定要删除掉。具体参考: 
http://www.subversion.org.cn/?action-viewnews-itemid-1 
(2)svn有自己设定用户和密码的地方,所以不是使用tomcat的用户。 

1 楼 mutongwu 2010-01-27  
想请问一下:连接SVN时候的用户名密码,在什么时候指定的?如何修改?
hudson是不是默认使用启动tomcat应用的用户作为连接SVN的用户?