hudson是開源社區(qū)用的較多的一個開源持續(xù)集成工具,因為其開源,使用方便,擴展性強,對既有構(gòu)建系統(tǒng)耦合性低,受到了大家一致的好評.
使用:
1.下載
hudson的官方網(wǎng)站
https://hudson.dev.java.net/下提供了下載
2.安裝
hudson以war包的方式提供,因此安裝方式極其簡單,直接放到服務(wù)器的相應(yīng)目錄下,這里放到tomcat的webapp下,啟動后,訪問
http://localhost:8088/hudson 可以進入hudson的控制臺頁面.
4.組織待構(gòu)建的項目
這里我們創(chuàng)建一個最為簡單的任務(wù).這個任務(wù)的目的是構(gòu)建一個標準的java工程,將其中的源碼編譯,打包等.
回顧下一般的、最為簡單的開發(fā)流程:開發(fā)人員開發(fā)代碼,然后利用諸如ant,mvn等負責構(gòu)建系統(tǒng),然后執(zhí)行測試,最后發(fā)布到服務(wù)器上.通常,每個項目都會有一個完整的腳本來自動化的做這件事,如何驅(qū)動自動化腳本的執(zhí)行(什么時間點,以什么頻率,管理構(gòu)建結(jié)果),是hudson提供給我們的功能,hudson不關(guān)注特定一次構(gòu)建的內(nèi)部過程,這對hudson是透明的.目前,hudson通過插件的方式,提供了對基于ant 、mvn等常見構(gòu)建工具的支持.本質(zhì)上,hudson是一個任務(wù)管理和驅(qū)動執(zhí)行工具,只不過,它驅(qū)動的軟件開發(fā)流程中的構(gòu)建等過程.
準備:解決我們特定一次構(gòu)建中,做什么的問題.
基于測試的目的,我們創(chuàng)建一個示例java工程,結(jié)構(gòu)如下:

此項目的采用ant,構(gòu)建,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>
為了說明問題,我特意的設(shè)定兩個構(gòu)建時參數(shù):
common.libs.dir 指出從什么位置獲取編譯項目所需要的jar
common.version 指出構(gòu)建的jar的版本號.
5.配置hudson的通用配置
根據(jù)使用插件的多少,通用配置數(shù)量同,對上述的示例項目,我們需要配置 ant 和jdk(可選,如果需要指定用特定的jdk構(gòu)建系統(tǒng)的話).
點擊hudson主頁面右上角的manger hudson,進入配置頁面,有多項配置可以處理,但是目前僅僅需要用到System configurate 功能.在System configurate頁面,可以如下的配置:

貼此圖的目的是需要關(guān)注下home directory這個配置,默認是當前用戶目錄下的.hudson,可以更改,一般在環(huán)境變量中設(shè)定一個HUSDON_HOME即可,同時將原有目錄下文件copy到新目錄下,重啟hudson即可.也可以用其他的方式,比如設(shè)定容器參數(shù)等來指定.
上述配置取默認既可.
配置jdk:

配置ant:

6. 創(chuàng)建構(gòu)建任務(wù)
hudson能提供的功能都以任務(wù)存在.點擊右上角的new job,將構(gòu)建一個新的任務(wù):

輸入任務(wù)名稱,并選擇第二項.
配置任務(wù):解決如何安排構(gòu)建任務(wù)的執(zhí)行的問題.
首先,我們需要指定如何保留構(gòu)建歷史,一種是基于時間的,保留多少天,一種是基于次數(shù)的,保留自當前開始多少次以內(nèi)的.這里我們選擇保留最新3次構(gòu)建.

再次,我們需要指定利用什么版本ant執(zhí)行構(gòu)建,同時指定構(gòu)建時參數(shù).

ant version 版本中,使用了在通用配置部分配置的ant.
targets 中,指明了,每次構(gòu)建時需要完成的target,可以指定多個target.
build file 指明了,使用什么樣的ant完成實際的構(gòu)建過程.
properties 指明了ant腳本中的使用的運行時參數(shù).這些參數(shù)可以使用變量替換,hudson 會解析出實際的值再傳給ant.
這就是這個任務(wù)可以執(zhí)行的最基本配置,保存,并點擊右上角的build new ,可以立即執(zhí)行一個構(gòu)建.構(gòu)建結(jié)果如下:

紅色表示失敗構(gòu)建,如果失敗,可以在%HUDSON_HOME%\jobs\下查看對應(yīng)任務(wù)構(gòu)建的日志來排查問題.
8. 兩個可能經(jīng)常需要關(guān)注的配置.
1.每個job的 workspace.

如果不指定絕對路徑,配置的ant等腳本就是相對這個工作空間的.在上面的例子中工作空間的用處不大,但是在一些其他類型的構(gòu)建,比如從svn中簽出代碼構(gòu)建時,用處就體現(xiàn)出來了,另外,一些hudson的插件,所利用的文件(構(gòu)建腳本生成,這些插件不會去關(guān)注文件產(chǎn)生,而是對這些文件做二次處理)都是放到工作空間的,工作空間相當與構(gòu)建系統(tǒng)和hudson的一個交流中介.推薦是每個項目有自己獨立的工作空間.
2.自動構(gòu)建的頻率設(shè)定

也就是什么時候觸發(fā)構(gòu)建,三種方式:
當別的項目構(gòu)建完畢后發(fā)生構(gòu)建
利用cron表到式來指定頻率,對cron表達式不熟悉的話,可以參考quartz(hudson內(nèi)部使用的調(diào)度框架)相關(guān)的文檔.
檢測scm(svn、cvs等)的狀態(tài),如果檢測到變化,自動發(fā)生構(gòu)建.
借助husdon,基本能做到無人值守構(gòu)建和部署,不少插件可以利用,也可以開發(fā)自己的插件.上面的僅僅是一個例子而與,如果要應(yīng)對實際工作中的問題,得好好研究才行.