10,使用Hudson進行持續集成

一. 持續集成的做用、過程和優點

    持續集成就是快速高頻率自動構建 項目的全部源代碼 ,併爲項目成員提供豐富的反饋信息。 java

    一次完整的持續集成包含以下步驟 數據庫

        1持續編譯 (舊代碼應所有刪除,從新編譯全部最新代碼) apache

        2持續數據庫集成 (清理數據庫,從新建立表結構) windows

        3持續測試 (單元測試儀 + 集成測試) tomcat

        4持續審查  Checkstyle  PMD 、測試覆蓋率,頻率能夠低一些) 服務器

        5持續部署 框架

        6持續反饋 maven

    持續集成的好處  svn

        1) 儘早暴露問題。(修復問題成本低) 工具

        2) 減小重複操做。

        3) 簡化項目發佈。

        4) 創建團隊信心。

二. Hudson簡介

      Hudson(http://hudson-ci.org ) 提供了靈活的插件擴展框架,許多公司都選擇了它,如 JBoss (http://hudson.jboss.org )  Sonatype (https://grid.sonatype.org/ci ) 

三. 安裝Hudson

1. 安裝要求

      Hudson 必須運行在 JRE1.5 以上。

2. 下載

    能夠從http://hudson-ci.org/下載最新的安裝包。下載完成後得到一個hudson.war

3. 安裝

    下載後爲 hudson.war 能夠直接運行

        java jar hudson.war

    其默認端口爲 8080 ,能夠訪問 http://localhost:8080 。也能夠使用 --httpPort 指定端口:

        java jar hudson.war httpPort=8082

    也能夠將 war 包部署到 Jetty  Tomcat  Web 容器中。( context path  /hudson 

4. 直接啓動運行

    1) 啓動

    下載後爲 hudson.war 能夠直接運行

        java jar hudson.war

    其默認端口爲 8080 ,能夠訪問 http://localhost:8080 。也能夠使用 --httpPort 指定端口:

        java jar hudson.war httpPort=8082

    2) 中止

    在命令行按下Ctrl+C鍵。

5. 部署到tomcat運行

    也能夠將war包部署到JettyTomcatWeb容器中。(context path/hudson

6. tomcat做爲系統服務隨windows操做系統一塊兒啓動

    1) 創建installTomcat.bat文件

    2) 在文件中填入如下內容

        rem 安裝Hudson服務

        set CATALINA_BASE=D:\user\local\tomcat\hudsonServer\apache-tomcat-6.0.35

        set CATALINA_HOME=D:\user\local\tomcat\hudsonServer\apache-tomcat-6.0.35

        call D:\user\local\tomcat\hudsonServer\apache-tomcat-6.0.35\bin\service.bat install Hudson

    說明:CATALINA_BASE設置的是tomcat的根目錄。

    注意:tomcat須要下載windows專用版的tomcat纔會有service.bat文件。

    3) 運行該bat文件

四. 準備Subversion倉庫

1. 安裝svn

2. 建立svn倉庫

3. 將代碼導入到倉庫中

    導入前應先使用mvn clean清除項目輸出文件。

    而後將account項目的代碼導入到svn倉庫/account/trunk中。

五. Hudson的基本系統配置

    在 Hudson 登陸頁面左邊的管理 Hudson  (Manage Hudson) 系統管理 Configure System )中能夠配置多個 JDK  Hudson 能夠自動安裝 JDK ),多個 Maven(Hudson 能夠自動安裝 Maven ), Email notification 配置(SMTP 服務器,接收者列表等)

六. 建立Hudson任務

1. 概述

      Hudson 在新建任務時,可選的任務類型有 Build a free-style software project (不只支持 Maven ,還支持 Ant  Shell 等其餘構建工具) Build a maven2 project (使用 Hudson 自帶的 Maven 。前者須要的配置多一點,後者會使用Hudson自帶的maven。除非你已經十分熟悉Hudson,不然推薦使用free-style類型。

    下面依次介紹free-style任務的各類配置。

2. Hudson任務的基本配置

        Discard Old Builds選項配置如何拋棄舊的構建。若是每次構建相關的文件都保存下來,磁盤空間將被漸漸消耗光。Hudson爲此提供了兩種方式讓用戶選擇保留哪些構建任務的相關文件:

        1) Days to keep builds:若是其值爲非空的N,就僅保留N天以內的構建文件。

        2) Max # of builds to keep:若是#非空,就僅保留最多#個最近構建的相關文件。

        如:保留10個最近的構建,在Max # of builds to keep一欄中輸入10便可。

3. Hudson任務的源碼倉庫配置

    在項目配置頁面Source Code Managerment部分,選擇Subversion,而後在Repository URL文本框中輸入項目的Subversion倉庫地址(如:svn://127.0.0.1/account/trunk)

    而後單擊enter credential填寫配置倉庫的認證信息。

4. Hudson任務的構建觸發配置

      Hudson 支持三種方式觸發構建:

        1) Build after other projects are built:在其餘項目構建完成後構建本項目。

        2) Build periodically:週期性的構建本項目。

        3) Poll SCM:週期性的輪詢源碼倉庫,發現有更新時構建本項目。

    通常使用第三種。

       Hudson 使用著名的 UNIX 任務調試工具Cron(http://en.wikipedia.org/wiki/Cron)所使用的配置方式來配置輪詢代碼倉庫的頻率:用 5 個字段表示不一樣的時間單位,字段之間用空格分隔:分(0-59) 時(0-23) 日(1-31) 月(1-12) 星期幾(0-7,0、7都表示週日)。

    幾種特殊匹配符:

            1) * :匹配範圍內任何值

            2) M-N :匹配 M-N 範圍內任何值

            3) A , B ,  , Z :逗號匹配多個值

            4) */X 或 M-N/X :範圍內能被 X 整除的

    星期幾與日期是或的關係。

    對於一個健康的項目,常見的作法是:每隔10分鐘輪詢代碼倉庫,Schedule對應的配置爲:*/10 * * * *

    能夠用#Schedule配置文本框中進行註釋

5. Hudson任務的構建配置

    配置Hudson使用運行Maven命令構建項目:

            1)單擊Build部分的Add build step,選擇Invoke top-level Maven targets

            2)而後選擇一個安裝好的Maven版本,輸入maven命令如:clean deploy便可。

七. 監視Hudson任務狀態

1. 全局任務狀態

      Hudson 當前任務狀態有:

        藍色:最近一次構建是成功的

        紅色:最近一次構建是失敗的

        黃色:最近一次構建成功但不穩定(測試失敗了)

        灰色:未被執行過或者已被禁用

    任務長期的狀態的天氣狀況有:

        晴: 80% 以上的集成是成功的

        晴有云: 60%-80% 的集成是成功的

        多雲: 40%-60% 的集成是成功的

        雨: 20%-40% 的集成是成功的

        雷雨: 20% 如下的集成是成功的

2. 自定義任務視圖

        Maven 能夠自定義視圖從而對任務進行分類,並自定義想監控的屬性列。

3. 單個任務狀態

4. Maven項目測試報告

    在任務配置頁面中能夠設置」Post-build Actions」,選擇」Publish JUnit test result report」,將」Test report XML」設爲**/target/surefire-reports/TEST-*.xml,Hudson就會在任務狀態頁面中顯示maven-surefire-plugin生成的測試報告。

    在 Maven 構建命令中添加 Dmaven.test.failure.ignore ,失敗的測試就不會致使構建失敗,任務狀態就不會變成紅色,但會變成黃色。

八. Hudson用戶管理

      Hudson 可以在訪問源碼倉庫的時候自動獲取相關用戶信息並存儲

    爲用戶添加詳細信息,如E-mail地址,它將被用來發送郵件反饋。

九. 郵件反饋

1. 在系統設置界面配置郵件服務器信息

    1) 系統界面(E-mail Notificatoin

    2) 而後輸入如下信息:

    SMTP serverSMTP郵件服務器地址

    Default user email suffix:默認用戶郵件後綴。該功能能夠在用戶沒有配置郵件地址的時候(這裏假定配置的郵件後綴爲@foo.com)Hudson須要發郵件給如mike用戶的時候就會發送到 mike@foo.com

    System Admin E-mail Address:系統管理員郵件地址,即Hudson郵件提示所用的發送地址。

    Hudson URLHudson服務器地址。

    SMTP AuthenticationSMTP相關的認證配置。

2. 配置Hudson任務使用郵件反饋

    Hudson 默認會在如下狀況發送 email notification:

        1) 失敗的構建

        2) 成功構建後的一次不穩定構建

        3) 失敗或不穩定構建後的一次成功構建

    用戶能夠配置是否是每個不穩定構建都發 email 。

十. Hudson工做目錄

      Hudson 使用用戶目錄下的 .hudson/ 目錄做爲其工做目錄,能夠經過設置HUDSON_HOME來改變其位置。

      userContent 目錄能夠存聽任何用戶文件,經過 Hudson 的 Http 服務能夠訪問該文件(在Http://localhost:8080/userContent 下)。