﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-高老庄-随笔分类-CI</title><link>http://www.blogjava.net/icestream/category/43740.html</link><description>八戒的梦想:农妇,山泉,有点田</description><language>zh-cn</language><lastBuildDate>Mon, 25 Jan 2010 10:58:31 GMT</lastBuildDate><pubDate>Mon, 25 Jan 2010 10:58:31 GMT</pubDate><ttl>60</ttl><item><title>hudson step by step</title><link>http://www.blogjava.net/icestream/archive/2010/01/25/310763.html</link><dc:creator>高老庄</dc:creator><author>高老庄</author><pubDate>Mon, 25 Jan 2010 10:58:00 GMT</pubDate><guid>http://www.blogjava.net/icestream/archive/2010/01/25/310763.html</guid><wfw:comment>http://www.blogjava.net/icestream/comments/310763.html</wfw:comment><comments>http://www.blogjava.net/icestream/archive/2010/01/25/310763.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/icestream/comments/commentRss/310763.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/icestream/services/trackbacks/310763.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;hudson是开源社区用的较多的一个开源持续集成工具,因为其开源，使用方便,扩展性强,对既有构建系统耦合性低，受到了大家一致的好评.<br />
&nbsp;&nbsp;&nbsp;&nbsp;使用:<br />
<strong>&nbsp;&nbsp;&nbsp;&nbsp;1.下载</strong>&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hudson的官方网站<a href="https://hudson.dev.java.net/" target="_blank">https://hudson.dev.java.net/</a>下提供了下载<br />
<strong>&nbsp;&nbsp;&nbsp;&nbsp;2.安装<br />
</strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hudson以war包的方式提供,因此安装方式极其简单，直接放到服务器的相应目录下,这里放到tomcat的webapp下,启动后，访问<a href="http://localhost:8088/hudson">http://localhost:8088/hudson</a> 可以进入hudson的控制台页面.<br />
&nbsp;&nbsp;&nbsp;&nbsp;<img height="368" alt="" src="http://www.blogjava.net/images/blogjava_net/icestream/main.png" width="853" border="0" />&nbsp;&nbsp;<br />
<strong>&nbsp;&nbsp;&nbsp;&nbsp;4.组织待构建的项目</strong><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;这里我们创建一个最为简单的任务.这个任务的目的是构建一个标准的java工程，将其中的源码编译，打包等.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;回顾下一般的、最为简单的开发流程:开发人员开发代码，然后利用诸如ant,mvn等负责构建系统,然后执行测试,最后发布到服务器上.通常，每个项目都会有一个完整的脚本来自动化的做这件事,如何驱动自动化脚本的执行(什么时间点,以什么频率,管理构建结果)，是hudson提供给我们的功能，hudson不关注特定一次构建的内部过程,这对hudson是透明的.目前，hudson通过插件的方式，提供了对基于ant 、mvn等常见构建工具的支持.本质上，hudson是一个任务管理和驱动执行工具,只不过，它驱动的软件开发流程中的构建等过程.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;准备:解决我们特定一次构建中，做什么的问题.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;基于测试的目的，我们创建一个示例java工程,结构如下:<br />
&nbsp;&nbsp;&nbsp;&nbsp;<img style="float: none" height="261" alt="" src="http://www.blogjava.net/images/blogjava_net/icestream/project.png" width="427" border="0" /><br />
&nbsp;&nbsp;&nbsp;&nbsp;此项目的采用ant,构建,ant脚本如下:<br />
&nbsp;&nbsp;&nbsp;&nbsp;
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="color: #0000ff">&lt;?</span><span style="color: #ff00ff">xml&nbsp;version="1.0"&nbsp;encoding="UTF-8"</span><span style="color: #0000ff">?&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">project&nbsp;</span><span style="color: #ff0000">basedir</span><span style="color: #0000ff">="."</span><span style="color: #ff0000">&nbsp;name</span><span style="color: #0000ff">="build.hudsondemo"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">&lt;!--</span><span style="color: #008000">&nbsp;=================================&nbsp;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;target:&nbsp;compile&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=================================&nbsp;</span><span style="color: #008000">--&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">target&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="compile"</span><span style="color: #ff0000">&nbsp;depends</span><span style="color: #0000ff">="prepare"</span><span style="color: #ff0000">&nbsp;description</span><span style="color: #0000ff">="compile&nbsp;the&nbsp;project&nbsp;to&nbsp;the&nbsp;bin"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">javac&nbsp;</span><span style="color: #ff0000">debug</span><span style="color: #0000ff">="true"</span><span style="color: #ff0000">&nbsp;destdir</span><span style="color: #0000ff">="${basedir}/bin"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">src&nbsp;</span><span style="color: #ff0000">path</span><span style="color: #0000ff">="${basedir}/src"</span><span style="color: #ff0000">&nbsp;</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">src&nbsp;</span><span style="color: #ff0000">path</span><span style="color: #0000ff">="${basedir}/test"</span><span style="color: #ff0000">&nbsp;&nbsp;</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">classpath</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">fileset&nbsp;</span><span style="color: #ff0000">dir</span><span style="color: #0000ff">="${basedir}/lib"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">include&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="*.jar"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">fileset</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">classpath</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">javac</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">target</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">&lt;!--</span><span style="color: #008000">&nbsp;=================================&nbsp;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;target:&nbsp;jar&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=================================&nbsp;</span><span style="color: #008000">--&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">target&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="jar"</span><span style="color: #ff0000">&nbsp;depends</span><span style="color: #0000ff">="compile"</span><span style="color: #ff0000">&nbsp;description</span><span style="color: #0000ff">="jar&nbsp;the&nbsp;project"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">mkdir&nbsp;</span><span style="color: #ff0000">dir</span><span style="color: #0000ff">="${basedir}/target"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">jar&nbsp;&nbsp;</span><span style="color: #ff0000">destfile</span><span style="color: #0000ff">="${basedir}/target/hudsondemo_${common.version}.jar"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">fileset&nbsp;</span><span style="color: #ff0000">dir</span><span style="color: #0000ff">="${basedir}/bin"</span><span style="color: #ff0000">&nbsp;</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">jar</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">target</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">&lt;!--</span><span style="color: #008000">&nbsp;=================================&nbsp;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;target:&nbsp;prepare&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=================================&nbsp;</span><span style="color: #008000">--&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">target&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="prepare"</span><span style="color: #ff0000">&nbsp;depends</span><span style="color: #0000ff">="clean"</span><span style="color: #ff0000">&nbsp;&nbsp;description</span><span style="color: #0000ff">="prepare&nbsp;the&nbsp;jar&nbsp;to&nbsp;the&nbsp;lib"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">copy&nbsp;</span><span style="color: #ff0000">todir</span><span style="color: #0000ff">="${basedir}/lib"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">fileset&nbsp;</span><span style="color: #ff0000">dir</span><span style="color: #0000ff">="${common.libs.dir}"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">include&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="*.jar"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">fileset</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">copy</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">target</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">&lt;!--</span><span style="color: #008000">&nbsp;=================================&nbsp;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;target:&nbsp;prepare&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=================================&nbsp;</span><span style="color: #008000">--&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">target&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="clean"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">delete&nbsp;</span><span style="color: #ff0000">dir</span><span style="color: #0000ff">="${basedir}/bin"</span><span style="color: #0000ff">&gt;&lt;/</span><span style="color: #800000">delete</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">delete&nbsp;</span><span style="color: #ff0000">dir</span><span style="color: #0000ff">="${basedir}/lib"</span><span style="color: #0000ff">&gt;&lt;/</span><span style="color: #800000">delete</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">mkdir&nbsp;</span><span style="color: #ff0000">dir</span><span style="color: #0000ff">="${basedir}/bin"</span><span style="color: #ff0000">&nbsp;</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">mkdir&nbsp;</span><span style="color: #ff0000">dir</span><span style="color: #0000ff">="${basedir}/lib"</span><span style="color: #ff0000">&nbsp;</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">target</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">project</span><span style="color: #0000ff">&gt;</span></div>
<p>&nbsp;&nbsp;&nbsp;&nbsp;为了说明问题，我特意的设定两个构建时参数:<br />
&nbsp;&nbsp;&nbsp;&nbsp;common.libs.dir&nbsp;指出从什么位置获取编译项目所需要的jar<br />
&nbsp;&nbsp;&nbsp;&nbsp;common.version&nbsp;指出构建的jar的版本号.<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;5.<strong>配置hudson的通用配置</strong><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;根据使用插件的多少，通用配置数量同，对上述的示例项目,我们需要配置&nbsp;ant&nbsp;和jdk(可选,如果需要指定用特定的jdk构建系统的话).<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;点击hudson主页面右上角的manger hudson,进入配置页面,有多项配置可以处理，但是目前仅仅需要用到System configurate 功能.在System configurate页面，可以如下的配置:</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;<img height="212" alt="" src="http://www.blogjava.net/images/blogjava_net/icestream/hudson_head.png" width="636" border="0" /><br />
&nbsp;&nbsp;&nbsp;&nbsp;贴此图的目的是需要关注下home directory这个配置，默认是当前用户目录下的.hudson,可以更改，一般在环境变量中设定一个HUSDON_HOME即可，同时将原有目录下文件copy到新目录下，重启hudson即可.也可以用其他的方式，比如设定容器参数等来指定.<br />
&nbsp;&nbsp;&nbsp;&nbsp;上述配置取默认既可.<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;配置jdk:<br />
&nbsp;&nbsp;&nbsp;&nbsp;<img height="192" alt="" src="http://www.blogjava.net/images/blogjava_net/icestream/hudson_jdk.png" width="749" border="0" /><br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;配置ant:<br />
&nbsp;&nbsp;&nbsp;&nbsp;<img height="192" alt="" src="http://www.blogjava.net/images/blogjava_net/icestream/hudson_ant.png" width="749" border="0" /><br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;<strong>6.&nbsp;创建构建任务</strong><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hudson能提供的功能都以任务存在.点击右上角的new job,将构建一个新的任务:<br />
&nbsp;&nbsp;&nbsp;&nbsp;<img height="310" alt="" src="http://www.blogjava.net/images/blogjava_net/icestream/newjob.png" width="1122" border="0" /><br />
&nbsp;&nbsp;&nbsp;&nbsp;输入任务名称，并选择第二项.<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;配置任务:解决如何安排构建任务的执行的问题.<br />
&nbsp;&nbsp;&nbsp;&nbsp;首先，我们需要指定如何保留构建历史,一种是基于时间的，保留多少天，一种是基于次数的，保留自当前开始多少次以内的.这里我们选择保留最新3次构建.<br />
&nbsp;&nbsp;&nbsp;&nbsp;<img height="120" alt="" src="http://www.blogjava.net/images/blogjava_net/icestream/discard_builds.png" width="1127" border="0" /><br />
&nbsp;&nbsp;&nbsp;&nbsp;再次，我们需要指定利用什么版本ant执行构建，同时指定构建时参数.<br />
&nbsp;&nbsp;&nbsp;&nbsp;<img height="276" alt="" src="http://www.blogjava.net/images/blogjava_net/icestream/job_ant.png" width="1104" border="0" /><br />
&nbsp;&nbsp;&nbsp;&nbsp;ant version 版本中，使用了在通用配置部分配置的ant.<br />
&nbsp;&nbsp;&nbsp;&nbsp;targets 中，指明了，每次构建时需要完成的target,可以指定多个target.<br />
&nbsp;&nbsp;&nbsp;&nbsp;build file 指明了，使用什么样的ant完成实际的构建过程.<br />
&nbsp;&nbsp;&nbsp;&nbsp;properties 指明了ant脚本中的使用的运行时参数.这些参数可以使用变量替换,hudson 会解析出实际的值再传给ant.<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;这就是这个任务可以执行的最基本配置,保存,并点击右上角的build new ,可以立即执行一个构建.构建结果如下:<br />
&nbsp;&nbsp;&nbsp;&nbsp;<img height="182" alt="" src="http://www.blogjava.net/images/blogjava_net/icestream/build_results.png" width="290" border="0" /><br />
&nbsp;&nbsp;&nbsp;&nbsp;红色表示失败构建,如果失败，可以在%HUDSON_HOME%\jobs\下查看对应任务构建的日志来排查问题.<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
<strong>&nbsp;&nbsp;&nbsp;&nbsp;8.&nbsp;两个可能经常需要关注的配置.</strong><br />
&nbsp;&nbsp;&nbsp;&nbsp;1.每个job的 workspace.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<img height="166" alt="" src="http://www.blogjava.net/images/blogjava_net/icestream/advance.png" width="1124" border="0" /><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;如果不指定绝对路径，配置的ant等脚本就是相对这个工作空间的.在上面的例子中工作空间的用处不大，但是在一些其他类型的构建，比如从svn中签出代码构建时，用处就体现出来了，另外,一些hudson的插件，所利用的文件(构建脚本生成,这些插件不会去关注文件产生，而是对这些文件做二次处理)都是放到工作空间的,工作空间相当与构建系统和hudson的一个交流中介.推荐是每个项目有自己独立的工作空间.<br />
&nbsp;&nbsp;&nbsp;&nbsp;2.自动构建的频率设定<br />
&nbsp;&nbsp;&nbsp;&nbsp;<img height="197" alt="" src="http://www.blogjava.net/images/blogjava_net/icestream/target.png" width="1124" border="0" /><br />
&nbsp;&nbsp;&nbsp;&nbsp;也就是什么时候触发构建，三种方式:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;当别的项目构建完毕后发生构建<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;利用cron表到式来指定频率,对cron表达式不熟悉的话，可以参考quartz(hudson内部使用的调度框架)相关的文档.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;检测scm(svn、cvs等)的状态，如果检测到变化，自动发生构建.<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;借助husdon,基本能做到无人值守构建和部署，不少插件可以利用，也可以开发自己的插件.上面的仅仅是一个例子而与，如果要应对实际工作中的问题，得好好研究才行.<br />
&nbsp;&nbsp;&nbsp;&nbsp;</p>
 <img src ="http://www.blogjava.net/icestream/aggbug/310763.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/icestream/" target="_blank">高老庄</a> 2010-01-25 18:58 <a href="http://www.blogjava.net/icestream/archive/2010/01/25/310763.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>