hudson是开源社区用的较多的一个开源持续集成工具,因为其开源,使用方便,扩展性强,对既有构建系统耦合性低,受到了大家一致的好评.
使用:
1.下载
hudson的官方网站
https://hudson.dev.java.net/下提供了下载
2.安装
hudson以war包的方式提供,因此安装方式极其简单,直接放到服务器的相应目录下,这里放到tomcat的webapp下,启动后,访问
http://localhost:8088/hudson 可以进入hudson的控制台页面.
4.组织待构建的项目
这里我们创建一个最为简单的任务.这个任务的目的是构建一个标准的java工程,将其中的源码编译,打包等.
回顾下一般的、最为简单的开发流程:开发人员开发代码,然后利用诸如ant,mvn等负责构建系统,然后执行测试,最后发布到服务器上.通常,每个项目都会有一个完整的脚本来自动化的做这件事,如何驱动自动化脚本的执行(什么时间点,以什么频率,管理构建结果),是hudson提供给我们的功能,hudson不关注特定一次构建的内部过程,这对hudson是透明的.目前,hudson通过插件的方式,提供了对基于ant 、mvn等常见构建工具的支持.本质上,hudson是一个任务管理和驱动执行工具,只不过,它驱动的软件开发流程中的构建等过程.
准备:解决我们特定一次构建中,做什么的问题.
基于测试的目的,我们创建一个示例java工程,结构如下:
此项目的采用ant,构建,ant脚本如下:
<?xml version="1.0" encoding="UTF-8"?>
<project basedir="." name="build.hudsondemo">
<!-- =================================
target: compile
================================= -->
<target name="compile" depends="prepare" description="compile the project to the bin">
<javac debug="true" destdir="${basedir}/bin">
<src path="${basedir}/src" />
<src path="${basedir}/test" />
<classpath>
<fileset dir="${basedir}/lib">
<include name="*.jar"/>
</fileset>
</classpath>
</javac>
</target>
<!-- =================================
target: jar
================================= -->
<target name="jar" depends="compile" description="jar the project">
<mkdir dir="${basedir}/target"/>
<jar destfile="${basedir}/target/hudsondemo_${common.version}.jar">
<fileset dir="${basedir}/bin" />
</jar>
</target>
<!-- =================================
target: prepare
================================= -->
<target name="prepare" depends="clean" description="prepare the jar to the lib">
<copy todir="${basedir}/lib">
<fileset dir="${common.libs.dir}">
<include name="*.jar"/>
</fileset>
</copy>
</target>
<!-- =================================
target: prepare
================================= -->
<target name="clean">
<delete dir="${basedir}/bin"></delete>
<delete dir="${basedir}/lib"></delete>
<mkdir dir="${basedir}/bin" />
<mkdir dir="${basedir}/lib" />
</target>
</project>
为了说明问题,我特意的设定两个构建时参数:
common.libs.dir 指出从什么位置获取编译项目所需要的jar
common.version 指出构建的jar的版本号.
5.配置hudson的通用配置
根据使用插件的多少,通用配置数量同,对上述的示例项目,我们需要配置 ant 和jdk(可选,如果需要指定用特定的jdk构建系统的话).
点击hudson主页面右上角的manger hudson,进入配置页面,有多项配置可以处理,但是目前仅仅需要用到System configurate 功能.在System configurate页面,可以如下的配置:
贴此图的目的是需要关注下home directory这个配置,默认是当前用户目录下的.hudson,可以更改,一般在环境变量中设定一个HUSDON_HOME即可,同时将原有目录下文件copy到新目录下,重启hudson即可.也可以用其他的方式,比如设定容器参数等来指定.
上述配置取默认既可.
配置jdk:
配置ant:
6. 创建构建任务
hudson能提供的功能都以任务存在.点击右上角的new job,将构建一个新的任务:
输入任务名称,并选择第二项.
配置任务:解决如何安排构建任务的执行的问题.
首先,我们需要指定如何保留构建历史,一种是基于时间的,保留多少天,一种是基于次数的,保留自当前开始多少次以内的.这里我们选择保留最新3次构建.
再次,我们需要指定利用什么版本ant执行构建,同时指定构建时参数.
ant version 版本中,使用了在通用配置部分配置的ant.
targets 中,指明了,每次构建时需要完成的target,可以指定多个target.
build file 指明了,使用什么样的ant完成实际的构建过程.
properties 指明了ant脚本中的使用的运行时参数.这些参数可以使用变量替换,hudson 会解析出实际的值再传给ant.
这就是这个任务可以执行的最基本配置,保存,并点击右上角的build new ,可以立即执行一个构建.构建结果如下:
红色表示失败构建,如果失败,可以在%HUDSON_HOME%\jobs\下查看对应任务构建的日志来排查问题.
8. 两个可能经常需要关注的配置.
1.每个job的 workspace.
如果不指定绝对路径,配置的ant等脚本就是相对这个工作空间的.在上面的例子中工作空间的用处不大,但是在一些其他类型的构建,比如从svn中签出代码构建时,用处就体现出来了,另外,一些hudson的插件,所利用的文件(构建脚本生成,这些插件不会去关注文件产生,而是对这些文件做二次处理)都是放到工作空间的,工作空间相当与构建系统和hudson的一个交流中介.推荐是每个项目有自己独立的工作空间.
2.自动构建的频率设定
也就是什么时候触发构建,三种方式:
当别的项目构建完毕后发生构建
利用cron表到式来指定频率,对cron表达式不熟悉的话,可以参考quartz(hudson内部使用的调度框架)相关的文档.
检测scm(svn、cvs等)的状态,如果检测到变化,自动发生构建.
借助husdon,基本能做到无人值守构建和部署,不少插件可以利用,也可以开发自己的插件.上面的仅仅是一个例子而与,如果要应对实际工作中的问题,得好好研究才行.